最近公司使用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>
第四:编写Controller:
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 <longxia1987@hotmail.com>
*
*/
@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 同样可以有首页的效果,这里只是说一下可以这样也可以实现
目录结构: