springmvc

文章目录

  • 1. 什么是springmvc
  • 2.项目中加入springmvc支持
    • 2.1 导入依赖
    • 2.2 springMVC配置文件
    • 2.3 web.xml配置
    • 2.4 中文编码处理
  • 3. 编写一个简单的controller
  • 4. 视图层配置
    • 4.1 视图解析器配置
    • 4.2 静态资源配置
    • 4.2 编写页面
    • 4.3 页面跳转方式
  • 5. SpringMVC处理请求的流程
  • 6. 常用注解


前言


提示:以下是本篇文章正文内容,下面案例可供参考

1. 什么是springmvc

Spring Web MVC是一种,种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。

ssm:即springmvc, spring, mybatis

spring mvc 分为模型层,视图层,控制层s,

pring mvc的模型层指的不单单是model,model它只是其中的一种,

我们更多的把它叫做领域模型,像service 层和dao层我们把它称之为过程模型

b1d926c9a029421bb712ca136301f8f0.png

2.项目中加入springmvc支持

2.1 导入依赖

代码如下(示例):

<dependency> 
<groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId> 
<version>${spring.version}</version> 
</dependency> 
在pom.xml文件中导入以上依赖,
<!-- JSTL依赖 原因:org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包--> 
<dependency> 
<groupId>jstl</groupId> 
<artifactId>jstl</artifactId> 
<version>1.2</version> 
</dependency> 
<dependency> 
<groupId>taglibs</groupId> <artifactId>standard</artifactId> 
<version>1.1.2</version> 
</dependency>

因为springmvc支持通过jsp方式来开发,而jsp中需要用到jstl以及taglibs,所以需要导入这两段包,如果用前后端分离开发,就可以不引入这两个包;

2 springMVC配置文件

代码如下(示例):

将课件中的spring-mvc.xml放入WEB-INF目录下,详细信息见配置文件中的注释。

</context:component-scan>组件扫描从com.zking包中开始扫描,它不是默认扫描,它有一个规则,springmvc有一个最核心的注解是controller,其他组件它不管,只负责扫描controller注解

<mvc:annotation-driven></mvc:annotation-driven>;springmvc.xml文件中是提供sprigmvc注解的支 持

ViewResolver 视图解析器,如果返回值是.jsp,那就返回到一个jsp页面中,对这个页面进行解析,文件名+后缀等于文件的路径名,配置试图解析器;根据不同文件的后缀改;

放在webapp和放在web-inf的区别:

页面放在webapp可以直接访问页面返回,但是web-inf是一个受保护的目录,不能直接访问,要通过访问controller组件,再由controller组件帮你返回;安全性更高;

static静态资源不需要防护所以单独处理,静态资源不管请求多少次都不改变的例如html,js,图片,

注:关于注解扫描的优化:
在使用spring+springmvc时会存在两个上下文,一个父上下文spring上下文,一个子上下文springmvc上下文,springmvc上下文可以访问父上下文(即spring上下文),但spring上下文不能访问到子上下文(即springmvc上下文)。
优化思路:spring中配置的注解扫描排除掉controller,而springmvc配置文件中的注解扫描则只需要扫描controller即可。具体配置详见课件中的配置文件。

2.3 web.xml配置

将随课件提供的web.xml放入WEB-INF目录,替换原来的配置文件。需要理解配置文件的各个部分的作用。

<!-- spring上下文配置文件 -->
<context-param>
    <param-name>contextConfigLocation</param-name>//源代码通过这个变量名读取文件位置,所以属性名不能改变,保持一致
    <param-value>classpath*:applicationContext*.xml</param-value>//在类路径下面找以applicationContext开头的配置文件;
</context-param>

<!-- 读取Spring上下文的监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
web服务器启动的时候调用这个监听器,找到spring配置文件的路径,初始化整个ioc容器,方便环境的搭建;

2.4 中文编码处理

将随课件提供的EncodingFiter.java,将入项目并在web.xml中配置,以便于处理中文编码。

3. 编写一个简单的controller

