点击右上角【关注】发哥微教室头条号,get更多干系技能~

0x00:示例项目

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

jsp获取model中list数据SpringMVC 情况搭建 GraphQL

0x01:导入 jar 包

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

0x02:配置前端掌握器

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

<?xml version=\公众1.0\"大众 encoding=\公众UTF-8\公众?>

<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\公众>

<!-- SpringMVC前端掌握器 -->

<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.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<url-pattern>.action</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

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

0x03:配置处理器映射器

在 springmvc.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: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 \"大众>

<!-- 处理器映射器 -->

<bean class=\"大众org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping\"大众 />

</beans>

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

0x04:配置处理器适配器

由之前的 SpringMVC 事情流程可知,当处理器映射器 HandlerMapping 为前端掌握器 DispatcherServlet 返回掌握器 Handler 后,前端掌握器就会给处理器适配器 HandlerAdapter 去实行干系的 Handler 掌握器也便是 Controller。

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

<!-- 处理器适配器 -->

<bean class=\"大众org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter\"大众/>

0x05:配置视图解析器

当处理器适配器处理了干系的详细方法后,就会返回一个 ModelAndView 工具,这个工具包含了要跳转的视图信息 view 和视图上须要显示的数据 model,此时前端掌握器会要求视图解析器 ViewResolver 来解析 ModelAndView 工具。

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

<!-- 视图解析器 -->

<bean class=\公众org.springframework.web.servlet.view.InternalResourceViewResolver\"大众/>

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

0x06:配置 Handler 处理器

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

package com.fageweiketang.controller;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

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

import com.fageweiketang.model.Fruits;

public class FruitsControllerTest implements Controller {

private FruitsService fruitsService = new FruitsService();

public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {

//仿照Service获取水果商品列表

List<Fruits> fruitsList = fruitsService.queryFruitsList();

//返回ModelAndView

ModelAndView modelAndView = new ModelAndView();

//相称于request的setAttribut,在jsp页面通过fruitsList获取数据

modelAndView.addObject(\"大众fruitsList\公众, fruitsList);

//指定视图

modelAndView.setViewName(\"大众/WEB-INF/jsp/fruits/fruitsList.jsp\"大众);

return modelAndView;

}

//仿照Service的内部类

class FruitsService{

public List<Fruits> queryFruitsList(){

List<Fruits> fruitsList = new ArrayList<Fruits>();

Fruits apple = new Fruits();

apple.setName(\公众苹果\"大众);

Fruits banana = new Fruits();

apple.setName(\公众喷鼻香蕉\"大众);

Fruits pear = new Fruits();

apple.setName(\公众梨\"大众);

fruitsList.add(apple);

fruitsList.add(banana);

fruitsList.add(pear);

return fruitsList;

}

}

}

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

0x07:编写实体类代码

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

package com.fageweiketang.model;

public class Fruits {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

0x08:编写视图页面

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

<%@ page language=\公众java\"大众 contentType=\"大众text/html; charset=UTF-8\公众 pageEncoding=\公众UTF-8\"大众%>

<%@ taglib uri=\"大众http://java.sun.com/jsp/jstl/core\"大众 prefix=\公众c\"大众 %>

<!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>水果列表</title>

</head>

<body>

<h3>水果列表</h3>

<table width=\"大众300px;\"大众 border=1>

<c:forEach items=\"大众${fruitsList }\公众 var=\公众fruit\"大众>

<tr>

<td>${fruit.name }</td>

</tr>

</c:forEach>

</table>

</body>

</html>

由于 springmvc.xml 中配置的处理器映射器是 BeanNameUrlHandlerMapping,在吸收要求时,会将 bean 的 name 作为 url 进行查找,以是末了须要在 springmvc.xml 中配置一个可以被 url 映射的 Handler 的 bean,配置示例如下:

<bean name=\公众/queryFruits.action\公众 class=\"大众com.fageweiketang.controller.FruitsControllerTest\"大众/>

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