前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springmvc最全(必会知识合集)带Java代码示例(保姆级别讲解)包会

Springmvc最全(必会知识合集)带Java代码示例(保姆级别讲解)包会

作者头像
CaesarChang张旭
发布2021-01-26 15:06:49
7730
发布2021-01-26 15:06:49
举报
文章被收录于专栏:悟道

1.springMVC介绍

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还 是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图, 所以不会 强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它 们更容易进行定制。

2.web请求过程

3. springMVC组件介绍

DispatcherServlet: 作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合 性,提高每个组件的扩展性。 HandlerMapping: 通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式 等。 HandlAdapter: 通过扩展处理器适配器,支持更多类型的处理器,调用处理器传递参数等工作! ViewResolver: 通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。

4.MVC执行过程

4.1Dispatcher介绍

DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1. 文件上传解析,如果请求类型是 multipart 将通过 MultipartResolver 进行文件上传解析; 2. 通过 HandlerMapping ,将请求映射到处理器(返回一个 HandlerExecutionChain ,它包括一个处理器、多个 HandlerInterceptor拦截器); 3. 通过 HandlerAdapter 支持多种类型的处理器 (HandlerExecutionChain 中的处理器 ) ; 4. 通过 ViewResolver 解析逻辑视图名到具体视图实现; 5. 本地化解析; 6. 渲染具体的视图等; 7. 如果执行过程中遇到异常将交给 HandlerExceptionResolver 来解析。

4.2 DispatcherServlet 辅助类

spring 中的 DispatcherServlet 使用一些特殊的 bean来处理request 请求渲染合适的视图。

5.springMVC搭建

(1)添加jar包

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.0.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.0.8.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>

(2)修改web.xml

<servlet> <servlet-name>springMVC</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

