SpringMVC 环境搭建

╰半橙微兮° 2022-05-20 05:17 349阅读 0赞

0x00:示例项目

以一个项目示例总结下 SpringMVC 环境的搭建基本流程,项目结构如下图:

请输入图片描述

0x01:导入 jar 包

SpringMVC 主要 jar 包如下图,需导入到 WEB-INF 下的 lib 目录。

请输入图片描述

0x02:配置前端控制器

传统的 servlet 开发中,请求都在 web.xml 中配置,然后配置到对应的 servlet 中。同样,在 SpringMVC 中,请求也需要配置到对应的 servlet 上,而做配置的就是前端控制器,用于拦截符合配置的 url 请求。在 SpringMVC 中,正是通过前端控制器 DispatcherServlet 来对请求进行拦截并处理的。配置 web.xml,示例代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  3. <!-- SpringMVC前端控制器 -->
  4. <servlet>
  5. <servlet-name>springmvc</servlet-name>
  6. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  7. <init-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>classpath:springmvc.xml</param-value>
  10. </init-param>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>springmvc</servlet-name>
  14. <url-pattern>*.action</url-pattern>
  15. </servlet-mapping>
  16. <welcome-file-list>
  17. <welcome-file>index.jsp</welcome-file>
  18. </welcome-file-list>
  19. </web-app>

配置和 servlet 类似,以上配置会拦截所有以 action 为后缀的请求,交给前端控制器 DispatcherServlet 去处理,定义了 SpringMVC 的核心配置文件为 springmvc.xml。

0x03:配置处理器映射器

在 springmvc.xml 配置文件中添加处理器映射器,示例代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
  3. <!-- 处理器映射器 -->
  4. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  5. </beans>

处理器映射器有多种,它们都实现了 HandlerMapping 接口,示例代码中用的是 BeanNameUrlHandlerMapping 类,映射规则是把 bean 的 name 作为 url 进行查找。

0x04:配置处理器适配器

由之前的 SpringMVC 工作流程可知,当处理器映射器 HandlerMapping 为前端控制器 DispatcherServlet 返回控制器 Handler 后,前端控制器就会给处理器适配器 HandlerAdapter 去执行相关的 Handler 控制器也就是 Controller。

处理器适配器也有多种,它们都实现了 HandlerAdapter 接口,这里使用 SimplerControllerHandlerAdapter 适配器,在 springmvc.xml 中添加以下代码:

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

0x05:配置视图解析器

当处理器适配器处理了相关的具体方法后,就会返回一个 ModelAndView 对象,这个对象包含了要跳转的视图信息 view 和视图上需要显示的数据 model,此时前端控制器会请求视图解析器 ViewResolver 来解析 ModelAndView 对象。

视图解析器也有很多种,这里使用默认的 InternalResourceViewResolver,在 springmvc.xml 中添加以下代码:

  1. <!-- 视图解析器 -->
  2. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

基本配置完成后,既需要配置处理器 Handler 了。

0x06:配置 Handler 处理器

因为上文处理器适配器使用的是 SimpleControllerHandlerAdapter,所以这里的 Handler 需要实现 Controller 接口。编写一个加载水果列表信息的功能,名为 FruitsControllerTest,示例代码如下:

  1. package com.fageweiketang.controller;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.Controller;
  8. import com.fageweiketang.model.Fruits;
  9. public class FruitsControllerTest implements Controller {
  10. private FruitsService fruitsService = new FruitsService();
  11. public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
  12. //模拟Service获取水果商品列表
  13. List<Fruits> fruitsList = fruitsService.queryFruitsList();
  14. //返回ModelAndView
  15. ModelAndView modelAndView = new ModelAndView();
  16. //相当于request的setAttribut,在jsp页面通过fruitsList获取数据
  17. modelAndView.addObject("fruitsList", fruitsList);
  18. //指定视图
  19. modelAndView.setViewName("/WEB-INF/jsp/fruits/fruitsList.jsp");
  20. return modelAndView;
  21. }
  22. //模拟Service的内部类
  23. class FruitsService{
  24. public List<Fruits> queryFruitsList(){
  25. List<Fruits> fruitsList = new ArrayList<Fruits>();
  26. Fruits apple = new Fruits();
  27. apple.setName("苹果");
  28. Fruits banana = new Fruits();
  29. apple.setName("香蕉");
  30. Fruits pear = new Fruits();
  31. apple.setName("梨");
  32. fruitsList.add(apple);
  33. fruitsList.add(banana);
  34. fruitsList.add(pear);
  35. return fruitsList;
  36. }
  37. }
  38. }

示例中查询到列表信息后创建了一个 ModelAndView,将需要传递的数据通过 ModelAndView 绑定到了对象中。又通过 setViewName 方法指定了要跳转的页面。

0x07:编写实体类代码

实体类很简单,一个 get 和 set 方法即可,示例代码如下:

  1. package com.fageweiketang.model;
  2. public class Fruits {
  3. private String name;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. }

0x08:编写视图页面

最后在 / WEB-INF/jsp/fruits 路径下创建 fruitsList.jsp 文件即可,示例代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>水果列表</title>
  8. </head>
  9. <body>
  10. <h3>水果列表</h3>
  11. <table width="300px;" border=1>
  12. <c:forEach items="${fruitsList }" var="fruit">
  13. <tr>
  14. <td>${fruit.name }</td>
  15. </tr>
  16. </c:forEach>
  17. </table>
  18. </body>
  19. </html>

因为 springmvc.xml 中配置的处理器映射器是 BeanNameUrlHandlerMapping,在接收请求时,会将 bean 的 name 作为 url 进行查找,所以最后需要在 springmvc.xml 中配置一个可以被 url 映射的 Handler 的 bean,配置示例如下:

  1. <bean name="/queryFruits.action" class="com.fageweiketang.controller.FruitsControllerTest"/>

启动 tomcat 服务器,访问 localhost/SpringMVC/queryFruits.action,结果如下:

请输入图片描述


公众号推荐:aFa攻防实验室

  1. **分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、JavaPython等方面的东西。**
  2. ![20191220230427373.jpg][]

发表评论

表情:
评论列表 (有 0 条评论,349人围观)

还没有评论,来说两句吧...

相关阅读

    相关 springMVC环境

    前言:作为一位码农,总的给这世界留下点东西吧,左思右想,只能留下点代码了,因为除了代码几乎也没有什么东西可以留下,于是编写了第一篇博客。下面进入正题springmvc环境搭建。