刚入门springMvc,工作中有使用,但由于感触不深理解起来也困难,所以也算是找个机会学习并把所遇到的问题,记录便于查看。
有个问题已一直困扰两天,就是搭建好springMvc环境后也就是Holle word入门时,环境一直报错。
目前现状:
- jar文件已导入
- spring框架支持包(spring-framework-3.1.1.RELEASE-with-docs.zip) 注:解压后,将dist下的jar全部引用。
- spring框架所依赖的jar包(log4j包commons.logging-1.1.1.jar,jstl标签库依赖包jstl-1.1.2.jar和standard-1.1.2.jar)
- 附上下载地址
- 注:以上jar包,可根据实际情况提升包的版本。
- web.xml文件的配置
</pre><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>lishehespringMVC</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>chapter2</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--启动顺序,表示一开始直接启动 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>chapter2</servlet-name> <!-- 拦截,表示哪些请求让sprin --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
- servletxx-servlet.xml(SpringMVC配置文件)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- HandlerMapping --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 用于支持Servlet、JSP视图解析; --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <!-- bean,可以简单地将它理解为一个请求入口(输入/hello->跳到你给我对应的class上) --> <bean name="/hello" class="com.wulit.ripple.controller.HelloWorldController"/> </beans>
- xxxxController(控制器,主要用于前台跟后台之间的交互)
package com.wulit.ripple.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloWorldController implements Controller { public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception { //1、收集参数、验证参数 //2、绑定参数到命令对象 //3、将命令对象传入业务对象进行业务处理 //4、选择下一个页面 ModelAndView mv = new ModelAndView(); //添加模型数据 可以是任意的POJO对象 mv.addObject("message", "Hello World!"); //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面, //例如:返回hello,再加上chapter2-servlet.xml配置的自动加上.jsp后缀 那就变成了返回hello.jsp mv.setViewName("hello"); return mv; } }
- jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 欢迎进入第一次的我。 <br/> 出现:${message} </body> </html>
这里基本就算是springMVC这个框架的最基础最简单的配置了,其实也就这点点代码而已,我特么还出现了错误,并且困扰了一天多(由于刚接触),后来终于在网友的帮助下,解决了这个问题。。。。
报错如下:
当看到这个问题后,立马想到request的支持jar文件包未导入,好吧,那我立马按照之前的习惯,将servlet-api.jar,jsp-servlet-api导入到项目中,当然结果没让人失望,包未引入问题解决。终于可以高高兴兴的运行了~~
但真正问题才刚刚开始,怎么运行不了呢? null指针? 500内部错误?... 感觉不科学呀,截图:
ok,你既然出现问题,那我就继续百度呗,找找原因在哪先。。。当然有人遇到过这种情况,说是servlet-api.jar与jsp-api.jar与tomcat中的jar文件冲突了,只要将项目中的去掉就好。 但是照做后,问题依然存在,那就是,本身项目lib下的servlet-api.jar与jsp-api.jar是因为request未引入报错,而现在又说是引起了冲突,突然我是一下子被这个搞蒙了。 不导入jar时tocmat至少还能正常运行(虽然报错未引入,但jsp还是可以跑起来的撒),一旦引入还直接整的整个项目报500....
而后经过了许久的煎熬,终于弄清楚事情真相所在
将原本导入到项目lib下的两个包,删除一个只留下servlet-api.jar,好了圆满完成。
原来,我们使用tomcat作为启动器的时候,项目会自动的去引用tomcat安装目录下的lib文件中的jar包,而如果我们再去自己引用一遍的话,那肯定就产生了冲突。而我们只需要导入servlet-api.jar包解决Controller包未引入的报错问题就可以了。
通过一位大神级别的博客而进行的学习,所以很多东西都基本是抄来的,哈哈! 地址:点击打开链接
然后,虽然感觉做了一些无谓的事情,但是还是有所收获的。