关于struts2 request报空指针问题

练习项目中  request.setAttribute("maxpage", maxpage);   request.setAttribute("page", pageNo);   报struts2空指针异常,request取值为空。添加 this.request = ServletActionContext.getRequest();后项目正常运行。

总结:request是发送请求之后获取的对象,需要在方法中通过ServletActioncontext来获取该对象。

拓展:转自 http://blog.sina.com.cn/s/blog_5f9beca40101dgau.html

Struts 2的Action抛弃了request、response等Servlet API,使业务层更加独立。但是有时候需要使用request、response,例如从request中获取Session、往response里面写Cookie等。从Struts 2中获取request、response有两种途径。

 利用ServletActionContext的静态方法

Struts 2利用ServletActionContext类用来维护Servlet对象,把Servlet对象放到了ServletActionContext中,例如request、response、application、Session等。ServletActionContext利用ThreadLocal来维护不同线程的Servlet对象,因此可以使用ServletActionContext类获取到。这种方式也可以叫做非注射方式(非IoC方式),例如:

LoginAction.java

  1. package com.helloweenvsfei.struts2.action;
  2. import java.io.File;
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import javax.servlet.http.HttpSession;
  7. import org.apache.struts2.ServletActionContext;
  8. public class LoginAction extends ActionSupport {
  9. private String account; // 账号
  10. private String password; // 密码
  11. public String login() { // 登录方法
  12. HttpServletRequest request = ServletActionContext.getRequest();
    // 获取request
  13. HttpServletResponse response =
    ServletActionContext.getRe
  14. sponse(); //
    获取response
  15. HttpSession session =
    request.getSession(true); //
    获取Session
  16. session.setAttribute("account", account); // 放到 Session 中
  17. ServletContext context =
    ServletActionContext.getServletContext();
    // 获取上下文
  18. File uploadFile = new
    File(context.getRealPath("upload"));

    //

    获取upload文件夹

  19. return
    execute();
  20. }
  21. }

提示:虽然是使用静态方法获取的request、response,仍然能保证获取的当前用户、当前线程的request、response,不会发生混淆。因为Struts
2利用ThreadLoca来维护当前线程的request、response等数据。

时间: 2024-08-16 16:05:51

关于struts2 request报空指针问题的相关文章

SpringJUnit4测试--测试无反应/控制台报空指针的解决---junit的jar冲突!

前言: 前些日子碰到一个诡异的问题--用springJUnit进行测试,运行方法什么反应也没有,控制台 也没有输出,百度也没有答案--只好暂时作罢.今天我只好用上了排除法,建个测试小项目,将只要能测试的几个Spring相关jar拷进去,测试正常,然后开始与原项目进行对比排除jar,看看到底是哪个/哪些jar惹的祸导致jar冲突,结果真是出乎我的意料--竟然是自家兄弟!原来这个项目中也有个junit-4.4的jar,把它删掉就好了.(项目build path添加junt4依赖时会导入相应jar,与

getActionBar().setDisplayHomeAsUpEnabled(true)报空指针(已解决)

今天捣鼓了一下午.getActionBar().setDisplayHomeAsUpEnabled(true)总是报空指针.在我的还有一个Android4.4.2的项目中就没有一点问题.我还以为是我自己定义视图的问题.找了一下午.百度也未果. 原因: getActionBar()得到的是null,所以对actionbar设置不论什么操作都肯定会报空指针. 这个是由于我使用了Android6.0 解决方式: 在这就应该用getSupportActionBar().setDisPlayHomeAsU

终极解决方案 at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 报空指针

今天使用maven建立webapp.发布后所有的jsp页面都会 at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 报空指针 错误. 百度到引起他的原因是项目中对于servlet-api和jsp-api的引用和Tomcat的包冲突了. 所以,解决方式为:将项目中对于servlet-api和jsp-api的依赖包引用都标以<scope>provided</scope> 这两个依赖包不应该随项目进行打包只在compile和te

android 控件透明度设置时setAplha()报空指针的问题

必须在android控件里设置android:background=“”属性否则报空指针 xml代码 <TextView android:id="@+id/dialog_back" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" /> java代码 textBa

遇到的Fragment中使用setAdapter()设置ListView报空指针解决方案

场景是这样,底部4个tab导航栏.用的fragment. 但其中一个fragmentActivity1中使用ListVIew的setAdapter()方法时,总是报NullPointerException错误. 一整天都没有解决,晚上看国外的论坛上,看到对于ListView的深入讲解,才忽然理解了问题所在. 对于ListView,刚开始写应用的时候都是拿来就用,没有深入了解过它的本质.从博友上摘下来一段话: 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击

Android中res中的Layout布局文件报空指针问题layout_galazuser_center.xml: java.lang.NullPointerException

错误信息:只截取了一部分java.lang.NullPointerException at android.graphics.Canvas_Delegate.restoreTo(Canvas_Delegate.java:1175) at android.graphics.Canvas_Delegate.restoreToCount(Canvas_Delegate.java:268) at android.graphics.Canvas.restoreToCount(Canvas.java) at

Struts2版本更新报错:&gt;&gt;&gt; ActionContextCleanUp &lt;&lt;&lt; is deprecated! Please use the new filters!

因低版本Struts2存在漏洞,更新为较新的版本.启动时,报如下警告信息: *************************************************************************** * WARNING!!! * * * * >>> ActionContextCleanUp <<< is deprecated! Please use the new filters! * * * * This can be a source o

struts2 文件下载 报错

程序错误: 学习struts框架时,关于文件下载部分,利用struts中的stream结果类型来实现,配置完成之后,运行程序,报错如下: HTTP Status 500 - Can not find a java.io.InputStream with the name [downFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 错

Tomcat8.5配置https启动报空指针错误

tomcat8.5版本和tomcat8.0有了很大的区别,默认的server.xml中https的配置方式也有了变化: <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" secure="true" URIEncoding="UTF-8" useBodyEncodi