Struts2 2

Struts2 2

访问Servlet

  • ActionContext类:是action执行的上下文对象
方法描述
void put(String key, Object value)模拟HttpServletRequest的setAttribute()方法
Object get(String key)获取参数key对应的值
Map<String,Object> getApplication()返回一个Application级的Map对象
static ActionContext getContext()获取当前线程的ActionContext对象,对应request
Map<String,Object> getParamrters()返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String,Object> getSession()获取一个Map类型的HttpSessionn对象
void setApplication(Map<String,Object> appliction)设置Application上下文
void setSession(Map<String,Object> session)设置一个Map类型的session值
//获取对应request的actionContext对象
ActionContext actionContext = ActionContext.getContext();
...
//获取对应application的对象
actionContext.getApplication();
//获取session对象
actionContext.getSession()
  • 以上方法通过ActionContext类访问Sevlet API,但是无法直接获得Servlet API实例,struts2提供了以下一系列接口
  • SercletRequestAware:实现该接口的Action类可以直接访问web应用的HttpServletRequest实例
  • ServletResponseAware:实现该接口的Action可以直接访问web应用的HttpServletResponse实例
  • SessionAware:实现该接口的Action可以直接访问web应用的HttpSession实例
  • ServletContextAware:实现该接口的Action可以直接访问web应用的HttpSession实例
public class RequestDemo2Action extends ActionSupport implements ServletRequestAware{
  HttpServletRequest request;
  @Override
  public void setServletRequest(HttpServletRequest request){
    this.request = request;
  }
  
  @Override
  public String execute() throws Exception{
    ...
  }
}
  • ServletActionContext的静态方法
    • HttpServletRequst getRequest():获取web应用的HttpServletRequest对象
    • HttpServletResponse getResponse():获取HttpServletResponse
    • ServletContext getServletContext():获取servletContext对象
    • PageContext getPageContext():获取PageContext对象
    public String execute() throws Exception{
      HttpServletRequest request = ServletActionContext.getRequest();
      ...
      request.setAttribute(...);
      request.getSession().setAttribute(..);
      //向application中存值
      ServletContext.getServletContext().setAttribute(...);
    }
    

结果页面的配置

  • struts.xml的result标签

  • name属性:指定逻辑视图的名称,默认是SUCCESS

  • type属性:指定返回的视图资源的类型,默认是dispatcher

    • 在struts-default包中,包在struts2-core-2.3.24.jar
    属性说明
    chain用来处理action链,被跳转的action中仍然能获取上个页面的值,如request信息
    dispatcher用来转向页面,通常处理JSP,是默认的结果类型
    freemarker用来整个freemarker模板结果类型
    httpheader用来处理特殊的http行为结果类型
    redirect重定向,被跳转的页面丢失传递的信息
    redirectAction重定向到一个action,跳转的页面丢失传递的信息
    stream向浏览器发送InputStream对象,通常用来处理文件下载,还可用与ajex数据
    velocity用来整合velocity结果类型
    xslt用来整合XML/XSLT结果类型
    plainText显示原始文件内容,例如文件源代码
    postback使得当前请求参数以表单形式提交
  • 全局结果页面配置:这个包下的所有返回相同字符串的值都可以向这个页面来进行跳转

 <global-results>
 <result name = "success">/....jsp</result>
 </global-results>
  • 局部结果:在某个Action中返回的字符串的值会向这个页面跳转
    <action name="request" class="类全路径">
      //也就是配置在action内
      <result name="success" type="dispatcher">...jsp</result>
    </action>
    

数据封装

  • 将接收的数据封装以向业务层进行传递
  • 一般封装到JavaBean中
  • 数据的封装分成两大类:属性驱动、模型驱动

属性驱动

  • 直接在action中定义各种java基本数据类型的字段,使得字段与表单数据相对应,并利用这些字段进行数据传递
    ActionDemo1 extend ActionSupport{
      private String name;
      private Integer age;
      private Date birthday;
      private Double salary;
    
      public void setName(String name){
        this.name = name;
      }
      ...
      ...
      ...
    
      @Override
      public String execute() throws Exception{
        ...
      }
    }
    
  • 页面提供表达式方式
    1. 页面编写
    <input type ="text" name="user.name"/>
    ...
    
    1. Action编写
    public class ActionDemo2 extends ActionSupport{
      private User user;
      
      public User getUser(){
        return user;
      }
      
      public void setUser(User user){
        this.user = user;
      }
      
      @Override 
      public String execute() throws Exception{
        ...
      }
    
    }
    

模型驱动

  • 通过实现ModelDriven接口来接收请求参数,重写getMode()方法,这个方法返回的就是Action所使用的数据模型对象
  • 模型驱动通过JavaBean模型进行数据传递,只要是普通的JavaBean,就可以充当模型部分
    public class ActionDemo extends ActionSupport implements ModelDriven<User>{
      private User user = new User();
      @Override
      public User getModel(){
        return user;
      }
    
      @Override
      public String execute() throws Exception{
        ...
      }
    }
    
    • 优先使用模型驱动,因为struts2内部很多结果都是围绕模型驱动设计的,但是如果页面向多个对象中封装,就需要使用属性驱动的方式2了

封装集合类型的数据

封装到List集合中

public class demo extends ActionSupport{
  private List<User> list;

  public List<USer> getList(){
    return list;
  }

  public void setList(List<User> list){
    this,list = list;
  }

  @Override 
  public String execute() throws Exception{
      for(User user:list){
        ....
      }
      ....
  }
}

封装到Map集合

public class demo extends ActionSupport{
    private Map<String,User> map;

    public Map<String,User> getmap(){
      return list;
    }

    public void setmap(Map<String,User> map){
      this.map = map;
    }

    @Override 
    public String execute() throws Exception{
        for(String key:map.keySet()){
          ....
        }
        ....
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值