关于request.setAttribute设置值,报空指针的问题

时间:2021-01-26 00:53:50
如图,代码很简单就是request.setAttribute("roles", roles);
但是运行时候时而保存,时而又不报错.....,通过debug,观察request 和roles都不为空
关于request.setAttribute设置值,报空指针的问题
关于request.setAttribute设置值,报空指针的问题

执行下一步就报错如下

严重: Servlet.service() for servlet [spring-mvc] in context with path [/kjfwrx] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at org.apache.catalina.connector.Request.notifyAttributeAssigned(Request.java:1555)
at org.apache.catalina.connector.Request.setAttribute(Request.java:1546)
at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:541)
at com.sharing.app.action.MainController.systemPermissionMgr(MainController.java:152)
at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:169)
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:232)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.sharing.app.filter.SessionFilter.doFilterInternal(SessionFilter.java:62)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)

25 个解决方案

#1


关键不是每次执行这行代码都报错,我一直点页面,调用这个事件,有时候会报,有时候又不会报...

#2


通过观察class,貌似报错在这儿?

关于request.setAttribute设置值,报空指针的问题

继续执行就报错了

关于request.setAttribute设置值,报空指针的问题

不知道是不是这几行代码,感觉反编译出来,执行路径怪怪的.....

#3


看不出来,你的request 不应该是空啊。 

#4


引用 3 楼 rui888 的回复:
看不出来,你的request 不应该是空啊。 


就是很奇怪的情况啊,确实不为空,但是就是报空指针....而且是随机报...

#5


你的servlet配置有问题,那个严重警告,你解决了这个就ok了

#6


引用 5 楼 syjgreen07 的回复:
你的servlet配置有问题,那个严重警告,你解决了这个就ok了


这个是spring的controller,跟servlet没啥关系吧?

#7


其实我想看roles集合的生成代码

因为request为空可能性不大

#8


引用 7 楼 lingfengzx 的回复:
其实我想看roles集合的生成代码

因为request为空可能性不大


如下:
关于request.setAttribute设置值,报空指针的问题

#9


引用 7 楼 lingfengzx 的回复:
其实我想看roles集合的生成代码

因为request为空可能性不大


关于request.setAttribute设置值,报空指针的问题

#10


参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute

#11


你的MainController.java类的第152行代码是request.setAttribute("roles", roles);吗?

#12


引用 10 楼 stacksoverflow 的回复:
参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题

#13


引用 11 楼 kejianguang01 的回复:
你的MainController.java类的第152行代码是request.setAttribute("roles", roles);吗?


是的

#14


引用 12 楼 a2862433 的回复:
Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。

#15


引用 14 楼 stacksoverflow 的回复:
Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试

#16


引用 15 楼 a2862433 的回复:
Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。

#17


引用 16 楼 stacksoverflow 的回复:
Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况

#18


引用 17 楼 a2862433 的回复:
Quote: 引用 16 楼 stacksoverflow 的回复:

Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况


我也是现学现卖,貌似是Servlet在整个的Web生命周期中只有一个实例。
Struts据我了解的话是ActionServlet是一个实例,每一个Action是单独的一个实例,所以不存在线程不安全的问题。
能解决问题就好,我们还要多多学习,找出问题的根本。

#19


引用 18 楼 stacksoverflow 的回复:
Quote: 引用 17 楼 a2862433 的回复:

Quote: 引用 16 楼 stacksoverflow 的回复:

Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况


我也是现学现卖,貌似是Servlet在整个的Web生命周期中只有一个实例。
Struts据我了解的话是ActionServlet是一个实例,每一个Action是单独的一个实例,所以不存在线程不安全的问题。
能解决问题就好,我们还要多多学习,找出问题的根本。


action和controller应该是一样的,都是spring管理的单例,里面的局部变量应该也是一样的才对,只是request存在销毁,二bean没有存在销毁,我还是没想通,为啥会出现这种情况.....

#20


springXML中 是不是配置了多例?改成单例试一下

#21


引用 20 楼 u011619071 的回复:
springXML中 是不是配置了多例?改成单例试一下


要不是单例,也不会报这种错了...

#22


既然使用了springMVC , 用ModelAndView 绑定传输即可
ModelAndView mv = new ModelAndView();
mv.addObject("roles", roles);
mv.setViewName("system/permission_manager");
return mv;

#23


你这样设置request变量的话,request变量就成为了实例变量,所有的请求都会共享这一个request变量了,如果把这个request变量设置为方法中的局部变量的话就不会有问题,我也觉得挺麻烦的,不知道有没有简单的办法。

#24


是不是你看的源码和你class不是对应的啊

#25


roles不能是整形

#1


关键不是每次执行这行代码都报错,我一直点页面,调用这个事件,有时候会报,有时候又不会报...

#2


通过观察class,貌似报错在这儿?

关于request.setAttribute设置值,报空指针的问题

继续执行就报错了

关于request.setAttribute设置值,报空指针的问题

