Struts2页面配置和访问servlet API
一、Struts2页面配置
在struts2中页面可以分为两种,全局页面和局部页面。
1、全局页面:
在一个<package></package>标签内的多个action都要跳转到该页面,则该页面是全局页面。
全局页面的配置:可以在<package></package>标签内使用<global-result></global-result>标签来配置。
注意:该配置只有在该<package>标签内才有效。
<struts> <package name="demo1" extends="struts-default" namespace="/"> <!-- 1、使用<global-results>标签来配置全局页面 2、该全局页面的配置只在该<package>标签内有效 --> <global-results> <result name="success">/jsp/success.jsp</result> </global-results> <action name="test" class="com.jack.action.PageAction"></action> <action name="test1" class="com.jack.action.PageAction"></action> </package> </struts>
2、局部页面:
在一个<package></package>标签内只有一个action要跳转到该页面,则该页面为局部页面。
局部页面直接在<action>标签内使用<result>标签配置
<struts> <package name="demo1" extends="struts-default" namespace="/"> <action name="test" class="com.jack.action.PageAction"> <result name="success">/jsp/success.jsp</result> </action> <action name="test1" class="com.jack.action.PageAction"> <result name="success">/jsp/error.jsp</result> </action> </package> </struts>
3、注意
当一个Action同时配置了全局页面和局部页面 ,Action只会显示局部页面。
<struts> <package name="demo1" extends="struts-default" namespace="/"> <!-- 1、使用<global-results>标签来配置全局页面 2、该全局页面的配置只在该<package>标签内有效 --> <global-results> <result name="success">/jsp/success.jsp</result> </global-results> <action name="test" class="com.jack.action.PageAction"></action> <action name="test1" class="com.jack.action.PageAction"> <!-- 该action同时配置了两个页面 只会相应局部页面 --> <result name="success">/jsp/error.jsp</result> </action> </package> </struts>4、result标签中的type属性
在result标签内,有一个属性为type,该属性表示action到配置路径中的方式。该属性有以下的值。
在值中要重点记住chain、dispatcher、redirect、redirectAction四个属性。
chain和redirectAction用于Action的跳转,chain一般不用,因为存在缓存问题。
dispatcher和redirect用于jsp页面的跳转,dispatcher为默认方式。
属性 说明 chain 用来处理action链的,属于转发方式,跳转的页面仍能获得上个页面的值,如request信息 dispatcher 用来转向页面,属于转发方式,通常处理jsp,是type属性的默认值 freemarker 用来整合FreeMarker模板结果类型 httpheader 用来处理特殊的http行为结果类型 redirect 重定向于一个URL,被跳转的页面中丢失传递的信息 redirectAction 重定向到一个Action,被跳转的页面中丢失传递的信息 stream 向浏览器发送InputStream对象,通常用于处理文件的下载,同时还可用于Ajax velocity 用来整合Velocity模板结果类型 xslt 用来整合XML/XSLT结果类型 plainText 显示原始文件内容,例如文件源代码 postback 是的当前请求数据以表单形式提交 二、使用Servlet API操作域对象
1、使用ActionContext对象来操作域对象
public class ActionContextDemo extends ActionSupport { /** * 使用ActionContext对象来操作域对象 */ public String execute(){ //1、调用ActionContext对象的getContext方法的到实例 ActionContext actionContext = ActionContext.getContext(); //1、操作request域 actionContext.put("username", "张三"); actionContext.put("address", "中国 湖北"); actionContext.put("tel", "1234560"); //2、操作application域 actionContext.getApplication().put("username", "张三"); actionContext.getApplication().put("address", "中国 湖北"); actionContext.getApplication().put("tel", "1234560"); //3、操作session域 actionContext.getSession().put("username", "张三"); actionContext.getSession().put("address", "中国 湖北"); actionContext.getSession().put("tel", "1234560"); return SUCCESS; } }2、使用ActionContext对象来接受表单提交的数据
public class ActionContextDemo extends ActionSupport { /** * 使用ActionContext对象来获取request对象 */ public String execute(){ //1、调用ActionContext对象的getContext方法的到实例 ActionContext actionContext = ActionContext.getContext(); /** * 2、使用该对象的getparamenters方法得到一个map集合 * map集合中的key是表单输入项中name属性的值,value是输入的值 */ Map<String, Object> map = actionContext.getParameters(); //3、得到所有的key Set<String> set = map.keySet(); for (String key : set) { //4、根据key获得每个值,值的形式是数组,因为可能存在复选框 Object[] object= (Object[]) map.get(key); System.out.println(key+":"+Arrays.toString(object)); } return NONE; } }3、使用ServletActionContext来操作域对象
public class ServletActionContextDemo extends ActionSupport{ //使用ServletActionContext来操作域对象 public String execute(){ //1、得到ServletActionContext对象 HttpServletRequest request =ServletActionContext.getRequest(); //2、操作request域 request.setAttribute("username", "李四"); request.setAttribute("address", "湖北 十堰"); request.setAttribute("tel", "452133"); //3、操作session域 request.getSession().setAttribute("username", "李四"); request.getSession().setAttribute("address", "湖北 十堰"); request.getSession().setAttribute("tel", "452133"); //4、操作application域 request.getServletContext().setAttribute("username", "李四"); request.getServletContext().setAttribute("address", "湖北 十堰"); request.getServletContext().setAttribute("tel", "452133"); return SUCCESS; } }4、使用ServletActionContext来获取表单提交的数据
public class ServletActionContextDemo extends ActionSupport{ //使用ServletActionContext来操作Servlet的api public String execute(){ //1、得到ServletActionContext对象 HttpServletRequest request =ServletActionContext.getRequest(); //2、得到每一个输入项的值 String username =request.getParameter("username"); String address =request.getParameter("address"); String tel =request.getParameter("tel"); System.out.println("username:"+username+",address:"+address+",tel:"+tel); return NONE; } }5、使用ServletRequestAware来操作域对象
/** * 1、实现ServletRequestAware接口 */ public class ServletRequestAwareDemo extends ActionSupport implements ServletRequestAware { /** * 2、声明一个HttpServletRequest对象 */ private HttpServletRequest request; /** * 3、实现接口的方法 返回创建的request对象 */ @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } /** * 4、使用request操作域对象 */ public String execute() { //2、操作request域 request.setAttribute("username", "李四"); request.setAttribute("address", "湖北 十堰"); request.setAttribute("tel", "452133"); //3、操作session域 request.getSession().setAttribute("username", "李四"); request.getSession().setAttribute("address", "湖北 十堰"); request.getSession().setAttribute("tel", "452133"); //4、操作application域 request.getServletContext().setAttribute("username", "李四"); request.getServletContext().setAttribute("address", "湖北 十堰"); request.getServletContext().setAttribute("tel", "452133"); return SUCCESS; } }6、使用ServletRequestAware来获取表单提交的数据
/** * 1、实现ServletRequestAware接口 */ public class ServletRequestAwareDemo extends ActionSupport implements ServletRequestAware { /** * 2、声明一个HttpServletRequest对象 */ private HttpServletRequest request; /** * 3、实现接口的方法 返回创建的request对象 */ @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } /** * 4、使用request的方法得到每一个输入项的值 */ public String execute() { String username = request.getParameter("username"); String address = request.getParameter("address"); String tel = request.getParameter("tel"); System.out.println("username:" + username + ",address:" + address + ",tel:" + tel); return NONE; } }
项目源代码见下一篇博客