在之前的学习中struts2已经可以处理大部分问题了。但是如果要将用户登录数据存入session中,可以有两种方式开存入ServletAPI。

一种解耦合方式,一种耦合方式。

1. 解耦合方式


解耦合方式---ActionContext : 解耦合方式获取的都是map对象

   //登录
public String login(){
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
//登录成功 数据存入Session中
//通过ActionContext可以获得Session
Map<String,Object> session = ActionContext.getContext().getSession();
session.put("currentUser", user);
/**
* 通过解耦合的方式还可以获取request,application
*/
Map<String,Object> request = (Map<String, Object>) ActionContext.getContext().get("request");
Map<String,Object> application = ActionContext.getContext().getApplication();
return Action.SUCCESS;
}
return Action.LOGIN;
}

好处:方便测试,没有侵入性,ActionContext可以不在Servlet容器环境中使用

2.耦合方式获取ServletAPI


下面讲的是耦合方式获取的Servlet对象

2.1 通过ActionContext获取

  //登录
public String login(){
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
//登录成功 数据存入Session中
/**
* 通过ActionContext对象获取HttpServletRequest对象
*/
HttpServletRequest req = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
HttpSession session = req.getSession();
session.setAttribute("currentUser", user);
/**
* 在ActionContext中还可以获取HttpServletResponse对象
* 和ServletContext对象
*/
HttpServletResponse resp = (HttpServletResponse)ActionContext.getContext().get(StrutsStatics.HTTP_RESPONSE);
ServletContext sc =(ServletContext)ActionContext.getContext().get(StrutsStatics.SERVLET_CONTEXT);
return Action.SUCCESS;
}
return Action.LOGIN;
}

2.2 通过ServletActionContext获取

  //登录
public String login(){
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
//登录成功 数据存入Session中
//通过ServletActionContext以耦合方式获取ServletAPI对象
HttpServletRequest req = ServletActionContext.getRequest();
HttpSession session = req.getSession();
session.setAttribute("currentUser", user);
/**
* 通过ServletActionContext工具类还可以获取到其他的ServletAPI对象
*/
HttpServletResponse resp = ServletActionContext.getResponse();
ServletContext sc = ServletActionContext.getServletContext();
return Action.SUCCESS;
}
return Action.LOGIN;
}

2.3 通过实现接口的方式来获取

public class UserAction4 implements ServletRequestAware{
private User user;
private HttpServletRequest req;
@Override
public void setServletRequest(HttpServletRequest request) {
this.req = request;
}
//登录
public String login(){
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
//登录成功 数据存入Session中
//通过ServletActionContext以耦合方式获取ServletAPI对象
HttpSession session = this.req.getSession();
session.setAttribute("currentUser", user);
return Action.SUCCESS;
}
return Action.LOGIN;
}
public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} }

java之struts2之ServletAPI的更多相关文章

  1. 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决

    微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...

  2. Java之struts2框架学习

    Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...

  3. Java框架Struts2

    struts2的核心和工作原理   在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...

  4. JAVA框架Struts2 servlet API

    一:servlet API 1)完全解耦接口: 使用ActionContext类进行相关操作: package jd.com.actioncontex; import com.opensymphony ...

  5. 2018.11.21 struts2获得servletAPI方式及如何获得参数

    访问servletAPI方式 第一种:通过ActionContext (重点及常用 都是获得原生对象) 原理 Action配置 被引入的配置文件 在页面调用取值 第二种:通过ServletAction ...

  6. java 的 struts2 Spring Hibernate 三大框架的整合

    原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入  struts2-spring-plugin-2.3.3.jar包  此包的作用是作为struts2 与 ...

  7. [Java Web]Struts2解决中文乱码问题

    1.设置struts的字符编码,能够在struts.xml中添加下面代码: <constant name="struts.i18n.encoding" value=" ...

  8. [Java Web]Struts2加起来(一个)

    Struts2环境配置 进口Struts2的需要jar包 在WEB-INF/classes(src)文件夹下创建struts.xml文件 在web.xml文件里加入Struts过滤器信息 经常使用配置 ...

  9. java里Struts2学习登录练习详解

    最近在学struts2里面遇到很多错误,今天跟大家分享一下,我的开发工具是Eclipse: 1.到网上下载Struts2的包,这里不再累赘,百度有很多: 2.新建一个项目,记得后面加上web.xml文 ...

随机推荐

  1. win10任务栏不显示垃圾的搜狗图标

    设置-->时间和语言-->拼写键盘和键入设置-->高级键盘设置-->语言栏选项-->语言栏-->勾选隐藏-->同时去掉在任务栏显示其他语言图标

  2. beforeDestroy的使用

    beforeDestroy ---实例销毁之前调用 需求是这样的: important:下面截图数据都是测试数据 日期在我点击查询的时候要存储,刷新就读内存,但是我点击其他页面再进来的时候,这个内存要 ...

  3. spring boot读取Excel

    首先引入相关依赖 <!--解析office相关文件--> <dependency> <groupId>org.apache.poi</groupId> ...

  4. SOAP简介及实例

    SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换. 或者更简单地说:SOAP 是用于访问网络服务的协议. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本 ...

  5. windows开机自动执行bat脚本

    一.以windows下备份sql数据库为例,开机自动执行.bat脚本 1.新建dump.bat文件,文件中的代码如下: set YYYYmmdd=%date:~0,4%%date:~5,2%%date ...

  6. 运行 puppeteer 报错 chrome: error while loading shared libraries: libpangocairo-1.0.so.0: cannot open shared object file: No such file or directory

    运行 puppeteer 报错 chrome: error while loading shared libraries: libpangocairo-1.0.so.0: cannot open sh ...

  7. ROS tf-深入Time和TF

    博客转载自:https://www.ncnynl.com/archives/201702/1313.html ROS与C++入门教程-tf-深入Time和TF 说明: 介绍使用waitForTrans ...

  8. Flutter中管理路由栈的方法和应用

    原文地址:https://www.jianshu.com/p/5df089d360e4 本文首先讲的Flutter中的路由,然后主要讲下Flutter中栈管理的几种方法. 了解下Route和Navig ...

  9. RabbitMQ整合Spring Booot【消费者应答模式】

    生产者代码不变,消费者: package com.toov5.Consumer; import java.io.IOException; import java.util.concurrent.Tim ...

  10. Js ascii 16进制 url-encode

    function fixedEncodeURIComponent (str) { return str.replace(/./g, function(c) { return '%' + c.charC ...