在之前的学习中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. 基于python的学生管理系统(含数据库版本)

    这次支持连接到后台的数据库,直接和数据库进行交互,实现基本的增删查改 #!/usr/bin/python3 # coding=utf-8 """ ************ ...

  2. mysql mod() 获取余数

    mysql> ,); +-----------+ | mod(,) | +-----------+ | | +-----------+ row in set (0.00 sec)

  3. spark集成kerberos

    1.生成票据 1.1.创建认证用户 登陆到kdc服务器,使用root或者可以使用root权限的普通用户操作: # kadmin.local -q “addprinc -randkey spark/yj ...

  4. OpenFOAM——同心环中的自然对流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL009: Natural Convection in a Concentric A ...

  5. 作业:分布式文件系统HDFS 练习

    这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292. 利用Shell命令与HDFS进行交互 1.目录操作 H ...

  6. python开发笔记-字典按值排序取前n个key值

    场景举例: 假如我们有某个班级的语文成绩数据,格式为字典,其中字典key为学生姓名,value为学生成绩: 那么,如何获得单科成绩排名前3的学生姓名? 代码如下:--数据样例,方便测试 def dic ...

  7. git pull push 所有分支

    因为远端 git 服务器上有很多分支,一个个分支pull太麻烦,所以找了 pull 所有分支的方法,如下: git branch -r | grep -v '\->' | while read ...

  8. MySQL数据库事务的四大特性以及事务的隔离级别

    一.事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因 ...

  9. Python3 queue队列类

    class queue.PriorityQueue(maxsize=0) 优先级队列构造函数. maxsize 是个整数,用于设置可以放入队列中的项目数的上限.当达到这个大小的时候,插入操作将阻塞至队 ...

  10. keepalived双主虚拟路由配置

    我使用了两台虚拟机做测试 系统centos7.3 主机A:172.16.1.123 主机B:172.16.1.124 其实和普通配置keepalived差不多,就是复制多了一个vrrp_instanc ...