0 0

java web 问题UserInfo对象存储到session后,返回页面为空,刷新一次后才会显示,这是为什么?急。5

我做的效果是登录的时候有一个选择 “下次打开网页时自动登录”。

使用的是SSH框架

spring2.0

Strtus2.0

hibernate3.0

我的测试:

第一步,登录时如果选择了此选项 我就保存账户密码到Cookie中。

第二步,关闭网页。

第三部,重新打开网站。会直接进入过滤器filter,然后再进入action,再跳转到页面。

第四部,bug调试进入filter,filter中我从Cookie中获取用户是否选择了自动登录,如果选择了,就获取账号密码,得到用户对象,然后把用户对象保存到session中。

第五部,进入action,在action中,我从session中​重新获取用户对象(显示是有用户对象的,这里是没有缓存的。)

第六部,返回到页面,对象为空。

第七部,随便去一个页面,又有UserInfo对象了。

filter中的代码
HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		UserInfo userInfo = (UserInfo) request.getSession().getAttribute("UserInfo");
		if(userInfo == null){
			Object action = actionInvocation.getAction();
			if(action instanceof com.SamplePlate.action.UserInfoAction || action instanceof com.SamplePlate.action.ImageCode){
				return actionInvocation.invoke();
			}
			Cookie[] cs = request.getCookies();
			if(cs!=null){
				for (Cookie c : cs) {
					if ("SamplePlate".equals(c.getName())) {
						String[] val = c.getValue().split(" ");
						if(val[2].equals("2")){
							WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
							UserInfoFacade userInfoFacade = (UserInfoFacade) wac.getBean("UserInfoFacade");
							userInfo = userInfoFacade.findUserInfoByLoginID(val[0]);
							if(userInfo.getPassWord().equals(val[1])){
								request.getSession().setAttribute("UserInfo", userInfo);
							}else{
								request.setAttribute("userInfo", userInfo);
								request.setAttribute("isCheckbox", "2");
								request.setAttribute(MyConstants.ERROR_KEY, "密码已被更改,请您重新登录!");
								return "login";
							}
						}
					}
				}
			}
		}
		return actionInvocation.invoke();

跳转action中的代码
HttpServletRequest request = ServletActionContext.getRequest();
		String page = request.getParameter("url");
		if(page==null)page = "index";
		if(
				!page.equals("login") &&
				!page.equals("index") &&
				!page.equals("shoppingCart") &&
				!page.equals("registered") &&
				!page.equals("userData") &&
				!page.equals("booking") &&
				!page.equals("detailed")
			){
			page = "index";
		}
		if(page.equals("login")){
			UserInfo userInfo = (UserInfo) request.getSession().getAttribute("UserInfo");
			if(userInfo!=null)return "index";
			Cookie[] cs = request.getCookies();
			for (Cookie c : cs) {
				if ("SamplePlate".equals(c.getName())) {
					String[] val = c.getValue().split(" ");
					if(val[2].equals("1")){
						userInfo = new UserInfo();
						userInfo.setLoginID(val[0]);
						userInfo.setPassWord(val[1]);
						request.setAttribute("userInfo", userInfo);
						request.setAttribute("isCheckbox", val[2]);
					}
				}
			}
		}
		return page;

页面代码
<div class="banner">
	<center>
		<table>
			<tr>
				<td>
					<s:if test="#session.UserInfo != null">
						<span>${UserInfo.loginID },您好,欢迎您回来!</span> <a href="javascript:void(0)">用户中心</a> <a href="javascript:void(0)">退出</a>
					</s:if>
				</td>
				<td style="text-align: right;">
					<img src="images/GWC.gif" width="18" height="14" />
					<span>我的购物车 <s:if test="#session.UserInfo == null">[</span><a href="javascript:void(0)">注册</a> <a href="javascript:void(0)">登录</a><span>]</s:if></span>
					 <a href="javascript:void(0)">补缴花款</a> 
					 <a href="javascript:void(0)">配送范围</a> 
					 <a href="javascript:void(0)">付款方式</a>
				</td>
			</tr>
		</table>
	</center>
</div>


大神,我这哪里有问题。

问题补充:我发现问题了。
是strtus2.0 标签问题。 刚进入页面以下代码是找不到的
<s:if test="#session.UserInfo != null"></s:if>
但是我在页面${UserInfo }这样写的话,就有对象。
这个该怎么解决?
2014年2月17日 12:30

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

0 0

你可以将浏览器接受cookie的范围降低,你尝试一下。

2014年2月17日 15:25

