Struts2框架之结果视图配置、参数封装、获取Servlet相关API
2018-08-09 20:33
253 查看
结果视图配置
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <package name="test" namespace="/" extends="struts-default"> <!-- 全局结果视图: 当前包下的所有的action都可以共享的视图资源 称之为全局结果视图 --> <global-results> <result name="success" type="dispatcher">/success.jsp</result> <result name="login">/login.jsp</result> <result name="error">/error.jsp</result> <result name="index">/index.jsp</result> </global-results> <action name="quick_*" class="com.itheima.action.QuickAction" method="{1}"> <!-- 结果视图的属性: name: 逻辑试图名 与Action的方法分返回值进行匹配 type: 视图的跳转类型 dispatcher(默认值):Action转发视图(jsp) redirect:Action重定向视图(jsp) redirectAction:Action重定向Action --> <result name="success" type="redirect">/success.jsp</result> <!-- <result name="error">/error.jsp</result> --> </action> <action name="quick2_*" class="com.itheima.action.QuickAction2" method="{1}"> <!-- <result name="success" type="redirectAction">quick_show</result> --> </action> </package> </struts>
在struts2中获得Servlet相关API的方式
获得在javaweb阶段常用的对象 request、response、session、servletContext...
1、视图配置
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <package name="test" namespace="/" extends="struts-default"> <!-- 全局结果视图: 当前包下的所有的action都可以共享的视图资源 称之为全局结果视图 --> <global-results> <result name="success" type="dispatcher">/success.jsp</result> <result name="login">/login.jsp</result> <result name="error">/error.jsp</result> <result name="index">/index.jsp</result> </global-results> <action name="api1" class="com.itheima.action.ServletAPIAction1" method="show"></action> <action name="api2" class="com.itheima.action.ServletAPIAction2" method="show"></action> </package> </struts>
2、通过ServletActionContext获取
ServletActionContext:与Servlet相关的Action的上下文对象,该对象相当于一个工具类,维护Servlet相关对象的引用
[code]public class ServletAPIAction1 extends ActionSupport { public String show(){ //获得Servlet相关API对象 HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = request.getSession(); ServletContext servletContext = ServletActionContext.getServletContext(); System.out.println(request); System.out.println(response); System.out.println(session); System.out.println(servletContext); return NONE; } }
3、使用接口注入方式(了解)
[code]public class ServletAPIAction2 extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{ public String show(){ //获得request System.out.println(request); //获得response System.out.println(response); //获得ServletContext System.out.println(servletContext); return NONE; } private HttpServletRequest request; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } private HttpServletResponse response; @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } private ServletContext servletContext; @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } }
参数封装(重点)
1、视图配置
[code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <package name="test" namespace="/" extends="struts-default"> <!-- 全局结果视图: 当前包下的所有的action都可以共享的视图资源 称之为全局结果视图 --> <global-results> <result name="success" type="dispatcher">/success.jsp</result> <result name="login">/login.jsp</result> <result name="error">/error.jsp</result> <result name="index">/index.jsp</result> </global-results> <action name="param1_show" class="com.itheima.action.Param1Action" method="show"></action> <action name="param2_show" class="com.itheima.action.Param2Action" method="show"></action> </package> </struts>
2、属性驱动
通过Action属性进行参数封装的方式 称其为属性驱动
[code]public class Param1Action extends ActionSupport { public String show(){ //1、获得请求参数,原始方式 //String username = ServletActionContext.getRequest().getParameter("username"); //2、struts2获得请求参数 为请求数据的name的属性值提供set方法即可 //<input type="text" name="username"> ===> username=zhangsan&password=123&... //提供setUsername() setPassword() //System.out.println(username); //3、封装user、person实体数据 /*System.out.println(user); System.out.println(person);*/ //4、封装集合数据 System.out.println(strList); System.out.println(userList); System.out.println(userMap); return NONE; } //1、封装普通参数 private String username; public void setUsername(String username) { this.username = username; } //2、封装实体参数 private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } private Person person; public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } //封装集合参数 private List<String> strList; private List<User> userList; private Map<String,User> userMap; public List<String> getStrList() { return strList; } public void setStrList(List<String> strList) { this.strList = strList; } public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } public Map<String, User> getUserMap() { return userMap; } public void setUserMap(Map<String, User> userMap) { this.userMap = userMap; } }
3、模型驱动
在Action中显示的指定模型对象是谁,那么在封装数据时直接写模型对象的属性名就可以
步骤:
1、Action实现ModelDriven<指定实体类型>
2、实现接口的getModel方法(model对象需要手动实例化)
[code]//使用模型驱动进行数据封装 执行当前Action的模型对象是User public class Param2Action extends ActionSupport implements ModelDriven<User>{ public String show(){ System.out.println(user); return NONE; } private User user = new User(); @Override //返回当前模型对象 public User getModel() { return user; //不为null 但是内部没有数据 } }
比较模型驱动与属性驱动区别?
属性驱动:提供set/get方法,实体对象不需要手动创建,同时封装多个实体
模型驱动:实现ModelDriven接口,模型对象必须要手动创建,不能同时封装多个实体
相关文章推荐
- Struts2的结果类型、ServletAPI获取、参数接收
- Struts2的配置和获取相关servlet API的方法
- Struts2(二)结果视图,实体封装和访问Servlet的API
- Struts2的结果类型、ServletAPI获取、参数接收
- servlet中获取配置文件中的参数.
- servlet中获取配置参数
- 关于Servlet和JSP中配置的初始参数的获取与设置
- Java - Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
- struts2,转发、重定向,访问servletAPI、获取表单参数
- 4、处理方法中获取请求参数、请求头、Cookie及原生的servlet API等
- servlet都有一个servletConfig对象;四个config对象可以调用的方法;ServletContext对象之获取web项目信息;设置全局初始化参数的配置
- struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式
- 【JavaEE笔记】Struts2 (二) 结果页面配置 、获取表单提交数据 、提供获取表单数据方式 、获取数据封装到集合中
- Servlet学习笔记—ServletConfig参数配置与获取
- Javaweb-2 Servlet 创建和配置和参数获取
- Servlet(3)ServletConfig接口的介绍(获取web.xml中某个Servlet中的初始配置参数)
- 二、struts2结果页面配置,获取表单数据,数据封装
- 其他几个API(2)_获得数据库相关的信息_获得参数信息_获得结果信息
- 5.Struts2框架中的ServletAPI如何获取
- 20160321servlet学习笔记获取web.xml配置参数