session.setAttribute()的问题

youyiyang 阳狮集团 2018-08-10 01:11:38
请问大家一个问题:session.setAttribute("LOGIN_USER1",respMessage);怎么把这个LOGIN_USER1持续的保存下去,现在是不是这个类执行后就自动消失了?
我想在另外一个控制器上能访问到这个LOGIN_USER1,而且如果还是用session的话。
现在的问题是当浏览器上调用另外要给控制器的时候,这个LOGIN_USER1的值就消失了。
...全文
260 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyiyang 2018-08-13
发现是 什么原因了。

RequestMapping(value="/api",method = RequestMethod.POST)
@ResponseBody
public String getWeiXinMessage(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws Exception
{
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8"); //微信服务器POST消息时用的是UTF-8编码,在接收时也要用同样的编码,否则中文会乱码;
response.setCharacterEncoding("UTF-8"); //在响应消息(回复消息给用户)时,也将编码方式设置为UTF-8,原理同上;
//初始化配置文件
String respMessage = CoreService.processRequest(request);//调用CoreService类的processRequest方法接收、处理消息,并得到处理结果;

// 响应消息
//调用response.getWriter().write()方法将消息的处理结果返回给用户
//return "redirect:${pageContext.request.contextPath}/xxt/debug?arg="+respMessage;
//ServletContext application = request.getServletContext();
session.setAttribute("param001", respMessage);
//application.setAttribute("param001", "respMessage");
return respMessage;
}

这块代码是用在微信公众号回复用户消息的,所以没有用到网页jsp,所以它的session没有,所以另外一个控制器上要在jsp页面上显示session就显示不出
回复
session的范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!况且你并没有手动设置session的生命周期时长,所以你的session会是默认的时长不会被销毁。肯定是你代码哪块出现的问题。
回复

有可能你传入的session和你存有数据的session不是同一个
回复
youyiyang 2018-08-10
是我用在自己的调试中的

RequestMapping(value="/api",method = RequestMethod.POST)
@ResponseBody
public String getWeiXinMessage(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws Exception
{
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8"); //微信服务器POST消息时用的是UTF-8编码,在接收时也要用同样的编码,否则中文会乱码;
response.setCharacterEncoding("UTF-8"); //在响应消息(回复消息给用户)时,也将编码方式设置为UTF-8,原理同上;
//初始化配置文件
String respMessage = CoreService.processRequest(request);//调用CoreService类的processRequest方法接收、处理消息,并得到处理结果;

// 响应消息
//调用response.getWriter().write()方法将消息的处理结果返回给用户
//return "redirect:${pageContext.request.contextPath}/xxt/debug?arg="+respMessage;
//ServletContext application = request.getServletContext();
session.setAttribute("param001", respMessage);
//application.setAttribute("param001", "respMessage");
return respMessage;
}

上面的控制器代码里面,我把respMessage的内容传入session的param001中,在下面的代码里面,我想通过jsp文件把这个respMessage显示出来,但是每次都显示不出来

//用来调试

@RequestMapping(value="/debug")
public ModelAndView debug(HttpServletRequest req, HttpSession session){
ServletContext application = req.getServletContext();
ModelAndView mav= new ModelAndView("hello1");
mav.addObject("debug1", session.getAttribute("param001"));
return mav;

}



<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<c:set var="stx" value="${pageContext.request.contextPath }"></c:set>
<head>

<title>hello1</title>

</head>

<body>
Hello 1
USER:${debug1}
url:${stx}
</body>
</html>


所以这里有什么问题导致这样的?
回复
秦拿希 2018-08-10
session本身在系统是共享的,不存在那个控制器访问不到这个session,当然session有时限,默认是30min。看下session的设置时间。session的设置看下web.xml下有没有<session-config>的设置,没有再去应用服务器(比如tomcat)的web/xml看下<session-config>的设置
回复
youyiyang 2018-08-10
调用另外一个控制器的时候
回复
发动态
发帖子
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
社区公告
暂无公告