在jsp中,内通过内置对象 HttpServletRequest的getSession()方法可以获取到HttpSession,比如:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.wyl.suneyaee" prefix="Wyl"%>
<!-- 引入jquery等 -->
<%@ include file="/WEB-INF/head.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
<!--
$(function() {
$('input').keydown(function(e) {
var curKey = e.which;
//46 是 Delete键
if (curKey == 46) {
clear(this);
$(this).focus();
}
}); $('#idUserName').keydown(function(event) {
var curKey = event.which;
//13 是回车键
if (curKey == 13) {
console.log('你按的是:回车' + '键');
} });
/**
清除value值,主要是针对于input
*/
function clear(obj) {
$(obj).attr('value', null);
}
})
</script> <title>Insert title here</title>
</head>
<body>
<Wyl:getIP /> <form action="doAjax"><input value="aaa" type="text"> <br>
<input value="doAJax" type="submit"></form> <br>
<form action="wdAjax"><input value="MyAjax.myAjax()..."
type="text"> <br>
<input value="wdAjax" type="submit"></form> <br>
用户名
<form action="toLogin"><input type="text" name="user.userName">
<br>
<%
request.getSession().setAttribute("hahaAnyKey", "我是hahaAnyKey.jsp页面传入session的值");
%>
<input type="text" name="user.passWord"> <input type="submit">
</form> <br>
用户名2 ,模型驱动,而且这个表单对应的LoginAction2.java中封装了dto,而且可以使用Delete键清空输入框
<form action="toLogin2"><input type="text" name="userName"
id="idUserName"> <br>
<input type="text" name="passWord"> <input type="submit">
</form> -----------
<span xmlns="http://www.w3.org/1999/xhtml"
class="button collapse-button"></span> </body>
</html>

中的58行,就可以获取到session,然后直接在HttpSession里存放一个值。

而在Struts2中,比如在一个action中,可以直接通过ActionContext.getContext().getSession()获取Session对象(注意:这个ActionContext是

com.opensymphony.xwork2.ActionContext类型的),实际上这里的Session是一个Mapper,只是Struts2做了封装,我们还是可以通过这个mapper类型的Mapper来获取到上面登录页面放在HttpSession中的属性。
比如在一个action中就可以通过如下代码获取到上面jsp中存放在HttpSession中的属性,
 ActionContext atx = ActionContext.getContext();
Map<String, Object> session = atx.getSession();
Set<String> set = session.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = (String) it.next();
String val = (String) session.get(key);
System.out.println("key:"+key+",value:"+val);
}

打印结果:

key:hahaAnyKey,value:我是hahaAnyKey.jsp页面传入session的值

这个Action的完整代码如下:

 package com.log;

 import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.log.entity.User;
import com.log.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.util.UtilTime; /**
* 普通的登陆
*
* @author Wei
*
*/
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
private UserService uService = new UserService();
private String error; public String getEror() {
return error;
} public void setEror(String error) {
this.error = error;
} public UserService getuService() {
return uService;
} public void setuService(UserService uService) {
this.uService = uService;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String execute() throws Exception {
/**
* 账号密码:wyl,1234
*/
if (uService.login(user)) {
ActionContext atx = ActionContext.getContext();
Map<String, Object> session = atx.getSession();
//对应于 WylInterceptor.java拦截器,这个拦截器里需要用到
session.put("currentUser", user);
//用来设置登录超时的参数
session.put("lastTime", UtilTime.getCurTime());
return SUCCESS;
} else {
// this.error = "error";
// return this.error;
HttpServletResponse resp = ServletActionContext.getResponse();
//不加 resp.setContentType("text/html;charset=UTF-8"); 会出现页面的中文为乱码的情况
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("账号:"+user.getUserName()+",<br/>密码:"+user.getPassWord()+" 的不正确,请确认");
// out.println("<br/><input type=\"button\" value=\"点我\" />");
out.println("<a href=\"login.jsp\" style=\"color:orange;\">点我重新登陆</a>");
/**
* 下面的Map<String, Object> session = atx.getSession();为了演示获取到的session(实际上是Mapper,Struts2框架做了封装)
*/
ActionContext atx = ActionContext.getContext();
Map<String, Object> session = atx.getSession();
Set<String> set = session.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = (String) it.next();
String val = (String) session.get(key);
System.out.println("key:"+key+",value:"+val);
}
//什么都不返回,直接用HttpServletResponse在网页上写提示
return null;
}
}
}

