最近公司使用spring mvc 来代替struts2.x。这两天花了点时间来自己搭建了一下简单的spring mvc 应用,
在此记录下搭建的过程,本文只涉及到 Controller 的访问,关于Interceptor, manager, dao 后续会加上,
具体的如何在eclipse中使用maven来构建项目就不介绍了,不是本文的重点。
第一:需要的jar:(pom.xml)
<!-- 统一管理 jar 包版本 --> <properties> <version.junit>3.8.1</version.junit> <version.spring>3.0.6.RELEASE</version.spring> <version.slf4j>1.6.4</version.slf4j> <version.jstl>1.2</version.jstl> </properties>
<dependencies> <!--junit 单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${version.junit}</version> <scope>test</scope> </dependency> <!-- org.slf4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${version.slf4j}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${version.jstl}</version> </dependency> <!-- **************************** spring *************************************** --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${version.spring}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${version.spring}</version> </dependency> </dependencies>第二:编写 web.xml (个人认为这是最开始做的)
<!-- 配置文件读取 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 字符集过滤 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--DispatcherServlet 是Spring MVC 的入口 : 注册 dispatcherServlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
关于 dispatcherServlet 的配置:
1)spring-servlet.xml文件的位置
个人习惯将所有的配置放在resource 里面(或者一个其他的文件夹里面),而不是直接将 spring-servlet.xml 文件直接放在 WEB-INF 下面。所以要配置<init-param>配置文件路径。(如果将 spring-servlet 直接放在WEB-INF 下面,spring在加载的时候就会自动去 WEB-INF 下面去寻找)
2)spring-servlet.xml文件的命名:
如果你不喜欢使用spring给你定死的名称(spring-servlet.xml);你希望命名为:springmvc-servlet.xml 这样更易懂的,那么你只要修改 <init-param>文件中的名称就可以了
第三:编写spring-servlet.xml 文件:
<!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> <context:component-scan base-package="com.longxia.**.controller" /> <!-- 激活@Controller模式 --> <mvc:annotation-driven /> <!-- 处理静态资源 --> <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/img/**" location="/img/" /> <mvc:default-servlet-handler /> <!-- 视图解析器 当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/page/目录下,查找XXX.jsp文件--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp" /> </bean>
LoginController.java:
package com.longxia.springmvc.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author xialong <[email protected]> * */ @Controller public class LoginController { private static final Logger logger = LoggerFactory.getLogger(LoginController.class); @RequestMapping(value="/loginPage.htm") public String login(){ logger.info("----------- login.htm----------"); return "login_page"; } }
http://lcoalhost/springmvc/loginPage.htm; 这样就可以返回的login_page.jsp页面;
如果想要直接输入:http://localhost/springmvc 在不配置 welcome-file-list 的情况下,同时webapp下面也没有index文件的时候,那么我们怎么做呢?
@RequestMapping(value={"index.htm","/"}) public String index(){ return "login_page"; }
@RequestMapping(value={"index.htm","/"});
这样就可以访问 http://localhost/springmvc 这样就可以返回的login_page页面,一般我们都用作首页的请求;
welcome-file-list 同样可以有首页的效果,这里只是说一下可以这样也可以实现
目录结构: