1 0

JSP调用Servlet后,通过request.getSession().getAttribute("XX"),数据丢失5

问题描述:
1.首先通过login.jsp登陆系统,用户验证通过后,讲用户信息设置到session中,具体代码如下:
User user = UserManager.getInstance().login(userId, password);
			
session.setAttribute("user_info", user);
			
//session.setMaxInactiveInterval(60*60);
			
response.sendRedirect(request.getContextPath() + "/main.jsp");

2.上面定向到main.jsp页面后,user_info数据存在。
3.然后我在此页面中写入如下请求servlet代码后,
function addFlowCard() {
	window.self.location = "<%=basePath%>servlet/FlowCardServlet?command=${showAdd}";
}

4.在servlet里面取得的值却为null,,代码如下
@Override
protected final void service(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
	command = request.getParameter("command");
	user = (User) request.getSession().getAttribute("user_info");
	super.service(request, response);
}

5.上面request.getSession().getAttribute("user_info")取得的值为null。
6.请各位看看哪里有问题??

问题补充:谢谢各位了,问题解决了!
1.问题主要内容,因为window.self.location = "<%=basePath%>servlet/FlowCardServlet?command=${showAdd}";调用过去后session为null,request.getSession()新建了一个新的session,所以之前setAttribute()的参数,均为null
2.问题原因:经过长时排查,发现问题,为 <%basePath%>的取值有问题,原来有问题的写法是:
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ "/" + path + "/";
解析结果为:window.self.location = "http://localhost:8080//yourApp
改正后的写法:
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
解析结果为:window.self.location = "http://localhost:8081/yourApp
可以看出,在path前面多了一个"/",,然后。。。
3.谢谢各位
2013年9月05日 11:33

2个答案 按时间排序 按投票排序

0 0

采纳的答案

response.sendRedirect(request.getContextPath() + "/main.jsp"); ->

response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/main.jsp"));


你的应该是jessionid丢失,所以下次会新建一个session故为null,你可以看下main.jsp是没有cookie名称jessionid的

2013年9月05日 12:43
0 0

我建议先从第三步的请求看起吧,一般浏览器都带开发者工具的,检查一下请求是否把sessionId带过去了

2013年9月05日 12:36

