框架--SpringMvc框架之简单入门

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入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值