• HttpServletRequest.getServletContext()一直提示找不到,而引出的问题


    开发j2ee项目的时候,需要用到servlet-api,如果使用了maven,web项目可以在pom.xml中手动加入所需jar包,达到与依赖j2ee libarary同样的功能。可问题来了:

    1. 问题描述

    最近使用myeclipse10.7用maven开发一个web项目,就遇到了这样一个问题:

    由于项目的servlet类中使用了servlet-api-3.0相应的方法,即HttpServletRequest类的一个getServletContext()方法,

    为了使编译通过,可在build path中添加j2ee6 libarary,或者pom.xml中引入servlet-api-3.0.jar,但虽然通过这2种方法引入使编译成功后,

    运行时,servlet中仍然报找不到getServletContext()方法的错误。

    2. 分析结果

    追查问题后,分析可能的原因是,如果使用的是tomcat6服务器,由于tomcat6安装目录下自带的是servlet-api-2.5.jar,不支持servlet-3.0,

    由此进行猜测,web应用在tomcat中运行时,运行时与编译时是不一样的。

    编译使用的项目build path引入的jar包进行编译,编译完成后,运行时,tomcat应该是使用了其自带的j2ee jar包来运行web应用的,我们项目build path中引入的j2ee 相关jar包,在tomcat容器运行web项目时,已经不起作用了!

    3. 待解决的问题

    问题来了,有没有一种方法,使得web项目在tomcat容器中运行时,能够优先使用我们指定的jar包呢?正在百度当中。

    4. 分析结果纠正

    即使把servlet-api-3.0jar包替换掉tomcat6的lib目录下的servlet-api.jar包,也并不能解决问题,说明了并不是web项目运行时优先加载tomcat自带jar这种原因,而是tomcat6不支持servlet-api-3.0,使用tomcat7后,问题解决了,也说明了这个问题。

    注意,如果反过来把servlet-api-2.5替换掉tomcat7目录下的servlet-api包,则容器直接无法成功启动了。

  • 相关阅读:
    block和delegate的区别
    iOS真机测试友盟碰到错误linker command failed with exit code 1 (use -v to see invocation) 百度地图的检索失败 sqlite 错误码
    iOS国际化多语言设置
    获取本机ip地址
    iOS-Senior19-FMDB第三方应用
    iOS-Senior17-CoreAnimation动画
    iOS-Senior18-CocoPods的安装步骤
    iOS-Senior17-UIView动画
    iOS-Senior17-菊花风火轮(代码)
    iOS-Senior17-Gif动画图片(代码)
  • 原文地址:https://www.cnblogs.com/jianglong-liang/p/4618948.html
Copyright © 2020-2023  润新知