在之前的学习中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. IDEA文件查找功能失效(ctrl+shift+N)

    由于断电.蓝屏引起的强制关机等情况,会导出IDEA文件查找功能失效,Enter file name窗口输入的文字显示红色,无法查出需要的文件.  解决方法: 可以点击File,选择Invalidate ...

  2. 微信小程序的跳转navigateTo()和redirectTo()用法和区别

    原文链接:https://blog.csdn.net/u013128651/article/details/79736410  wx.navigateTo({}) ,保留当前页面,跳转到应用内的某个页 ...

  3. Qt源码学习之路(2) QCoreApplication(1)

    QCoreApplication最重要的函数便是exec(),我们便从这个函数开始分析QCoreApplication都干了什么. 先列出exec()函数的源码 static int exec();/ ...

  4. Java线程同步的Monitor机制(Lock配合Condition)

    Monitor模式是一种常见的并行开发机制, 一个Monitor实例可以被多个线程安全使用, 所有的monitor下面的方法在运行时是互斥的, 这种互斥机制机制可以用于一些特性, 例如让线程等待某种条 ...

  5. CORS-跨域问题:Access-Control-Allow-Origin Header and the ASP.NET Web API

    代码控制跨域: 如何使用:在 Global.asax 对应的控制类中: protected void Application_BeginRequest() { if (CorsFilter.IsOpt ...

  6. [E2E_L9]GOMFCTemplate的融合进阶

    在前面出现的融合方法中,最突出的问题就是每次运算,都需要将整个推断的过程全部操作一遍,这样肯定是费时间的--所以我们需要将能够独立的地方独立出来,但是这个过中非常容易出现溢出的错误--经过一段时间的尝 ...

  7. Firefox 浏览器的长期支持版本(Firefox ESR)

    http://ftp.mozilla.org/pub/firefox/releases/  Firefox 浏览器 下载地址 http://m.newsmth.net/article/Browsers ...

  8. LeetCode 993. Cousins in Binary Tree(判断结点是否为Cousin)

    993. Cousins in Binary Tree In a binary tree, the root node is at depth 0, and children of each dept ...

  9. libmysqlclient.so.18 not found 的解决方法

    现象:在银河麒麟下,安装了mysql,并且mysql服务正常运行,但是Qt访问mysql还是报Driver not loaded,ldd Qt自己的mysql驱动报错如标题所示.路径: 解释:很明显就 ...

  10. IEnumerable是什么

    首先怎么认识一个对象 IE+number+able  IE数字 可能 从名字上看不出什么玩意,以至于很久都没人真正认识这个接口 先看官方的解释 IEnumerable Interface Expose ...