SpringMVC学习

Spring MVC学习笔记

1 工作原理(体系架构)

在这里插入图片描述

步骤描述:

第一步:用户发起HTTP请求,web服务器收到请求、若匹配到DispatcherServlet的请求映射路径(在web.xml中指定),则web容器将请求转交给DispatcherServlet处理。
第二步:DispatcherServlet根据请求信息,及HandlerMapping配置(可以根据xml配置、注解进行查找)查找Handler
第三步:DispatcherServlet根据HandlerMapping得到请求对应的Handler后,通过HandlerAdapter去调用执行Handler
第四步:Handler执行完成给适配器返回ModelAndView,HandlerAdapter向DispatcherServlet返回ModelAndView,ModelAndView是spring mvc框架的一个底层对象,包括 Model(模型)和view(视图逻辑名)
第五步:ModelAndView中包含的是“逻辑视图名”而非真正的视图对象,DispatcherServlet通过视图解析器完成视图名到视图对象的解析工作
第六步:视图解析器向DispatcherServlet返回视图对象View
第七步:DispatcherServlet使用View对象对ModelAndView中的模型数据进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:DispatcherServlet向用户响应结果

2 配置DispatcherServlet

在这里插入图片描述

声明DispatcherServlet,默认自动加载/WEB-INF/smart-servlet.xml的spring配置文件。

配置参数

namespace: 命名空间,默认为-servlet,指定属性后WEB-INF/.xml

contextConfigLocation: 指定spring配置文件的得资源路径。

指定DispatcherServlet处理所有以.html为后缀的Http请求。

2.1 一个简单的实例(大概认识)

通过简单实例讲解SpringMVC开发过程

(1)配置web.xml,指定业务层对应的Spring配置文件,定义DispatcherServlet

(2)编写处理请求的控制器

(3)编写视图对象,这里使用jsp视图对象

(4)配置Spring MVC的配置文件,使控制器、视图解析器等生效

(a)负责用户处理的控制器:UserController

@Controller
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/register.html")
    public String register(){
        return "register";
    }

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView createUser(User user){
        userService.createUser(user);
        ModelAndView mav=new ModelAndView();
        mav.setViewName("creatSuccess");
        mav.addObject("user",user);
        return mav;
    }

}

(b)视图对象:

<form method="post" action="<c:url value="/user.html"/>">
    <table>
    <tr>
    <td>用户名:</td>
    <td><input type="text" name="userName"></td>
    </tr>
    <tr>
    <td>密码:</td>
    <td><input type="password" name="password"></td>
    </tr>
    <tr>
       <td>姓名:</td>
       <td><input type="text" name="realName"></td>
    </tr>
     <tr>
    <td colspan="2"><input type="submit" name="提交"/> </td>

©创建成功页面
在这里插入图片描述

(d)springmvc配置文件
在这里插入图片描述

(e)登录页面:
在这里插入图片描述

(f)注册成功页面:
在这里插入图片描述

2.2 注解驱动的控制器

类处的注解@RequestMapping(“user”)指定的URL相对于WEB应用的部署路径,而方法处指定的URL相对于类定义处指定的URL.

其他映射请求,也可以根据请求方法及参数进行映射。

URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参中。

@RequestMapping(path="/delete",method = RequestMethod.POST,params = "userId")
@RequestMapping(headers = "content-type=text/*")

3 请求处理方法签名

//1、请求参数按名称匹配的方法绑定到方法入参中,方法返回的字符串代表逻辑视图名
 
 @RequestMappingPath="/handlel"public String handlel(@RequestParam("username") String username,
                       @RequestParam("password") String password,
                       @RequestParam("realName") String realName){
     return "main";
 }
 //2、请求参数按名称匹配的方法绑定到user属性中,方法返回的字符串代表逻辑视图名
 @RequestMappingPath="/handle2"public ModelAndView createUser(User user) {
     
     return mv;
 }
 //3、直接将Http请求对象传递给处理方法,方法返回的字符串代表逻辑视图名
 @RequestMappingPath="/handle3"public String handle3(HttpServlet request){
     return "main";
 }

