首先讲一个错误吧
严重: Servlet /mvcspring threw load() exception
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.springframework.web.servlet.DispatcherServlet.<clinit>(DispatcherServlet.java:206)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
。。。。。。。
这个错误其实很简单,就是因为缺少了commons-logging.jar这个包,把它加上就好了。
首先是要配置好web.xml,这一个的配置相信大家都很熟悉了。很多时候,我们做开发是要把配置文件单独的放在一个文件里面,这时我们就要在
<init-param>
<param-name>contextConfigLocation</param-name> <!-- 这个名字是固定的,不能改 -->
<param-value>classpath:spring-mvc.xml</param-value> <!-- 需要指定的Spring MVC的配置文件所在位置 -->
<!-- <param-value>的配置路径方法有两种,这里写的是其中一种。另一种的配置方法为
<param-value>/WEB-INF/classes/springconfig/spring-mvc.xml</param-value> 这里的springconfig是我创建的一个源文件夹,根本你的
SpringMVC的所在目录来写
-->
</init-param>
这里配置好我们的配置文件所在位置了。
在配置这个路径的时候有人也会出现一些问题,就是在<param-value>/WEB-INF/classes/springconfig/spring-mvc.xml</param-value>这里面的写了spring-mvc.xml这个文件,但是在本地磁盘打开却不能找到spring-mvc.xml,这是因为在创建文件夹的时候选错了,要选择source
folder才是可以的。下面看一下web.xml这个文件吧:
<?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"
version="2.5">
<!-- <display-name>zskframework</display-name> -->
<!-- SpringMVC的前端控制器 -->
<!-- 当DispatcherServlet载入后,它将从一个XML文件中载入Spring的应用上下文,该XML文件的名字取决于<servlet-name> -->
<!-- 这里DispatcherServlet将试图从一个叫做spring-mvc.xml的文件中载入应用上下文,其默认位于WEB-INF目录下 -->
<!-- 所以ContextLoaderListener参数值也可写成<param-value>classpath:applicationContext-*.xml</param-value> -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 -->
<!-- 如果没有指定,上下文载入器会在/WEB-INF/applicationContext.xml中找Spring配置文件 -->
<!-- 我们可以通过在Servlet上下文中设置contextConfigLocation参数,来为上下文载入器指定一个或多个Spring配置文件 -->
<!-- 注意:contextConfigLocation参数是一个用逗号分隔的路径列表,其路径是相对于Web系统的根路径的 -->
<!-- 指定SpringMVC的配置文件的所在的位置,如果不指定,系统会默认从WEB-INF的目录下寻找[servletname]-servlet.xml文件
(如本项目没有指定了Spring-mvc.xml文件 的话,系统会默认的从WEB-INF目录下寻找名为spring-servlet.xml的文件)为 默认的SpringMVC的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name> <!-- 这个名字是固定的,不能改 -->
<param-value>classpath:spring-mvc.xml</param-value> <!-- 需要指定的Spring MVC的配置文件所在位置 -->
<!-- <param-value>的配置路径方法有两种,这里写的是其中一种。另一种的配置方法为
<param-value>/WEB-INF/classes/springconfig/spring-mvc.xml</param-value> 这里的springconfig是我创建的一个源文件夹,根本你的
SpringMVC的所在目录来写
-->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.zsk</url-pattern> <!-- 配置过滤器,拦截以 .zsk 结尾的请求 -->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
配置好了web.xml之后 ,就要配置我们的springmvc.xml文件了。我这里只是一个简单的配置,所以还是直接上代码吧:<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 扫描整个项目中标注了@Controller的类 -->
<context:component-scan base-package="zskframework"/>
<context:annotation-config/>
<mvc:annotation-driven/>
<!-- jsp解析器 -->
<!-- 【配置视图解析器】 -->
<!-- InternalResourceViewResolver会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀 -->
<!-- 由于UserController返回的ModelAndView中的视图名是userlist,故该视图解析器将在/WEB-INF/jsp/userlist.jsp处查找视图 -->
<bean id="resolvers1" 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>
</beans>
两个重要的配置文件都已经配置好了,下面就要开始写我们的Controller类了,这个里面有些要注意的地方我都直接在代码上标注了:
package zskframework.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @author ZSK
* 如果标注了@RequestMapping("/controller")这个注解的话,在地址请求的时候就要写上
* 这个controller不然的话是会出错的因为匹配了这么样的一个路径就必须加上它路径才完整
*/
@Controller ///标注该类为一个Controller
@RequestMapping("/controller") /// 注解
public class TestController {
/**
* @return
*/
@RequestMapping("/hello.zsk")
public ModelAndView hello()
{
ModelAndView mv =new ModelAndView();
mv.addObject("message", "是我ZSK!哈哈哈~");
mv.setViewName("viewjsp/hello");
return mv;
}
}
然后运行就可以看到我们的项目跑起来了。
最后把所需的包跟整个项目的结构贴个图吧: