Struts2注意点
来源:互联网 发布:sql语句查询多张表 编辑:程序博客网 时间:2024/05/17 18:19
Struts2
将所有的请求都先经过一个前端控制器,在前端控制器中实现框架的部分功能,即通过过滤器来实现对所有请求的拦截。
配置文件加载顺序(我们可以更改的配置文件,且后加载的文件的值可覆盖前面的)
1. struts.xml
2. struts.properties
3. web.xml
在struts.xml文件中进行常量的配置
<struts>
<!--i18n:国际化. 解决post提交乱码 -->
<constantname="struts.i18n.encoding"value="UTF-8"></constant>
<!--指定反问action时的后缀名
http://localhost:8080/struts2_day01/hello/HelloAction.do
-->
<constantname="struts.action.extension"value="action"></constant>
<!--指定struts2是否以开发模式运行
1.热加载主配置.(不需要重启即可生效)
2.提供更多错误信息输出,方便开发时的调试
-->
<constantname="struts.devMode" value="true"></constant>
</struts>
分模块开发的配置
<struts>
<!-- 引入其他struts配置文件 -->
<includefile="cn/itheima/b_dynamic/struts.xml"></include>
<!—不指定路径默认在src下是的方式 -->
<include file=" c_default-struts.xml"></include>
</struts>
关于Action
推荐Action类继承ActionSupport类。
通过<action>标签中的method属性来配置具体执行Action中的哪个方法。
其通配符配置为:<action name="类名_*" class="完全限定类名" method="{1}"/>
Struts2相关的API:
ActionContext用来传送值到不同域的对象。
ActionContext context =ActionContext.getContext();
context.put(“name”,”yrf”);
context.getApplication().put(“name”,”yrf”);
context.getSession().put(“name”,”yrf”);
Struts2对数据的封装:
属性驱动,模型驱动(推荐)
模型驱动中Action类必须实现ModelDriven接口,并且要重写getModel()方法。使用这种方式,在JSP页面中可直接使用对象属性。需要注意的是在Action类中,手动构建对象时首先要创建对象。
转发过程
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
重定向过程
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
OGNL表达式与EL表达式类似,都是视图导航语言,但是比EL表达式更为强大。
EL表达式是从11个内置对象中取值:requestScope,sessionScope,applicationScope,pageScope,
pageContext,params,paramValues,header,headerValues,cookie,initParams
OGNL表达式是从OGNLContext对象中取值。
OGNLContext(OGNL上下文对象)包含两个部分,如下
例如:
OgnlContext oc = new OgnlContext();
Ognl.getValue(“属性名”, oc, oc.getRoot());
从Context中取值时只需要改变getValue方法的参数。
例如:
Ognl.getValue(“#对象.属性名”, oc, oc.getRoot());
给ROOT赋值,例如:Ognl.getValue(“属性名=’要赋的值’”, oc, oc.getRoot());
给Context赋值,例如:Ognl.getValue(“#对象.属性名=’要赋的值’”, oc, oc.getRoot());
且getValue方法为可变参数,可以给多个赋值参数,但是只能有一个取值参数,因为只返回最后一个参数的取值内容。例如:Ognl.getValue(“#对象.属性名=’要赋的值’”, “属性名”, oc, oc.getRoot());
Struts2与OGNL表达式的结合
在Struts2当中,OGNLContext就是ValueStack(值栈)。
拦截器
创建拦截器有三种方法:实现Inerceptor类,继承AbstractInterceptor类,继承MethodFilterInterceptor类(推荐)
继承MethodFilterInterceptor类后会重写doIntercept方法
Protected String doIntercept(ActionInvocation invocation) throw Exception{
//前处理
System.out.println(“MyInterceptor的前处理”);
//放行
invocation.invoke();
//后处理
System.out.println(“MyInterceptor的后处理”);
//不放行就返回一个字符串,即不执行后续的拦截器以及Action,直接交给result跳转页面
return “success”;
}
自定义拦截器
<interceptors>
1. 注册拦截器
< interceptor name=”myInter” class=”完全限定名”></ interceptor>
2. 注册拦截器栈
<interceptor-stack name=”myStack”>
<!--自定义拦截器引入-->
<interceptor-ref name=” myInter”>
<!—指定哪些方法不拦截-->
<param name=”excludeMethods”>方法名,方法名,。。。</param>
<!—指定哪些方法不拦截,与上面不拦截方法不能同时指定-->
<param name=”includeMethods”>方法名,方法名,。。。</param>
</ interceptor-ref >
<!--默认的拦截器栈(20个)-->
<interceptor-ref name=”defaultStack”></ interceptor-ref >
</interceptor-stack>
3. 指定默认拦截器栈
<default-interceptor-ref name=” myStack”></default-interceptor-ref>
</interceptors>
- Struts2标签注意点
- struts2使用注意点
- Struts2注意点
- Struts2 工程配置注意点
- struts2升级注意几点
- struts2标签使用中一个注意点
- struts2上传文件注意的关键点
- 关于struts2文件上传的注意点
- struts2+spring2.5+hibernate3.3的注意点
- 应用Struts2.1.6须注意的几点(转载)
- struts2 ognl中字符串比较的一个注意点
- Struts2文件上传的注意的几点
- 配置Eclipse+TomCat+Struts2 需要注意的点
- struts2使用DMI方式访问注意的点
- struts2基础——需要注意的几点
- struts2基础——需要注意的几点
- struts2基础——需要注意的几点
- 注意点
- 线性顺序表
- fiddler 设置断点并修改请求
- ServletJSP:下
- nginx处理post请求(http响应头部的收发)
- RecycleView使用详解
- Struts2注意点
- Linux已经26岁了,和我同龄
- 关于 cin 和 cou,以及什么是最快的输入输出方法
- mybatis报错
- 手动测试驱动编程
- 让孩子过早懂事,是种残忍的教养
- CSS中属性有多个值的理解
- 7-1 数组循环左移
- 多态实现(向上转型、向下转型)--java