Spring Web

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}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值