SpringMVC之第一个实战

第一个SpringMVC项目

通过Spring的学习,我们都知道可以通过xml或者注解的方法进行配置,SpringMVC也可以通过这两种方式进行配置。一般使用注解版本,更加简洁方便,便于维护。

配置版

  1. 新建一个Module 我们命名为spring-02-hello 并且添加web4.0的支持。

image.png

image.png

image.png

  1. 导入SpringMVC的依赖
  2. 配置web.xml 主要是配置DispatcherServlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
xml复制代码<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
version="4.0">

<!-- 注册DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 加载springmvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>


<!-- 配置启动级别 1为最高级别 -->
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

  1. 编写SpringMVC的配置文件,名称最好取名为springmvc-servlet.xml

这里的名称其实任意 最好按照官方的要求来写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>

</beans>

这里包含了SpringMVC的三大件,后续在注解版中不需要配置,但是需要清楚原理;

对应上一章节的图片来看,HandlerMapping就是处理映射器,用来将请求映射为HandlerExecution类型的对象;HandlerExecution就是映射后的对象;HandlerAdapter就是处理器适配器,用于处理映射过来的数据。

  1. 编写一个Controller类,需要返回一个ModelAndView,封装数据和视图;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
java复制代码package com.my.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {

@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
// /WEB-INF/jsp/hello.jsp
modelAndView.setViewName("hello");
modelAndView.addObject("msg","使用配置版本的SpringMVC");
return modelAndView;
}
}
  1. 这时候需要在springmvc-servlet.xml中进行注册bean
1
bash复制代码<bean id="/hello" class="com.my.controller.HelloController"></bean>
  1. 最后创建一个hello.jsp页面,用于接收封装的数据
1
2
3
4
5
6
7
8
9
10
11
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>

${msg}

</body>
</html>

  1. 项目结构:

image.png

  1. 配置tomcat进行测试
    image.png

image.png


注意点

  • 有时候会出现404,优先考虑jar包的依赖是否导入

image.png

  • 没有导入可以进行相应设置:
  1. 打开Project Structure - Artifacts
  2. 选择当前的Artifacts 在WEB-INF下新建lib目录
    image.png
  3. 将所有的jar包添加到lib中

image.png
4. 全选OK

image.png

  • 对于配置版的看法:
  1. 实际开发中,主要是注解版投入生产,在这里主要是让大家理解SpringMVC执行原理
  2. 对于映射器等几个名称不需要记住,知道即可以。

注解版

  1. 注解版比配置版更加简单,首先仍然是创建modules,这次命名为spring-03-hello-anno,并且添加web4.0依赖
  2. 由于maven的资源过滤问题,建议在pom.xml添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
xml复制代码<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
  1. 和配置版一样在web.xml中进行固定的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
xml复制代码<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

/ 和 /* 的区别:

  • < url-pattern > / </ url-pattern >
  • 只匹配所有的请求 不匹配.jsp等
  • < url-pattern > /* </ url-pattern >
  • 如果设置成这样,那么xx.jsp会再次进入DispatcherServlet进行匹配然后就变成了xx.jsp.jsp形成死循环

  1. 和配置版一样配置springmvc-servlet.xml
  • 这里和配置版有区别
  • context:component-scan : 自动扫描的包,指定包下的注解生效,由IOC容器统一管理。这里熟悉Spring的应该都了解
  • mvc:default-servlet-handler :让Spring MVC不处理静态资源
  • mvc:annotation-driven : 支持mvc注解驱动,自动帮我们注入了处理映射器和处理适配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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:context="http://www.springframework.org/schema/context"
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/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:component-scan base-package="com.my.controller"></context:component-scan>


<mvc:annotation-driven></mvc:annotation-driven>
<mvc:default-servlet-handler></mvc:default-servlet-handler>


<bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
  1. 创建Controller : com/my/controller/SpringAnnoController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
kotlin复制代码package com.my.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SpringAnnoController {

@RequestMapping("/hello")
public String sayHello(Model model){
model.addAttribute("msg","使用注解配置SpringMVC");
return "hello";
}
}
  • 这里我们无需再实现Controller接口,直接通过Controller注解完成。
  • @RequestMapping代表着映射路径,这里的路径就是 xxx/项目名/hello 无需再设置视图。
  • 方法中声明的model是为了把数据带到视图中去。
  • 这个sayHello方法的返回值适配上web.xml中的前缀后缀最后的跳转到 /WEB-INF/jsp/hello.jsp
  1. 最后在/WEB-INF/jsp/创建视图层hello.jsp
1
2
3
4
5
6
7
8
9
10
11
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>

${msg}

</body>
</html>
  1. 最后配置tomcat启动项目即可

image.png

  1. 项目结构

image.png


小结

实战结合上一章的内容,我们可以很明确的了解SpringMVC基于三大件:处理映射器、处理适配器以及视图解析器。 在注解版中我们已经看不到处理映射器和适配器了,但是我们需要了解SpringMVC的执行原理,以便于更好地学习。在实际开发中,通常我们只需要手动配置视图解析器即可。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%