Struts2的功能:接收参数,封装请求参数,调用业务层处理请求,封装结果数据,返回页面。Struts2的核心思想是过滤和分发。应用来说学习的重点是拦截器的应用和数据校验,类型转换。
首先,Struts2的常用配置有六种,而需要我们配置的只有web.xml和struts.xml。web.xml可自动生成配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping><filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml配置如下:
<!-- package中namespace决定action的访问路径,默认为"",即可以访问所有路径下的Action,“/” 表示访问/index.action或/xx/index.jsp -->
<!-- action 的名为Login,就是前台调用的名,class为Action类路径,method为要调用的方法名-->
<!--result 为返回结果要调转的页面。 -->
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="action.RegisterAction" method="Login">
<result name="success">/success.jsp</result>
</action>
Action的写法:
(一).不继承不实现任何接口,利用反射机制。一般开发不会使用。
(二).实现Action接口,优点是其内部定义了一些逻辑常量,SUCCESS,ERROR,NONE,INUT
(三).继承ActionSupport接口,优点:可以进行表单数据的合法性校验,可以进行错误信息的封装,国际化信息的读取。
Action方法的调用:
1)通过method属性,指定调用的Action相应方法处理请求。
2)使用通配符,用*代替一个或多个任意字符。
3)动态方法调用,通过url动态指定调用Action中的方法,无需配置<action>
Action访问ServletApi的方法
1)以解耦的方式访问
//获得参数;
Map<String ,Object> parameterMap = ActionContext.getContext().getParameter();
//获得用户名和密码;
String[] user = (String[])parameterMap.get("username");
String[] pwd = (String[])parameterMap.get("pwd");
//向request保存属性;
ActionContext.getContext().put("name","request name");
//向session保存属性
ActionContext.getContext().getSession().put("name","request name");
//向Application保存属性
ActionContext.getContext().getApplication().put("name","request name");
在jsp;
${requestScope.name}...
2)直接访问
private HttpServletResponse response;
private HttpServletRequest request;
private ServletContext context;
public String execute(){
//向request保存数据:
request.setAttribute("name", "request itcast");
//向session保存数据;
request.getSession().setAttribute("", "");
//向servletAtrribute保存数据;
context.setAttribute("name", "");
}
常用的放回结果类型:转发和重定向
默认的跳转方式是转发,原因是值栈的数据在转发时有效。
重定向的应用-登陆后,重定向到主页。
<result type="redirect">
//重定向,自动实现动态方法的调用
<result type="redirectAction">
<param name="actionName">hello</param>
<param name="method">add</param>