您的位置:首页 > 编程语言 > Java开发

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接口,模型对象必须要手动创建,不能同时封装多个实体

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