struts2学习笔记1
1.struts.xml必须存放在src目录下,这样生成到tomcat中,才能位于classes目录下。
2.web.xml中使用Struts2的配置(使用filter拦截器,拦截所有请求):
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern如果是“/*”,则form表单中的action=*.action,如<form action="Login.action"></form>
如果使用的是struts表单form,这form中的action="Login",如<s:form action="Login"></s:form>
3.在Action接口中,如果想要访问HttpSession对象,可以使用ActionContext.getContex().getSession()方法,不过该方法返回的是一个Map对象,Structs2的
系列拦截器会将Map对象与HttpSession关联起来。
public String execute() { if("lisi".equals(Name)&&"123456".equals(Password)) { ActionContext.getContext().getSession().put("name", Name); ActionContext.getContext().getSession().put("password", Password); return SUCCESS; } else { return INPUT; } }
其中ActionContext.getContext().getSession()得到的对象为Map<String,Object>
几种获取Servlet API的方法:
(1)使用ActionContext类。
(2)继承ServletContextAware ---获取WebContext对象。
继承ServletResponseAware --获取HttpServletResponse对象。
继承ServletRequestAware --获取HttpServletRequest对象。
(3)使用ServletActionContext类的静态方法,获取PageContext,HttpServletRequest,HttpServletResponse,ServletContext对象。
4.struts2中的valueStack是放在request对象中的,如可以使用ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack")获得ValueStack对象。
- 利用脚本获取传入值:
在struts2中action传递给jsp中的数据是保存在OgnlValueStack中的,所以在jsp页面中如果想利用脚本而不是sturts标签获取传入值的话,尽量使用OgnlValueStack的值获得,例如:
<%...OgnlValueStack stack = (OgnlValueStack) request.getAttribute("struts.valueStack");
Article article = (Article)(stack.findValue("article"));%>
- sturts2标签自动转换Html标签
在使用struts2标签<s:property value="">来显示传递值的时候,会将字符串中的html标签转换,所以可以利用java脚本直接获取传入值,使用方式见第一条
5. FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。如果用户请求一action结尾,该请求将被转入Struts2框架处理。
Struts2框架提供了系列拦截器,该系列拦截器负责将HttpRequest请求中的参数解析出来,传入到Action中,并回调Action的execute()方法来处理用户请求。
6.如果配置<result />结果时没有使用location参数,则系统会把<result>..</result>之间的字符串作为location值。如果result中没有指定type类型,则系统会使用默认的type值:dispatcher(jsp视图),如果没有指定name值,则默认的name为success。
7.全局结果:<result/>结果放在了<global-result />元素中。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" > <struts> <package name="struts2" extends="struts-default"> <global-results> <result>${target}.jsp</result> </global-results> <action name="Login" class="com.demo.action.LoginAction"> <result name="login">/index.jsp</result> <result name="register">/Register.jsp</result> </action> </package> </struts>
如果一个Action中的result值与global-result中的result值一样,则Action中的结果会覆盖全局的结果,请求会访问Action中result对应的视图结果。只有当在Action中找不到相应的result值,才会使用全局result。