Java 控制器中的会话属性为null,但在jsp中它具有值
这是一个控制器登录操作Java 控制器中的会话属性为null,但在jsp中它具有值,java,spring,jsp,session,model-view-controller,Java,Spring,Jsp,Session,Model View Controller,这是一个控制器登录操作 @RequestMapping(value = "/login_action") public ModelAndView login_action(@RequestParam("email") String email,@RequestParam("password") String password,RedirectAttributes redir){ ModelAndView model=new ModelAndView("WEB-IN
@RequestMapping(value = "/login_action")
public ModelAndView login_action(@RequestParam("email") String email,@RequestParam("password") String password,RedirectAttributes redir){
ModelAndView model=new ModelAndView("WEB-INF/view/index");
Configuration con = new Configuration().configure().addAnnotatedClass(Users.class);
SessionFactory sf= con.buildSessionFactory();
Session session = sf.openSession();
Query q=session.createSQLQuery("SELECT User_ID,User_First_Name,User_Last_Name,Email,User_Type,Program,Level,Gender FROM Users WHERE Email=:email AND Password=:password");
q.setParameter("email",email);
q.setParameter("password",password);
Object u = (Object) q.uniqueResult();
if(u==null) {
model.addObject("view","login");
model.addObject("errorMsg","Incorect Email or Password");
}else {
model=new ModelAndView("redirect:/profile");
redir.addFlashAttribute("user",u);
}
return model;
}
它将用户设置为会话,并在匹配电子邮件和密码后重定向到配置文件
@RequestMapping(value="/profile")
public ModelAndView profile(HttpSession session){
Object [] o=(Object[])session.getAttribute("user");
if(o==null){
ModelAndView model =new ModelAndView("redirect:/login");
return model;
}
ModelAndView model=new ModelAndView("WEB-INF/view/index");
model.addObject("title",o[1]+" "+o[2]+" - Profile");
model.addObject("view","profile");
return model;
}
当它被重定向到配置文件时,用户属性为空。所以它重定向到登录,即使我已经在会话中设置了用户
@RequestMapping(value="/login")
public ModelAndView login(){
ModelAndView model=new ModelAndView("WEB-INF/view/index");
model.addObject("title","Login");
model.addObject("view","login");
return model;
}
但在myheader.jsp中,用户是在会话中设置的
<c:choose>
<c:when test="${user!=null}">
<a>
Welcome, ${user[1]} ||<a href="profile">profile</a></a> <a href="logout"/>Logout</a>
</div>
</c:when>
<c:otherwise>
<div>
<a href="/"/>Home</a>||<a href="login"/>Login</a>||<a href="signup"/>Sign Up</a>
</div>
</c:otherwise>
</c:choose>
<hr>
||||
但是,当我点击链接到个人资料,它的工作
为什么?
登录页面:-
登录后,页面被重定向到配置文件并再次登录,因为用户在控制器中为空
但是页眉会改变,因为在jsp中,user中有值
当我点击profile时,它就工作了
您没有在会话中添加任何内容,而是在flash属性中添加了一些内容。但在jsp中,它正在从会话打印用户名。不,不是。它从flash变量中打印用户,这些变量在重定向后被添加为请求属性。在执行类似于
${user.property}
的操作时,首先检查请求范围、页面范围、会话范围,最后检查应用程序范围(检查servlet规范)。然后,请解释为什么在登录后单击配置文件时,它没有重定向到登录页面。如果用户为null或未设置,则配置文件控制器应重定向到登录页面,因为会话中没有任何内容。。。