不知道是不是这几行代码,感觉反编译出来,执行路径怪怪的.....

#3


看不出来,你的request 不应该是空啊。 

#4


引用 3 楼 rui888 的回复:
看不出来,你的request 不应该是空啊。 


就是很奇怪的情况啊,确实不为空,但是就是报空指针....而且是随机报...

#5


你的servlet配置有问题,那个严重警告,你解决了这个就ok了

#6


引用 5 楼 syjgreen07 的回复:
你的servlet配置有问题,那个严重警告,你解决了这个就ok了


这个是spring的controller,跟servlet没啥关系吧?

#7


其实我想看roles集合的生成代码

因为request为空可能性不大

#8


引用 7 楼 lingfengzx 的回复:
其实我想看roles集合的生成代码

因为request为空可能性不大


如下:
关于request.setAttribute设置值,报空指针的问题

#9


引用 7 楼 lingfengzx 的回复:
其实我想看roles集合的生成代码

因为request为空可能性不大


关于request.setAttribute设置值,报空指针的问题

#10


参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute

#11


你的MainController.java类的第152行代码是request.setAttribute("roles", roles);吗?

#12


引用 10 楼 stacksoverflow 的回复:
参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题

#13


引用 11 楼 kejianguang01 的回复:
你的MainController.java类的第152行代码是request.setAttribute("roles", roles);吗?


是的

#14


引用 12 楼 a2862433 的回复:
Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。

#15


引用 14 楼 stacksoverflow 的回复:
Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试

#16


引用 15 楼 a2862433 的回复:
Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。

#17


引用 16 楼 stacksoverflow 的回复:
Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况

#18


引用 17 楼 a2862433 的回复:
Quote: 引用 16 楼 stacksoverflow 的回复:

Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况


我也是现学现卖,貌似是Servlet在整个的Web生命周期中只有一个实例。
Struts据我了解的话是ActionServlet是一个实例,每一个Action是单独的一个实例,所以不存在线程不安全的问题。
能解决问题就好,我们还要多多学习,找出问题的根本。

#19


引用 18 楼 stacksoverflow 的回复:
Quote: 引用 17 楼 a2862433 的回复:

Quote: 引用 16 楼 stacksoverflow 的回复:

Quote: 引用 15 楼 a2862433 的回复:

Quote: 引用 14 楼 stacksoverflow 的回复:

Quote: 引用 12 楼 a2862433 的回复:

Quote: 引用 10 楼 stacksoverflow 的回复:

参考这篇文件,希望能解决你的问题。我看你的request也变了颜色,是不是自己定义了变量?
http://*.com/questions/13971099/nullpointerexception-when-setting-attribute


request 是在父类定义的
关于request.setAttribute设置值,报空指针的问题
子类去继承它
关于request.setAttribute设置值,报空指针的问题


你的问题和帖子的问题一样,不要自己定义request,直接用方法参数传过来的就OK了。



似乎是因为把request 设置成局部变量导致的,但是这样写就是嫌每个方法参数都要加request,和response,麻烦,
我先改改试试


恩,因为设置成class的变量的话 是线程不安全的,多个请求一起来的话,会造成某一个request为空。
放在方法里传来传去的话OK。
不要自己在外面定义变量。

能解决你的问题的话,帮我宣传宣传博客。


确实是这样,但是在Struts 中 一般从页面到后台都这样写 private Bean bean;通过setter赋值,那么在多个请求下,假设action为test方法如下:
public void test(){
xxxx;
xxxx;
beanService.save(bean);
}
那么这样的话,在第一个请求执行test第一句代码时,第二个请求过来,bean通过重新setter,那么按照那篇文章的逻辑,应该会存储两条相同的数据啊?但是却从没见过这种情况


我也是现学现卖,貌似是Servlet在整个的Web生命周期中只有一个实例。
Struts据我了解的话是ActionServlet是一个实例,每一个Action是单独的一个实例,所以不存在线程不安全的问题。
能解决问题就好,我们还要多多学习,找出问题的根本。


action和controller应该是一样的,都是spring管理的单例,里面的局部变量应该也是一样的才对,只是request存在销毁,二bean没有存在销毁,我还是没想通,为啥会出现这种情况.....

#20


springXML中 是不是配置了多例?改成单例试一下

#21


引用 20 楼 u011619071 的回复:
springXML中 是不是配置了多例?改成单例试一下


要不是单例,也不会报这种错了...

#22


既然使用了springMVC , 用ModelAndView 绑定传输即可
ModelAndView mv = new ModelAndView();
mv.addObject("roles", roles);
mv.setViewName("system/permission_manager");
return mv;

#23


你这样设置request变量的话,request变量就成为了实例变量,所有的请求都会共享这一个request变量了,如果把这个request变量设置为方法中的局部变量的话就不会有问题,我也觉得挺麻烦的,不知道有没有简单的办法。

#24


是不是你看的源码和你class不是对应的啊

#25


roles不能是整形