相关推荐

    java后台请求http并保持Session

    在用户登录成功后,服务器会返回一个Session ID,通常作为Cookie返回给客户端。客户端在后续的请求中需要带上这个Session ID,以表明其身份。 - 在Java中,可以使用`javax.servlet.http.HttpSession`接口来处理...

    session_test.zip

    当用户通过登录界面验证后,服务器会创建一个Session对象,并将用户的登录信息(如用户名、用户ID等)存储在这个Session中。这样,每当用户在网站的不同页面之间跳转时,服务器可以通过检查Session来识别用户是否...

    java 返回多个值的问题

    其中我们可以通过userinfo来知道获得的数据,虽然我们直接使用 userinfo的相关set方法将数据保存到userinfo对象中,一般如果不重新生成对象,我们可以将值正确返回. 但是在hibernate等数据库访问时,我们却无法...

    先建一个数据库映射类(UserInfo)

    Hibernate解决的主要问题就是ORM映射问题,即如何将数据库表中的数据映射到Java对象上。本文主要介绍如何在Hibernate框架中创建一个数据库映射类`UserInfo`。 #### 创建数据库映射类(UserInfo) 在Hibernate框架中...

    java web 实验

    【Java Web实验详解】 在Java Web开发中,实验是学习过程中的重要环节,它能帮助开发者深入理解技术原理并实践应用。本实验主要关注JSP(JavaServer Pages)语法的应用,涉及用户登录信息的处理,这是一项基础且...

    session使用方法

    此外,Session还可以存储任意复杂的数据结构,如数组或对象,这使得Session成为一种灵活的状态管理工具。然而,需要注意的是,过多地依赖Session可能导致服务器负载增加,因为每个用户都会占用一定的服务器资源。...

    java实现的简易xshell终端

    Java 实现简易Xshell终端是基于Java语言与JSch库结合的一种技术,它允许开发者创建一个功能类似于Xshell的命令行界面,通过SSH协议连接到远程服务器进行操作。JSch是一个纯Java实现的SSH2库,它提供了对SSH2协议的...

    java中list排序

    如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高系统的性能。这样可以减少数据库查询的次数,从而提高系统的性能。 在 Java 中,对 List 排序可以使用 Collections.sort(list) 方法,但是这种...

    java user info

    3. **数据持久化**:当需要将用户信息存储到数据库时,可以使用JDBC(Java Database Connectivity)或ORM(对象关系映射)框架如Hibernate或MyBatis。你需要学习如何连接数据库,执行SQL查询,以及如何将用户对象...

    jsp response.sendRedirect不跳转的原因分析及解决.docx

    这是因为浏览器在接收到重定向指令后会自动跳转到新的URL,而此时服务器仍在继续执行剩余的代码并尝试向浏览器发送额外的数据。这种情况下,浏览器可能会因为接收到额外的数据而导致跳转失败。 - **如何解决**:...

    JSP.zip_jsp userinfo_jsp增删_jsp实现增删改

    5. **更新页面** - 使用JSP的内置对象response向客户端发送响应,可能是重定向到另一个页面,或者在当前页面上显示操作结果。 **文件“jsp增删改查”** 这个文件名可能是项目的主JSP文件,包含了所有增删改查操作...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    ajax_dwr实现页面无刷新加载

    DWR允许JavaScript在客户端直接调用Java对象的方法,这极大地降低了Ajax应用的开发难度。DWR提供了以下关键特性: 1. **自动处理JavaScript到Java的远程调用**:DWR通过自动编译JavaScript接口来调用Java方法,使得...

    shiro获取登录状态和用户信息

    - 通过 `Session` 的 `getAttribute` 方法获取 `DefaultSubjectContext.PRINCIPALS_SESSION_KEY` 的值,这个键对应的值为 `SimplePrincipalCollection` 类型的对象,存储了认证主体的信息。 - 将 `...

    java对DWR的操作

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时的、双向的JavaScript和服务器端Java代码之间的通信。它简化了Ajax(Asynchronous JavaScript and XML)开发,使得开发者可以在不刷新整个页面...

    Struts2返回JSON对象

    Struts2框架提供了一种方便的方式来处理JSON响应,使得开发人员能够轻松地将Java对象转换为JSON格式并发送到客户端。 首先,要启用Struts2的JSON支持,你需要在项目的`lib`目录下添加必要的依赖库。对于Struts2 ...

    java通过代码登录远程linux服务器并执行linux命令源码以及jar包

    连接成功后,可以通过Session对象创建一个Channel,通常使用`session.openChannel("exec")`创建一个执行命令的通道。设置命令,然后打开并读取输出流。 ```java public void executeCommand(Session session, ...

    UserInfo.java

    用户表

    java对微信的OAuth2.0网页授权进行访问授权

    Java作为广泛使用的后端编程语言,自然可以与微信接口结合实现这一功能。本教程将深入讲解如何使用Java进行微信OAuth2.0网页授权,并涉及Accesstoken、Code的获取与使用,以及如何获取并处理返回的UserInfo数据。 1...

Global site tag (gtag.js) - Google Analytics