注: 示例中用到的注解:

  • @Controller:该注解在springmvc中用于标记一个控制器,类似的注解还有@RestController,不同的是@RestController专门用于标记一个rest风格的接口,

区别:直接恢复别人的数据,不需要重定向可以直接用RestController,需要重定向转发用Controller;

  • 相当于@ResponseBody + @Controller合在一起的作用。
  • @RequestMapping:该用于标记请求路径,在有些参考资料中也称之为服务端点。该注释可以用在方法上也可以用在类上。

使用浏览器测试,如果服务后台输出了提示字符串,则说明配置成功,现在页面上会显示错误,因为目前还没有配置页面。

4. 视图层配置

4.1 视图解析器配置

注: 如果是前后端分离的开发方式则不需要配置。

4.2 静态资源配置

示例:

为了方便配置可以将所有的静态资源放置在static目录中,具体配置如图所示:

注: 如果加该配置,则不能正常显示图片, 可以注释掉测试看看。

4.2 编写页面

1)编写一个测试页面

2)修改controller的配置

4.3 页面跳转方式

1)转发: "forward:path"

2)重定向: "redirect:path"

注: 因为页面文件放置在了WEB-INF目录下,所以不能直接重定向到页面。注意看示例。

5. SpringMVC处理请求的流程

主要组件
1 首先用户发送请求-->DispatherServlet
2 DispatcherServlet-->HandlerMapping
3 DispatcherServlet-->HandlerAdapter
4 HandlerAdapter-->处理器功能处理方法的调用
5 ModelAndView的逻辑视图名-->ViewRecolver
6 View-->渲染
7 返回控制权给DispatcherServlet,由DispatcherServlet返回呼应给用户,流程结束

处理流程示意图:

Spring工作流程描述
      1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
      3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
      7. ViewResolver 结合Model和View,来渲染视图
      8. 将渲染结果返回给客户端。

请求给中央控制器DispatherServlet,中央控制器我们已经在web.xml文件中配置好了,它就是一个serverlet,DispatherServlet中央控制器处理所有请求,DispatherServlet中央控制器找到HandlerMapping处理请求,HandlerMapping通过Handler方法映射去找,我们在testcontrollerl类写的hello方法会有注解,通过注解可以知道它是处理get请求,注解将请求的路径和具体的方法做了映射,映射通过注解去定义,通过mapping找到Handler方法去处理,

通过HandlerAdapterc处理器适配器帮我们们进行数据转换、数据验证等事情再最后给Handler方法;hello方法整个部分就是Handler,Handler不需要解析参数和类型转换,有springmvc处理,只需要处理业务逻辑,Handler处理完成后,

如果注解用的controller说明需要用到页面的转发和重定向进行处理,那这个时候就会找ModelAndView-把结果和页面告诉中央控制器DispatherServlet,中央控制器会去找ViewResolver视图解析器,视图解析器会通过前缀后缀返回的名称找到那些视图,Model是指需要给前台页面的数据,再返回生成一个View对象返回给用户。

用RestController就不需要返回model和视图解析器;

数据转换:请求会有参数,它会帮我们解析好以参数的方式传递,获取的参数就不需要自己去类型转换了,

Handler执行完成后,找ModelAndView对象返回到哪个对象和试图中,请求会有参数;

6. 常用注解

  • @Controller:用于标识处理器类
  • @RestController注解相当于@ResponseBody + @Controller合在一起的作用
  • @RequestMapping:请求到处理器功能方法的映射规则,可定义到类和方法,常用参数:value、method
  • @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定,常用参数:value、required、defaultValue, (required设置成false的参数类型必须是引用类型,因为基本数据类型是不能为null的)
  • @ModelAttribute:请求参数到命令对象的绑定。
    可用@ModelAttribute标注方法参数,方法参数会被添加到Model对象中(作用:向视图层传数据)
    可用@ModelAttribute标注一个非请求处理方法,此方法会在每次调用请求处理方法前被调用(作用:数据初始化)
    可用@ModelAttribute标注方法,方法返回值会被添加到Model对象中(作用:向视图层传数据)
  • @RequestBody:用于目前比较流行的ajax开发的数据绑定(即提交数据的类型为json格式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值