SpringMVC 填坑记录

记录菜鸟的我,在使用springMVC开发过程中所遇到的问题。


【1 ModelAndView对象setViewName()无法得到渲染页面】
描述:代码执能够执行,而且也不报错,但是访问就是渲染不出来setViewName()所指定的jsp页面。页面报HTTP Status 404 - 错误。

@RequestMapping(value="/index.jsp")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        System.out.println("handlerequest 被调用");    
        ModelAndView mv=new ModelAndView();
        mv.addObject("message", "hello world!");
        mv.setViewName("/WEB-INF/pages/index.jsp");
        return mv;
    }

原因:使用日志记录log4j,将运行状态从控制台输出(做开发,日志输出是一件利器,让程序运行过程变得“可见”)。可以看到如下信息

17:34:40,786  WARN PageNotFound:1172
 - No mapping found for HTTP request with URI [/Suhe/WEB-INF/pages/index.jsp] 
 - in DispatcherServlet with name 'springmvc'

大体意思是/Suhe/WEB-INF/pages/index.jsp这个url请求,DispatcherServlet(前端请求控制分发器)找不到相应的mapping,其实就是说,服务器将这个mv.setViewName("/WEB-INF/pages/index.jsp")操作当成了成为了一个http请求,给了DispatcherServlet进行处理。而web.xml中对servlet-mapping进行了匹配规则的设置,如下,对.jsp结尾了HTTP请求会匹配成功,进行拦截后交给DispatcherServlet分发处理。

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

解决办法:更改url-pattern匹配拦截设置为其他形式,如*.do或则.html 等等,对应的@RequestMapping()也做相应修改即可


【2 解决eclipse中自动生成参数为arg0,arg1问题 】
解决eclipse自动生成参数为arg0,arg1

【3 Eclipse for javaee中开发web项目,jar包必须放到/WEB-INF/lib文件夹下】

  1. tomcat应用服务器,它有其自己的类加载器,根据J2EE的规范去%web-project%/WEB-INF/lib的路径去找相应的lib下的jar文件
  2. 使用eclipse javaee IDE时,会将WEB-INF/lib中所有的lib自动加入到library中
  3. eclipse工程下的library是用来编译里面的src中java文件的,实际发布到tomcat时,仅仅只复制了WEB-INF/lib里面的jar包,所以出现eclipse可以正常编译但tomcat运行是找不到类
  4. 你现在用TOMCAT做服务器,那么需要依赖的JAR包就应该考到WEB-INF/lib中,TOMCAT会自动把它编译然后放入WEB-INF/classes目录(当然你src的代码编译以后也会放到这里),就应该这么做,这是规定。

当然, 在Eclipse下,把jar包部署到其他文件夹,而不是放在WEB-INF/lib的文件夹下,这样,部署到服务器上,可以把这些包关联上传到服务器上,具体要配置项目下的.classpath,在这个文件下加上需要关联的jar的路径就好了
如(我把jar放在根目录下的lib文件下,注意,不是WEB-INF/lib的文件夹):

<classpathentry kind="lib" path="lib/acegi-security-1.0.6.jar"/>
<classpathentry kind="lib" path="lib/activation-1.1.jar"/>
<classpathentry kind="lib" path="lib/antlr-2.7.6.jar"/>
<classpathentry kind="lib" path="lib/aopalliance-1.0.jar"/>
<classpathentry kind="lib" path="lib/asm-1.5.3.jar"/>

猜你喜欢

转载自blog.csdn.net/summerxiachen/article/details/79572658