点击右上角【关注】发哥微教室头条号,get更多干系技能~
0x00:示例项目
以一个项目示例总结下 SpringMVC 环境的搭建基本流程,项目构造如下图:
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,结果如下: