访问从Servlet传递的JSP中的会话变量

访问从Servlet传递的JSP中的会话变量,jsp,tomcat,servlets,Jsp,Tomcat,Servlets,我已经查看了相关帖子,但没有得到我想要的 我的问题如下:我使用Tomcat8.0.30创建了一个web应用程序。有一个登录页面,它将用户名和密码转发给登录servlet。这个servlet在身份验证之后,设置一些会话属性并转发到loggedin.jsp。当我试图在JSP代码中访问这些属性时,我得到null并看到一个null指针异常。我知道这个问题听起来很相似,但我没有看到任何具体的解决办法 令我惊讶的是,我观察到,如果我在启动tomcat之前重新编译所有servlet并在WEB-INF/clas

我已经查看了相关帖子,但没有得到我想要的

我的问题如下:我使用Tomcat8.0.30创建了一个web应用程序。有一个登录页面,它将用户名和密码转发给登录servlet。这个servlet在身份验证之后,设置一些会话属性并转发到loggedin.jsp。当我试图在JSP代码中访问这些属性时,我得到null并看到一个null指针异常。我知道这个问题听起来很相似,但我没有看到任何具体的解决办法

令我惊讶的是,我观察到,如果我在启动tomcat之前重新编译所有servlet并在WEB-INF/classes/中复制它们的类文件,它就可以工作,而且在访问JSP中的会话属性时不会遇到任何问题。为什么会这样

我将属性设置为:

在Servelet:

HttpSession session = request.getSession(true);
String allroles = null;
// Get Some result. result is not null. I checked!!!!
session.setAttribute("allroles",result);

RequestDispatcher rd  = request.getRequestDispatcher("loggedin.jsp");
rd.forward(request, response);
在JSP中:

String allRoles=null;
allRoles= session.getAttribute("allroles").toString();

我一开始不明白为什么会有问题,如果我在一开始重新编译servlet,我真的不知道为什么问题会消失。请帮忙

换句话说,您的问题是因为您的servlet和项目没有正确地重新编译/重建/重新部署/重新启动造成的?那为什么会有这样的惊喜呢?您是否意识到您的根本问题与“访问从servlet传递的JSP中的会话变量”无关?对于servlet类中未正确编译的任何其他代码/任务,您都会遇到完全相同的问题。如果你真的想知道为什么你的servlet不是由你使用的任何工具“自动”编译的,那么你最好重新组织你的问题,把重点放在这个问题上。那么,为什么每次启动服务器时我都需要重新编译它们呢?我已经编写、编译并部署了它们。为什么每次我都需要重新编译它们。看来我可能错过了什么。你能解释一下吗?也许你正在使用的工具被(错误地)配置为不再自动构建和(热)部署项目,所以你必须手动完成?根据目前提供的信息很难说。我没有使用任何工具。我正在使用命令行手动执行此操作。顺便问一下,servlet没有正确编译意味着什么?没有错误。创建了一个类文件。我把那个文件放在适当的地方了。系统运行良好。然后我重新启动了系统。重新启动服务器。然后,服务器可能(错误地)配置为不再自动拾取部署文件夹中的更改。默认情况下,Tomcat应该为PublicWebContent中的所有文件执行此操作。对于WEB-INF中的所有类和库,仅重新部署webapp或重新启动服务器就足够了,而不是重新启动整个系统。换句话说,您的问题是因为您的servlet和项目没有正确重新编译/重建/重新部署/重新启动吗?那为什么会有这样的惊喜呢?您是否意识到您的根本问题与“访问从servlet传递的JSP中的会话变量”无关?对于servlet类中未正确编译的任何其他代码/任务,您都会遇到完全相同的问题。如果你真的想知道为什么你的servlet不是由你使用的任何工具“自动”编译的,那么你最好重新组织你的问题,把重点放在这个问题上。那么,为什么每次启动服务器时我都需要重新编译它们呢?我已经编写、编译并部署了它们。为什么每次我都需要重新编译它们。看来我可能错过了什么。你能解释一下吗?也许你正在使用的工具被(错误地)配置为不再自动构建和(热)部署项目,所以你必须手动完成?根据目前提供的信息很难说。我没有使用任何工具。我正在使用命令行手动执行此操作。顺便问一下,servlet没有正确编译意味着什么?没有错误。创建了一个类文件。我把那个文件放在适当的地方了。系统运行良好。然后我重新启动了系统。重新启动服务器。然后,服务器可能(错误地)配置为不再自动拾取部署文件夹中的更改。默认情况下,Tomcat应该为PublicWebContent中的所有文件执行此操作。对于WEB-INF中的所有类和库,只要重新部署webapp或重新启动服务器就足够了,而不是重新启动整个系统。