SpringMvc框架之简单入门(基于xml文件)
什么是SpringMvc
- Spring MVC属于Spring的后续产品,已经融合在Spring Web。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring MVC框架或集成其他MVC开发框架,Struts 2等。
- 用来解决我们的项目分层;Model(模型层),view(视图层,展示层),controller(控制层)
Springmvc—他做的是就是你的视图层和你的控制层;
SpringMvc的运行原理
-
springmvc有几个主要的组件
-
前端控制器DispatcherServlet(不需要程序员开发)。
- 作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度(他不和别的组件进行交互)。
-
处理器映射器HandlerMapping(不需要程序员开发)。
- 作用:根据请求的url映射查找到相应的Handler。
-
处理器适配器HandlerAdapter(不需要程序员开发)。
- 作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
-
处理器Handler—controller(需要程序员开发)。
- 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。如果执行成功,controller之后他会返回一个modelandview 然后这个就会通过你的前端控制器 然后调用视图解析器,然后进行解析。
-
视图解析器ViewResolver(不需要程序员开发)。
- 作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)----解析成jsp
-
视图View(需要程序员开发jsp页面)。
- View是一个接口,实现类支持不同的View类型(jsp、pdf…)
-
注意:不需要自己写的,是需要我们自己在xml文件中配置
- SpringMvc运行过程
- 当我们启动tomcat时,就会加载web.xml文件中配置的前端控制器。
- 当前端有请求发送过来,就会被despatcherservlet(前端控制器)拦截。
- 前端控制器就会去找我们配置的SpringMvc.xml文件中的我们自定义的Handle(处理器)。
- 经过SpringMvc中的映射器,通过映射寻找我们的类,通过handleradapter(适配器)去适配,去找到我们具体的处理器(controller)。
- 等待处理完成,返回一个modelandview对象给前端控制器。
- 前端控制器去调用SpringMvc中配置的视图解析器 。
- 通过视图解析器解析你的modelandview 然后直接在 html,jsp页面展示出来。
代码示例
- 实体类 商品类代码
/*
* 这是一个实体类,代表一个商品类
* 有商品相应的属性
* 并生成他们的get set方法 带参构造方法
*
* */
public class Items {
private Integer id;
private String name;
private Double price;
private String itemsdetail;
public Items(Integer id, String name, Double price, String itemsdetail) {
super();
this.id = id;
this.name = name;
this.price = price;
this.itemsdetail = itemsdetail;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getItemsdetail() {
return itemsdetail;
}
public void setItemsdetail(String itemsdetail) {
this.itemsdetail = itemsdetail;
}
}
- web.xml文件,在这个文件中配置我们的前端控制器DispatcherServlet
<!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>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--配置SpringMvc的配置文件路径-->
<param-value>classpath:SpringmvcXml.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
- SpringMvc的配置文件,这是使用了两种实现方式第一种是实现Controller接口,另一种实现HttpRequestHandler,
- 注意: 如果你的这个contrller是实现HttpRequestHandler这个接口的话,就必须加上这个配置
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
<?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-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置一个处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 如果你的这个contrller是实现HttpRequestHandler这个接口的话,就必须加上这个配置 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
<!-- 添加配置我们自己的controller-->
<!-- 使用实现controller的方式-->
<bean id="controller01" name="/controller01.do" class="com.wdhcr.xml.controller.Controller01"></bean>
<!-- 使用实现HttpRequestHandler这个接口的方式-->
<bean id="controller02" name="/controller02.do" class="com.wdhcr.xml.controller.Controller02"></bean>
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
</beans>
- 第一种实方式实现Controller接口,代码如下
import com.wdhcr.xml.entity.Items;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/*
* 这种使用实现Controller接口的方式
*
* */
public class Controller01 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
System.out.println("这是使用xml的方式");
//我们创建一个list集合存入数据,用来模拟数据库数据
ArrayList<Items> items = new ArrayList<>();
Items item = new Items(123, "衣服", 12.0, "短袖");
Items item1 = new Items(124, "衣服", 15.0, "裤子");
Items item2 = new Items(125, "衣服", 17.0, "裙子");
items.add(item);
items.add(item1);
items.add(item2);
//创建一个ModelAndView对象,存入数据,并指定展示的页面
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list",items);
modelAndView.setViewName("index.jsp");
return modelAndView;
}
}
- 第二中实现方式,实现HttpRequestHandler接口,代码如下
import com.wdhcr.xml.entity.Items;
import org.springframework.web.HttpRequestHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
/*
* 实现HttpRequestHandler接口的方式,注意要在springmvc配置文件中添加一个bean
* */
public class Controller02 implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
System.out.println("这是使用xml的方式");
//使用集合模拟数据库
ArrayList<Items> items = new ArrayList<>();
Items item = new Items(123, "衣服", 12.0, "短袖");
Items item1 = new Items(124, "衣服", 15.0, "裤子");
Items item2 = new Items(125, "衣服", 17.0, "裙子");
items.add(item);
items.add(item1);
items.add(item2);
//这里使用request域的方式传递数据
httpServletRequest.setAttribute("list",items);
//请求转发到index.jsp页面上
httpServletRequest.getRequestDispatcher("index.jsp").forward(httpServletRequest,httpServletResponse);
}
}
- view层的展示页面的代码,使用jstl标准标签库中的标签
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<table width="100%" border=1>
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${list}" var="item">
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.price}</td>
<td>${item.itemsdetail}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
-
好了,以上就是基于xml文件的方式创建的SpringMVC项目
-
下一篇我们讲解基于注解的方式实现SpringMvc入门