Spring Web

    xiaoxiao2021-03-25  133

    spring MVC是基于Model2实现的技术框架,spring的web框架是围绕DispatcherServlet(分发器)设计的,其作用是将用户请求分发到不同的控制器(又称处理器)。默认控制器接口为Controller。

    ①客户端发出一个HTTP请求,web应用服务器接受这个请求,如果与web.xml配置文件中指定的DispatcherServlet请求映射路径相匹配,那么web容器就会将该请求转交给DispatcherServlet处理。

    ②DispatcherServlet接受这个请求后,根据请求的信息(URL或请求参数等)按照某种机制寻找恰当的映射处理器来处理这个请求。

    ③DispatcherServlet根据映射处理器(Handler mapping)来选择并决定将请求派送给哪个控制器。

    ④控制器处理这个请求,并返回一个ModelAndView给DispatcherServlet,其中包含了视图逻辑名和模型数据信息。

    ⑤由于ModelAndView中包含的是视图逻辑名,而非真正的视图对象,因此DispatcherServlet需要通过ViewResolver完成视图逻辑名到真实视图对象的解析功能。

    ⑥得到真实的视图对象后,DispatcherServlet就要View对象对ModelAndView中的模型数据进行渲染。

    ⑦最终客户端得到返回的响应,可能是一个普通的HTML页面,也可能是一个Excel、PDF文档等视图形式。

    配置DispatcherServlet:

    DispatcherServlet是spring MVC核心,负责接收HTTP请求并协调spring mvc的各个组件完成请求处理的工作,用户需要在web.xml中配置DispatcherServlet。假设希望DispatcherServlet截获所有以*.do结尾的URL请求,web.xml配置如下:

    <servlet>

    <servlet-name>spring</servelt-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

    <servlet-name>spring</servlet-mapping>

    <url-pattern>*.do</utl-pattern>

    </servlet-mapping>

    当DispatcherServlet加载后,它将从XML文件中加载spring的应用上下文,这个XML文件的名字取决于Servlet的名字。

    上述配置中,Servlet名字为spring,那么DispatcherServlet会从spring-servlet.xml文件中加载应用上下文。为了能找到spring-servlet.xml文件,该文件需要放在项目的WEB-INF目录中。

    控制器:

    spring控制器架构的基础是org.springframework.web.servlet.mvc.Controller接口

    package org.springframework.web.servlet.mvc;

    import javax.servlet.hittp.HttPServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.ModelAndView;

    public interface Controller{

    ModelAndVIew handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception;

    }

    Controller接口中只声明了一个handleRequest方法,该方法用来处理请求并返回恰当的模型和视图。ModelAndView与Controller构成了spring MVC框架实现的基础。

    实现Controller接口的控制器:

    命令,AbstractCommandController,控制器将多个请求参数封装成一个命令对象,以此执行业务处理。

    表单,SimpleFormController,处理基于单一表单的请求。

    多动作,MultiActionController,使用一个Controller处理多个相似的请求。

    命令控制器:

    使用AbstractCommandController控制器,实现用户登录功能。

    ①建项目

    ②添加spring支持

    ③建实体包、类

    ④建com.springmvc.web包,建LoginController类,该类继承AbstractCommandController控制器

    package com.springmvc.web;

    import org.springframework.web.servlet.ModelAndView;

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

    import com.springmvc.entity.Users;

    public class LoginController extends AbstractCommandController{

    @Override

    protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response,Object command,BindException exception)throws Exception{

    //获取对象

    Users user=(Users)command;

    //创建一个指定视图逻辑名的ModelAndView实例

    ModelAndView mav=new ModelAndView("success");

    //给mav实例指定数据模型

    mav.addObject("user",user);

    return mav;

    }

    }

    由于自定义的LoginController继承了AbstractCommandController类,需要实现handle方法,其中4个参数:

    Request:代表请求对象,Response:代表响应对象,Command:封装请求参数的对象,exception:表示数据绑定过程的异常。

    ⑤在web.xml文件中配置DispatcherServlet:

    <servlet>

    <servlet-name>spring</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-,apping>

    <servlet-name>spring</servlet-name>

    <url-pattern>*.do</url-pattern>

    </servlet-mapping>

    ⑥在WEB-INF目录下创建spring-servlet.xml配置文件,在该文件中配置命令控制器:

    <?xml version="1.0" encoding="UTF-8"?>

    <beans ···········>

    <!-- 配置处理器映射采用SimpleUrlHandleMapping类 -->

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <!-- props底下的prop标签内填写的key都是符合转发条件的url值,之后跟的是bean的ID,如果输入的url值与key中的url匹配,则执行对应beanID绑定的Controller -->

    <property name="mappings">

    <props>

    <prop key="login.do">loginController</prop>

    </props>

    </property>

    </bean>

    <!-- 定义控制器LoginController -->

    <bean id="loginController" class="com.springmvc.web.LoginController">

    <!-- 设置请求数据的封装类型,执行到该控制器时就会自动将数据封装成Users -->

    <property name="commandClass" value="com.springmvc.entity.Users"/>//执行到该控制器,就会自动将数据封装成Users

    </bean>

    <!-- 配置视图解析器,使用InternalResourceViewResolver类作为视图解析器.Controller回传ModelAndVIew,DispatcherServlet将其交给ViewResolver解析 -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <!-- 属性prefix和suffix分别指定视图文件所在的路径和后缀 -->

    <property name="prefix" value="/" />

    <property name="suffix" value=".jsp" />

    </bean>

    </beans>

    ⑦在WebRoot目录下建登录页面login.jsp:

    <form action="login.do"  method="post">

    ······

    ⑧建success.jsp:

    欢迎您:${user.userName}

    转载请注明原文地址: https://ju.6miu.com/read-11968.html

    最新回复(0)