1、RequestMappingHandlerAdapter默认已经装配了HttpMessageConverter(对象转换):

StringHttpMessageConverter, ByteArrayHttpMessageConverter, SourceHttpMessageConverter, AllEncompassingFormHttpMessageConverter

途径:@ResponseBody和@RequestBody对处理方法进行标注

​ HttpEntity/ResponseEntity作为处理方法的入参或返回值。

2、 使用@RestController和AsyncRestTemplate

@RestController=@ResponseBody+@Controller(疑问:什么时候使用@ResponseBody和@RequestBody?)

4 处理模型数据

输出模型数据途径:

1 ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
//添加模型
ModelAndView addObject()
ModelAndView addAllObjects()
//设置视图
void setView()
void setViewName()
2 @ModelAttribute:在方法入参标注该注解后,入参的对象就会放到数据模型中
//在方法入参前使用@ModelAttribute
@RequestMapping(path = "/handle6")
public String handle6(@ModelAttribute("user") User user)
3 MapModel:如果方法入参为...ModelMap或..Map,处理方法返回Map中的数据会自动添加到模型中
//根据处理方法有Map或Model类型
@RequestMapping(path = "/handle6")
public String handle6(ModelMap modelMap){
modelMap.addAttribute("testAttr","valuel");
User user=(User)modelMap.get("user");
4 @SessionAttribute:将模型中的某个属性暂存到Httpsession中,以便多个请求之间可以共享这个属性。
//标注@SessionAttributes,SpringMVC会将模型中对应属性暂存到HttpSession
@SessionAttribute("user")
public class test {
//@SessionAttribute("user")会自动将本处理器中的任何处理方法属性名为user的模型属性透明的存储到HttpSession中。

5 处理方法的数据绑定

在这里插入图片描述

5.1 ConversionService

完成JAVA类型转换工作:

<!-- 装配自定义conversionService-->
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.smart.domain.User"/>
        </list>
    </property>
</bean>

数据格式化:装配FormattingConversionServiceFactoryBean

<mvc:annotation-driven conversion-service="conversionService"/> 
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"*>     <property name="converters">

举例:

@DateTimeFormat(pattern = "yyyy-MM-dd") 
private Date birthday;
@NumberFormat(pattern = "#,###.#") 
private long salary;
5.2 数据校验

Spring校验框架:定义Bean

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

SpringMVC校验;

通过mvc:annotation-driven会默认装配LocalValidatorFactoryBean,只需在方法入参标注@Valid

获取校验结果:BindingResult bindingResult

public String handle62(@Valid @ModelAttribute("user") User user, 
                       BindingResult bindingResult)

在页面中显示错误:

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<form:errors path="username" cssClass="errorClass"/>

6 视图和视图解析器

InternalResourceViewResolver//解析为URL文件,如JSP

模板视图:freeMarker,Excal,PDF,xml,json.

6.1 freeMarker

文件名:***.ftl。

显示页面:<#list userList as user> </#list>

装配FreeMarker:

<bean class=“…”
P:templateLoaderPath="WEB/INF/ftl"
P:defaultEncoding="UTF-8">
<property name="freemakersetting">
<props>
<prop kry="classic_compatible">true</prop>
</props>

6.2 Excel

继承AbstractXlsView类 //注意。Excel文档名称必须编码为iso-8859-1.

在***-servlet.xml文件配置Bean.

6.3 输出XML

XML形式的视图对象为:MarshallingView

在***-servlet.xml文件配置Bean.

<bean id="userListXML"     class="org.springframework.web.servlet.view.xml.MarshallingView"
       p:modelKey="userList"
       p:marshaller-ref="xmlMarshaller"/> <bean id="xmlMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
</bean>

7 本地化解析

7.1 cookieLocaleResolver
  <bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver"
      p:cookieName="clientLanguage"
      p:cookieMaxAge="1000000"
      p:cookiePath="/"
      p:defaultLocale="zh_CN"/>

7.2 sessionLocaleResolver
<bean id="localeResolver"
 class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

7.3 localeChangeInterceptor
<mvc:interceptors> 
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"*/> </mvc:interceptors>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值