,调试截图:

Strut2中的session和servlet中的session的区别的更多相关文章

  1. C#的HttpModule中及Java的Servlet中成员变量乱用导致的不易重现的BUG

    3年前写的在HttpModule中记录访问日志的代码,在最近使用日志数据分析登录账号的IP情况时,才发现了一个不易重现的BUG——日志中记录的登录账号出现串掉的情况.之所以这个时候才发现该问题,是因为 ...

  2. JavaWeb(一)-Servlet中的Config和Context

    一.ServletConfig对象 1.1获取一个servletConfig对象 1)通过初始化方法获得一个servletconfig 2)通过继承父类(GenericServlet.)得到一个ser ...

  3. 关于servlet中doGet和doPost乱码再一次理解

    今天系统的整理了在web项目下,出现的编码问题,下面就做一些总结: 首先对HTTP协议中对GET和POST的定义:   GET POST 后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据 ...

  4. 2016-1-30 Servlet中Session管理(Sesssion追踪)

    Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...

  5. Servlet中(Session、cookies、servletcontext)的基本用法

    /req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 1.session的设置:            //得到和req相关联的session,如果没有就创建ses ...

  6. Servlet中的cookie和session

    保存数据的2中方式 Cookie Session Cookie 我们可以将一些信息保存到cookie中,cookie存放在对应的浏览器目录里面.每个站点可以保存20个cookie,最大长度不超过4k. ...

  7. servlet中cookie和session操作

    1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器 登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问 ...

  8. servlet中Session的用法

    ## (1)什么是Session? 服务器端为了保存用户的状态而创建的一个特殊的对象(即session对象).          当浏览器第一次访问服务器时,服务器会创建session对象(该    ...

  9. Servlet规范简介——web框架是如何注入到Servlet中的

    Servlet规范简介--web框架是如何注入到Servlet中的 引言 Web框架一般是通过一个Servlet提供统一的请求入口,将指定的资源映射到这个servlet,在这个servlet中进行框架 ...

随机推荐

  1. 前端web应用的组件化(二) 徐飞

    Web应用的组件化(二) https://github.com/xufei/blog/issues/7 管控平台 在上一篇中我们提到了组件化的大致思路,这一篇主要讲述在这么做之后,我们需要哪些外围手段 ...

  2. POJ 3111 K Best(最大化平均值)

    题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...

  3. asp.net 使用my97 datepicker实现前后两个日期的范围界定

    说明:日期选择后,前面的日期小于等后面的日期,后面的日期大于等于前面的日期.点点看就知道了:) - 这里将周末日期不可选.代码如下: <html xmlns="http://www.w ...

  4. 选项卡 js操作

    html代码展示(这里展示的是关于日程的标签页)css样式这里省略了>>>>自己写的可能更好看 <div class="row"> <ul ...

  5. XStream和Json

    XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响 ...

  6. c++ build options(important)

    The C runtime library  4 versions: Multi-threaded (/MT) Multi-threaded Debug (/MTd) Multi-threaded D ...

  7. BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )

    求出后缀数组后, 对height排序, 从大到小来处理(r相似必定是0~r-1相似), 并查集维护. 复杂度O(NlogN + Nalpha(N)) ------------------------- ...

  8. nginx+php的配置

    作了N多次php环境的搭建,网上的方法还真是多,但是实际操作起来总有一些大大小小的出入,很多错误经常让我纠结不已.久病成医,渐渐地我自己就总结出了一些经验.自我感觉良好. 这种方法并非以前所流行的ap ...

  9. js程序调试技巧

    1.No "Access-Control-Allow-origin" 解决方案:这是API参数没有穿对的跨域错误,修改API(ajax请求路径)以保证其参数传递正确即可: 2.lo ...

  10. javascript 数组和字符串的转化

    字符串转化为数组 'abcde' -> ['a', 'b', 'c', 'd', 'e'] 简单一点的方法,__String.prototype.split__可以将字符串转化为数组,分隔符为空 ...