最近在学习SpringMVC的相关内容,所以记录自己的学习过程,一切从简,先从helloworld做起
开发环境
- 系统:window7
- eclipse: Mars.2 Release (4.5.2)
- Tocat7.0
- jdk1.8
- Spring4.3.4
- SpringMVC4.3.4(注意:Spring3运行会出错,原因:jdk版本问题,可以改用jdk1.7)
- 项目最终结构图:
创建项目,添加jar包
- 创建dynamic web project
- 添加spring所需jar包
日志:commons-logging-1.1.3.jar;
JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;
spring-framework-4.3.4.RELEASE/libs中的jar包(我加了全部);
将jar全部添加到WebContent/WEB-INF/lib
目录下
添加配置文件
- 在
/WEB-INF
下添加web.xml
(我这里是3.0版本),内容如下:
<?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_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>SpringMVC</display-name>
<!-- 防止中文参数乱码 放在前面 -->
<filter>
<filter-name>SetCharacterEncoding</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
<!-- 强制进行转码 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<!-- 入口是前端控制器 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/resources/springservlet-config.xml</param-value>
<!-- 这里可以根据自己配置文件的位置修改 -->
</init-param>
<load-on-startup>1</load-on-startup><!-- load-on-startup必须放在最后,启动顺序,让这个Servlet随Servletp容器一起启动 -->
</servlet>
<!-- Spring MVC配置文件结束 -->
<servlet-mapping>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- 配置文件解释
- 先是配置放置乱码的过滤器
- 再配置DispatcherServlet,DispatcherServlet主要就是拦截请求,然后调用对应的Controller和Action,解析和渲染指定的视图并返回响应
- classpath:springservlet-config.xml 指定具体的配置文件为springservlet-config.xml。
- src目录下新建resources包,用于存放配置文件,添加springservlet-config.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven/>
<!-- 如果当前请求为“/”时,则转发到“/helloworld/index" -->
<mvc:view-controller path="/" view-name="forward:/helloworld/index"/>
<!-- 静态资源映射 -->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
<mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
<mvc:resources mapping="images/**" location="/WEB-INF/images/" />
<!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
<mvc:default-servlet-handler/>
<!-- 开启controller注解支持 -->
<!-- use-default-filters="false" 只扫描指定的注解 -->
<context:component-scan base-package="com.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<!-- <context:exclude-filter 表示不扫描的注解 -->
</context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="contentType" value="text/html"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
如果想知道xmlns、xsi这些的作用,这里有
我们在web.xml文件里面配置的是拦截所有的请求到该servlet,所以我们在这里要对静态资源文件映射作一下配置,否则请求这些资源文件会返回404
创建helloworld的Controller
- 在src下创建com.controller包,再新建HelloWorldController类,如下:
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = "/hello")
public class HelloWorldController {
@RequestMapping(value="/index", method = {RequestMethod.GET})
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("hello", "Hello World!");
modelAndView.setViewName("index");
return modelAndView;
}
}
- 相应注解解释
- @Controller指把当前class指定为controller
- controller 上的@RequestMapping(value = “/hello”) 注解的 value值指定该controller所映射的请求
- 方法上的@RequestMapping 注解指定该方法为一个action,value 值指定该action所映射的请求,method 中的RequestMethod.GET指定该action接受的是get请求。
- modelAndView指定视图的名称,解析视图时会在springservlet-config.xml文件指定的视图文件夹中寻找对应的视图。
添加视图,即jsp文件,在WEN_INF下新建/views包,在views下新建index.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>
${hello}
</body>
</html>
运行项目,由于配置了
<!-- 如果当前请求为“/”时,则转发到“/helloworld/index" -->
<mvc:view-controller path="/" view-name="forward:/helloworld/index"/>
所以,可以访问了
到此,经典helloworld成功实现。项目下载https://github.com/kkxiaojun/SSH