相关推荐

    数据库测试test.sql

    request.getRequestDispatcher("/admin/register.jsp").forward(request,response); return; } //2.调用业务层完成注册操作并返回结果 User user = new User(userId,realName,pwd,age, Arrays.toString...

    servlet服务应用基础.docx

    4. **会话管理**:`HttpSession`接口用于处理用户会话,通过`request.getSession()`创建或获取会话,可以使用`setAttribute()`和`getAttribute()`方法在会话范围内存储和检索对象。 5. **编码设置**:除了对请求和...

    jsp+servlet最简单的增删改查

    2. **读取(Read)**:JSP通常用于展示数据,通过内联Java代码或者JSP表达式从Servlet传递的数据进行渲染。 ```jsp &lt;%= item.getName() %&gt; &lt;!-- JSP表达式显示数据 --&gt; ``` 3. **更新(Update)**:Servlet接收...

    servlet 详细入门教程,工作原理、编译、通过 JSP 页面调用 servlet

    本文详细介绍了 Servlet 的基本概念、工作原理以及常见应用场景,包括编译和安装、通过 JSP 调用、共享变量、使用 `HttpServlet` 类、文件读写、数据库访问和会话管理等内容。Servlet 作为 Java Web 开发的核心技术...

    JSP_Servlet面试题[定义].pdf

    实例化servlet类 - 正确,JSP转换后的Servlet类会被实例化。 - A和B涉及的是Servlet生命周期的方法,而不是转换阶段。 - E. 加载servlet类 - 这是在Servlet容器启动时发生的。 8. 从session中获取对象应使用`...

    javaServlet请求转发和重定向.pdf

    * forward() 方法的调用者与被调用者之间共享相同的 request 对象和 response 对象,而 sendRedirect() 方法调用者和被调用者使用各自的 request 对象和 response 对象,它们属于两个独立的请求和响应过程。...

    Servlet详解.pdf

    通过JSP页面调用Servlet 在实际开发中,经常需要从JSP页面跳转到Servlet来处理业务逻辑。可以通过以下方式实现: - 在JSP页面中使用`&lt;form&gt;`标签提交表单数据到Servlet。 - 使用`&lt;a&gt;`标签或JavaScript发起AJAX...

    session的使用

    另外,还可以直接调用 `request.getSession()` 方法,这等同于调用 `request.getSession(true)`。 ##### 使用 在 `javax.servlet.http.HttpSession` 接口中定义了一系列方法,用于操作会话数据: - `void ...

    JavaBean 在jsp和serlvle中传递技术要点.doc

    JavaBean在JSP和Servlet之间的传递技术是Java Web开发中的核心概念,主要用于数据的封装和共享。以下将详细解析这个技术要点。 一、初始化JavaBean 1. 在JSP中: 当在JSP中使用`&lt;jsp:useBean&gt;`标签时,会根据`...

    ACCP 二期JSP_servlet_javabean笔记

    - **获取Session**:通过`HttpSession session = request.getSession(true);`可以获取到当前用户的Session。如果参数为`true`且当前没有Session,则会创建一个新的Session;如果是`false`且当前没有Session,则返回`...

    JSP验证码登录程序

    在JSP页面中,我们可以使用`&lt;img&gt;`标签来调用Servlet显示验证码图像。同时,设置表单以便用户输入验证码。 ```jsp ; charset=UTF-8" pageEncoding="UTF-8"%&gt; &lt;!DOCTYPE html&gt; 登录 用户名:...

    JSP内置对象使用说明.doc

    HttpSession session = request.getSession(); session.setAttribute("username", "John"); ``` 6.Application对象类:ServletContext Application对象代表整个Web应用,用于在整个应用范围内共享数据。设置和获取...

    servlet课件(工作原理,处理表单)

    2. **执行**:Web服务器通过Servlet容器(如Tomcat)来调用Servlet的`service()`方法。这个方法是Servlet处理请求的主要入口点。在这里,Servlet可以获取请求参数,处理业务逻辑,并准备响应内容。 3. **应答**:...

    学习JSP(JBuilder版)——用Servlet实现页面间通信(Session对象)

    通过以上步骤,你可以在JSP应用中利用Servlet和Session对象实现页面间的数据通信。在实际开发中,结合JBuilder的工具支持,可以更加高效地完成这一任务。不断实践和学习,你将更深入地掌握这些核心技术,提升Web开发...

    jsp 精华 关于jsp资料,适合初学者和jsp学习的人

    - Session:HttpSession接口用于跟踪用户会话,通过request.getSession()获取,使用setAttribute()和getAttribute()管理会话数据。 - Cookie:持久化用户会话数据,创建并设置Cookie,通过response.addCookie()...

    jsp基础教程精讲 jsp基础教程精讲

    - **Session(HttpSession)**:通过`request.getSession()`创建,用于跨多个请求跟踪用户状态。 - **Cookie**:创建Cookie并设置超时时间,通过`response.addCookie()`发送到客户端,使用`request.getCookies()`...

    Session.docx

    欢迎((User) request.getSession().getAttribute("user")).getUsername() %&gt;回来! &lt;a href="&lt;%=request.getContextPath()%&gt;/LogoutServlet"&gt;退出 ``` 验证码的验证也可以利用session。在`ValiImageServlet`中...

    java 登录过滤 servlet web-inf

    在Java Web应用中,过滤器(Filter)是一种特殊的组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前拦截这些请求,并在请求完成之后返回给客户端前再次拦截响应。过滤器通常用于执行一些预处理工作,比如...

    java+servlet源码

    - 初始化:通过调用init()方法,仅在Servlet首次被请求时执行。 - 服务:处理每个客户端请求,调用doGet()或doPost()方法。 - 销毁:当Web应用停止或Servlet不再使用时,调用destroy()方法。 5. **请求处理** -...

Global site tag (gtag.js) - Google Analytics