注意: dispatcherServlet用 / 其他的用/*(比如过滤器啥的) |同时用/的话 静态资源也被影响访问 ,

需要在xml中引入MVC ,然后使用<mvc:default-servlet-handler></mvc:default-servlet-handler>

2.2 url-pattern有5种配置模式

( 1 ) /xxx: 完全匹配 /xxx 的路径 ( 2 ) /xxx/*: 匹配以 /xxx 开头的路径,请求中必须包含 xxx 。 ( 3 ) /* :匹配 / 下的所有路径 , 请求可以进入到 action 或 controller ,但是转发 jsp 时再次被拦截,不能访问 jsp 界面。 ( 4 ) .xx: 匹配以 xx 结尾的路径,所有请求必须以 .xx 结尾,但不会影响访问静态文件。 ( 5 ) /: 默认模式,未被匹配的路径都将映射到刺 servlet ,对 jpg , js , css 等静态文件也将被拦截,不能访问。

(3)修改spring配置文件

<?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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.xsd" > <!-- 扫描 controller--> <context:component-scan base-package="com.yhp.controller"/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- jsp 所在的位置 --> <property name="prefix" value="/" /> <!-- jsp 文件的后缀名 --> <property name="suffix" value=".jsp" /> </bean> </beans>

(4)创建控制器类

1.@Controller 2.@RequestMapping(" 请求地址 ") * 加在类上 : 给模块添加根路径 * 加载方法 : 方法具体的路径 设置 @RequestMapping method 属性 @RequestMapping(method=RequestMethod.GET,value=" 请求名 ")

6 接收参数

(1)HttpServletRequest | 用request.getParameter("XX") (2) 页面传值时的 key 与 处理请求的方法的参数名相同 (3) 使用控件名 和 对象的属性名 一致的方式进行接收

如果方法参数名与 传过来的name不同则使用下面的

7日期处理:

springmvc框架默认支持转换得日期格式:yyyy/MM/dd

可以使用工具类处理日期 pom: <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version> </dependency> 配置文件 : <mvc:annotation-driven/> 使用: public String test1(@DateTimeFormat(pattern = "yyyy-MM-dd")Date birthday){}

8返参

修改web.xml文件版本,用来支持jsp操作EL表达式

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

(1)HttpServletRequest | request.setAttribute("XX",XX) (2)ModelMap map , 默认作用域 request (3)Model 类保存数据

(4)ModelAndView 对象需要 new, 同时作为返回值类型

9.session存值

(1)使用HttpSession :request.getSession(); ( 2 )使用 @sessionAttributes("key 值 ")// 写的是 ModelMap 中定义的 key 值 注:该注解和 ModelMap 结合使用 , 当使用 ModelMap 存值时 , 会在 session 中同时存储一份数据

@SessionAttributes() 的小括号中如果是一个值,不要加 {} 示例: @SessionAttributes("key") @SessionAttributes({"key1","key2"}) 清除注解 session:SessionStatus 类 status.setComplete();

10.弹窗响应

输出流的问题(返回值必须是 void

@RequestMapping("delete") public void delete(HttpServletResponse response) throws IOException{ System.out.println(" 删除成功 "); response.setContentType("text/html;charset=UTF-8"); PrintWriter pw=response.getWriter(); pw.print("<script type='text/javascript'>alert(' 删除成 功'); kk='MyJsp.jsp'</script>"); }

11解决post处理乱码

12.转发和重定向

默认转发跳转

@RequestMapping("/forwardView") public String forwardView(){ return "forward:/WEB_INF/pages/success.jsp"; 或者:return "success"; } 重定向: return " redirect :a.jsp" 或者 :redirect:findall

注意:重定向时地址栏会发生拼接 modelmap 中值(也会带着)的问题

13.异常处理

方法1:在web.xml响应状态码配置一个对应页面 <error-page> <error>404</error> <location>/404.html</location> </error-page> 方法 2: // 配置异常结果界面 @ExceptionHandler(Exception.class) public String execeptionResult(){ return "exception"; } 全局异常 :@ ControllerAdvice 使一个 Contoller 成为全局的异常处理类,类中用 @ExceptionHandler 方法注解的方法可以处理所有 Controller 发生 的异常

14.Cookie操作

@CookieValue 注解可以获取请求中的 cookie public String testCookie(@CookieValue("JSESSIONID")String cookie) { System.out.println("cookie:"+cookie); return "result"; }

15.获得头信息

@RequestHeader @RequestHeader 注解可以获取请求头中的数据 !! public String testHeader(@RequestHeader("User-Agent")String header)

16.RestFul风格

REST: 即 Representational State Transfer ,( 资源 ) 表现层状态转化 , 是目前最流行的一种互联网软件架构。 具体说,就是 HTTP 协议里面 , 四个表示操作方式的动词 : GET POST PUT DELETE 它们分别代表着四种基本操作 : - GET用来获取资源 - POST用来创建新资源 - PUT用来更新资源 - DELETE用来删除资源

示例 : order?method=insert&id=1 order?method=delete&id=1 order?method=update&id=1 order?method=select&id=1

通过修改 http 的状态值来标记请求的目的 Spring 中实现 RESTful 风格 HiddenHttpMethodFilter: 浏览器form表单只支持GET和POST,不支持DELETE和PUT请求, Spring添加了一个过滤器,可以将这些请求转换为标准的http方法,支持GET,POST,DELETE,PUT请求!

实现步骤 :

(1) web.xml 添加 HiddenHttpMethodFilter 配置 <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class> org.springframework.web.filter.HiddenHttpMethodFilter </filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

(2) 实现查 , 改 , 删 框架

@RequestMapping(value = "/list",method = RequestMethod.GET) @RequestMapping(value = "/{id}",method = RequestMethod.DELETE) @RequestMapping(value = "/{id}",method = RequestMethod.PUT)

(3) Jsp 代码 :

注意: name="_method"固定写法

(4) controller

17.静态资源访问

需要注意一种 ,DispatcherServlet 拦截资源设置成了 / 避免了死循环 , 但是 / 不拦截 jsp 资源 , 但是它会拦截其他静态资 源 , 例如 html , js , css,image 等等 , 那么我们在使用 jsp 内部添加 静态资源就无法成功 , 所以 , 我们需要单独处理下静态 资源 !

处理方案 :

##### 1. 修改 Spring MVC 对应配置文件 , 添加 mvc 命名空间和约束

<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">

##### 2. 添加处理标签

<mvc:default-servlet-handler></mvc:default-servlet-handler>

18.Json处理

(1)添加jar包<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> 注意 :maven 引入 jackson-databind 会连带引入 core 和 annotations 非 maven 项目需要引入这三个包 (2) 实现代码 :返回值类型改为 @ ResponseBody

注意:需要在配置文件添加 <mvc:annotation-driven/>

19.SpringMVC拦截器

(1)创建拦截器类:实现HandlerInterceptor接口 preHandle() 拦截器开始 postHandle() 拦截器结束 afterCompletion 最后执行

(2) 配置拦截器

拦截所有请求(测试 : 拦截内容包含 jsp 吗?) <mvc:interceptors> <bean id="my" class="util.MyInterceptor"/> </mvc:interceptors 拦截指定请求 : <mvc:interceptors> <mvc:interceptor > <mvc:mapping path="/ 请求名 " /> <mvc:mapping path="/ 请求名 " /> <bean id="my" class="util.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>

补充:

springMVC 拦截器使用场景

1 、日志记录 :记录请求信息的日志 2 、权限检查,如登录检查 3 、性能检测:检测方法的执行时间

SpringMVC 的拦截器( Interceptor )和过滤器( Filter ) 的区别与联系

1 )过滤器: 依赖于 servlet 容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容 器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修 改字符编码;在过滤器中修改 HttpServletRequest 的一些参数,包括:过滤低俗文字、危险字符等 2 )拦截器: 依赖于 web 框架,在 SpringMVC 中就是依赖于 SpringMVC 框架。在实现上基于 Java 的反射机制,属于面向切面编程 ( AOP )的一种运用。由于拦截器是基于 web 框架的调用,因此可以使用 Spring 的依赖注入( DI )进行一些业务操 作,同时一个拦截器实例在一个 controller 生命周期之内可以多次调用。但是缺点是只能对 controller 请求进行拦 截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

20.文件上传下载

Spring MVC 为文件上传提供了直接支持 , 这种支持是通过即插即用的 MultipartResolver 实现 .

Spring 使用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现 类:CommonsMultipartResolver 。

在 SpringMVC 上下文中默认没有装配 MultipartResolver, 因此默认情况下不能处理文件上传工作。

如果想使用 Spring 的文件上传功能 , 则需要先在上下文中配置 MultipartResolver 。

fifileUpload

文件上传的步骤 :

( 1 )添加 jar 包

<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>

(2) 配置 MultipartResolver:

<mvc:annotation-driven/> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" p:maxUploadSize="5242880" />

( 3 )页面表单 , 提交方式必须是 post

enctype="multipart/form-data"

( 4 )配置 java 代码 ( 注意要创建文件夹保存上传之后的文件 )

文件下载步骤:

(1)添加jar包

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>

(2) 配置处理类方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.springMVC介绍
  • 2.web请求过程
  • 3. springMVC组件介绍
  • 4.MVC执行过程
  • 5.springMVC搭建
  • (1)添加jar包
  • 注意: dispatcherServlet用 / 其他的用/*(比如过滤器啥的) |同时用/的话 静态资源也被影响访问 ,
  • 6 接收参数
  • 7日期处理:
  • 8返参
  • 9.session存值
  • 10.弹窗响应
  • 11解决post处理乱码
  • 12.转发和重定向
  • 默认转发跳转
  • 13.异常处理
  • 14.Cookie操作
  • 15.获得头信息
  • 16.RestFul风格
  • 17.静态资源访问
  • 18.Json处理
  • 19.SpringMVC拦截器
  • 20.文件上传下载
  • 文件下载步骤:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档