SpringMVC初级配置
DispatcherServlet
DispatcherServlet
可以说是SpringMVC最终的一个,一切从它这里开始,因为,所有请求都要通过它来分发.
因为使用Maven构建项目,所以先编辑一下pom.xml
,添加依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chain</groupId>
<artifactId>HelloSpring</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>HelloSpring Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<finalName>HelloSpring</finalName>
</build>
</project>
按照惯例,既然是个 Servlet
,那就应该在web.xml
中配置一下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
这个,servlet
的配置是日常工作了,就不多说.
其中<load-on-startup>1</load-on-startup>
是为了在容器启动时就加载DispatcherServlet
.
Controller
使用Spring MVC的话,一般不用自己再写 servlet.
MVC,顾名思义:
- Model
- View
- Controller
这里servlet不用自己写,那Controller总该自己写了吧 .
talk is cheap,show me the code.
先上个代码:
package com.chain.hello;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello/{name}")
public String hello(@PathVariable(name = "name") String name, Model model){
model.addAttribute("name",name);
return "hello";
}
}
@Controller
注解 : 在浏览器发来请求的时候,DispatcherServlet分发请求的对象,也就是 Controller 对象,而这个Controller对象就是用@Controller
标记的类.@RequestMapping
注解 : 翻译过来就是请求映射,可以理解成把标记的方法或者类绑定到一个地址,就比如上面这个就是将hello
这个方法和/hello
这个地址绑定在一起.@PathVariable
: 这个是获取Restful
,像上面的程序里面,@RequestMapping("/hello/{name}")
就能映射/hello/chain
这样的地址,/{name}
,提供了一个可变参数name
.Model
: 这个就是MVC里面的M
,在 SpringMVC 里面,M
可以是Model
或者ModelAndView
或者Map
对象 .
视图选择器
接下来就配置一下视图选择器,也就是每一个请求应该返回哪个页面,因为全局我们只配置过DispacherServlet
这一个servlet
,所以就只需要配置一个视图选择器,一般视图选择器的配置文件命名都是相应的的servlet-name
加上servlet.xml
,就像接下来要要配置的试图选择器,因为相应的servlet
名字是Hello
(参见<servlet-name>Hello</servlet-name>
),所以配置文件名字应该是Hello-servlet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="/hello/" class="com.chain.hello.HelloController"/>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
都很好理解,这样配置之后,需要在WEB-INF
下创建一个pages
文件夹,这样的话,要请求的视图(jsp文件)都应该放在pages
文件夹里面.
在上面Controller
部分的代码请求了 hello
这个视图,视图选择器就会去查询一个叫hello.jsp
的文件(在pages文件夹下查询),这里创建一个看看效果(hello.jsp
):
<%--
Created by IntelliJ IDEA.
User: chain
Date: 2018/3/28
Time: 18:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello,${name}</title>
</head>
<body>
<h1>Hello,${name}!!!</h1>
</body>
</html>
按照惯例配置好tomcat服务器之后,访问一下http://127.0.0.1:8080/hello/killer
:
Game Over!!!