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!!!

posted @ 2018-03-31 19:44  假隐士  阅读(97)  评论(0编辑  收藏  举报