大佬帮忙看下这个问题

baidu_35654490 2017-11-08 12:10:10

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();


为什么这一行会报空指针呢,而且我在web.xml中已经配置了RequestContextListener监听器。该怎么解决呢。
...全文
479 16 点赞 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
baidu_35654490 2017-11-08
有空的帮忙看下啊
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
引用 13 楼 l359122505 的回复:
你这里连Request请求都没有,哪里来的Request
本来就是一个普通的工具类,所以才需要获取request,如果是在Controller就不需要这么麻烦了
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
问题解决了 因为我是在线程池里面跑的。。。肯定会有问题啊。。 而实际上,在web程序启动以后,Tomcat的路径就不会发生变化,因此,有几种办法: 1、加入你的这个异步任务/定时任务是由界面的操作发起的,那么在界面发起的时候,上面的代码是可以正常运行的(Controller中调用),此时可以将Tomcat的路径作为参数传递给这个任务,然后这个任务运行的时候,直接读取这个参数即可。 2、采用非Spring的方式,上面的代码猜测是通过webapp的根目录获取Tomcat的根目录吧,获取webapp的根目录可以使用如下的代码(webapp的根目录和Tomcat的目录的关系依赖于web程序的部署方式,使用webapps目录发布的才可以直接获取到):
3、如果获取的是Tomcat的目录的话,可以考虑使用System.getProperty("user.dir")来获取Tomcat安装目录下的bin目录的绝对路径。
引用 14 楼 ylz2007 的回复:
new Exception().printStackTrace(); 你是在逗我们玩么
这个方法只是查看堆栈信息,是报错之后才加上去的。
  • 打赏
  • 举报
回复
new Exception().printStackTrace(); 你是在逗我们玩么
  • 打赏
  • 举报
回复
你这里连Request请求都没有,哪里来的Request
  • 打赏
  • 举报
回复
兄弟,百度搜索一下Request,看看他的含义
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
引用 8 楼 cat_yan 的回复:
在网上找了个资料,你看看,希望能帮到你 http://blog.csdn.net/lexang1/article/details/52619215 https://www.cnblogs.com/softidea/p/6125087.html
虽然没有解决,还是十分感谢。
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
引用 7 楼 l359122505 的回复:
什么地方使用的,代码贴出来看看
发出来了,在下面,麻烦看下
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08

public class Path {
	
	public static String path_tomcat(){
		new Exception().printStackTrace();
		//return ServletActionContext.getServletContext().getRealPath("\\file\\userPhoto\\") + "\\";
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		System.out.println("servletContext:" + request.getServletContext());
		String str = request.getServletContext().getRealPath("");
		System.out.println("realpath:" + str);
		System.out.println(Config.separator + Config.projectName);
		str = str.substring(0,str.indexOf(Config.separator + Config.projectName));
		return str;
	}

	public static void main(String[] args) {
		String str = "D:\\apache-tomcat-7.0.59\\webapps\\manage";
		str = str.substring(0,str.indexOf("\\manage"));
		System.out.println(str);	
	}
}


  • 打赏
  • 举报
回复
cat_yan 2017-11-08
在网上找了个资料,你看看,希望能帮到你 http://blog.csdn.net/lexang1/article/details/52619215 https://www.cnblogs.com/softidea/p/6125087.html
  • 打赏
  • 举报
回复
什么地方使用的,代码贴出来看看
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
引用 4 楼 cat_yan 的回复:
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 注意:如果直接使用这个工具类,则会抛出一个空指针异常。原因是需要先在web.xml配置RequestContextListener监听器: <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> 原理 RequestContextListener实现了 ServletRequestListener ,在其覆盖的requestInitialized(ServletRequestEvent requestEvent)方法中,将request最终设置到了RequestContextHolder中.
你说的监听器我已经加上了,还是会报空指针
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
就是加了监听器还会报空指针的
  • 打赏
  • 举报
回复
cat_yan 2017-11-08
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 注意:如果直接使用这个工具类,则会抛出一个空指针异常。原因是需要先在web.xml配置RequestContextListener监听器: <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> 原理 RequestContextListener实现了 ServletRequestListener ,在其覆盖的requestInitialized(ServletRequestEvent requestEvent)方法中,将request最终设置到了RequestContextHolder中.
  • 打赏
  • 举报
回复
baidu_35654490 2017-11-08
有空的帮忙看下啊
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2017-11-08 12:10
社区公告
暂无公告