低成本门户网站开发,营销方法有哪些方式,大连做网站谁家好,商业空间设计案例pptSpringMVC简介
SpringMVC是Spring提供的一套建立在Servlet基础上#xff0c;基于MVC模式的web解决方案
SpringMVC核心组件
DispatcherServlet#xff1a;前置控制器#xff0c;来自客户端的所有请求都经由DispatcherServlet进行处理和分发Handler#xff1a;处理器…SpringMVC简介
SpringMVC是Spring提供的一套建立在Servlet基础上基于MVC模式的web解决方案
SpringMVC核心组件
DispatcherServlet前置控制器来自客户端的所有请求都经由DispatcherServlet进行处理和分发Handler处理器包括了拦截器和控制器中的方法主要负责处理请求HandlerMapping映射器解析文件和扫面注解内部缓存了handler和handler的访问路径被DispatcherServlet调用用于查找路径对应的handlerHandlerAdapter适配器处理请求参数和处理响应数据DispatcherServlet就是通过HandlerAdapter间接调用handlerViewResolver视图解析器返回的视图是逻辑视图需要进行解析、渲染之后才是给用户看的页面 SpringMVC的工作流程
前端发送的请求由DispatcherServlet接收到然后DispatcherServlet调用HnadlerMapping映射器通过URL去匹配对应的handler因为无法确定处理的类型所以调用HandlerAdapter适配器去适配handler适配之后就会调用这个handler处理器实际就是拦截器和控制器下的方法如果返回的类型是ModelAndView就会将这个ModelAndView返回给ViewResolver视图解析器进行解析得到视图的位置然后对这个视图进行渲染最后将渲染好的视图交给DispatcherServlet返回给前端展示如果在控制器比如说类或者某个方法上中加上了ResponseBody这个注解就代表handler的返回值是直接返回给前端的不会经过视图解析器
SpringMVC的使用
第一步引入依赖
propertieslombok-vesion1.18.24/lombok-vesionfastjson-version2.0.42/fastjson-versionspring-context-version5.3.8/spring-context-versionspring-context-supprt-version5.3.8/spring-context-supprt-versionspring-aop-version5.3.23/spring-aop-versionproject.compile.source1.8/project.compile.sourceproject.compile.target1.8/project.compile.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding
/propertiesdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring-context-version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context-support/artifactIdversion${spring-context-supprt-version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok-vesion}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion${spring-aop-version}/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion${aspectJ-version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${spring-context-version}/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion${fastjson-version}/version/dependency
/dependencies第二步创建spring.xml
在resources文件夹下创建spring.xml文件 错误一命名空间的标签不匹配比如xmlns:mvchttp://www.springframework.org/schema/cmvc应该对应的是../schema/mvc 错误二没有添加对应的xsi:schemaLocation比如引入了xmlns:mvchttp://www.springframework.org/schema/mvc但是没有在最后添加http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://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 https://www.springframework.org/schema/mvc/spring-mvc.xsd!--视图解析器在控制器返回视图的时候生效--bean classorg.springframework.web.servlet.view.InternalResourceViewResolver!--视图资源的前缀--property nameprefix value//!--视图资源的后缀--property namesuffix value.jsp//bean!-- 映射器 --!-- bean classorg.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping/ --!-- 适配器 --!-- bean classorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter/ --!-- 较新的版本支持注解驱动效果等同于上面两句 --mvc:annotation-drivenmvc:message-convertersref beanstringHttpMessageConverter/ref beanjsonConverter//mvc:message-converters/mvc:annotation-driven!-- 添加需要扫描的包 --context:component-scan base-packagecn.cnmd.controller, cn.cnmd.exception/!-- 编码转换器 --!-- 字符串数据转换器 --bean idstringHttpMessageConverter classorg.springframework.http.converter.StringHttpMessageConverter/!-- JSON格式数据转换器 --bean idjsonConverter classcom.alibaba.fastjson.support.spring.FastJsonHttpMessageConverterproperty namesupportedMediaTypeslistvaluetext/html;charsetUTF-8/valuevalueapplication/json;charsetUTF-8/value/list/property/bean/beans第三步编写controller类 报错415-不支持的媒体类型 解决方案在spring.xml中配置编码转化器 !--在注解驱动中添加编码转换器--
mvc:annotation-drivenmvc:message-convertersref beanstringHttpMessageConverter/ref beanjsonConverter//mvc:message-converters
/mvc:annotation-driven!-- 字符串数据转换器 --
bean idstringHttpMessageConverter classorg.springframework.http.converter.StringHttpMessageConverter/!-- JSON格式数据转换器 --
bean idjsonConverter classcom.alibaba.fastjson.support.spring.FastJsonHttpMessageConverterproperty namesupportedMediaTypeslistvaluetext/html;charsetUTF-8/valuevalueapplication/json;charsetUTF-8/value/list/property
/beanUserController类
RestController//RestController Controller ResponseBody
RequestMapping(/user)
public class UserController {/*** 获取一个学生的信息** param id 学生编号* return 学生对象*/GetMappingpublic Student getStudent(RequestParam(id) int id) {// System.out.println(1/0); 遇到异常会被带有RestControllerAdvice注解的ExceptionController处理return new Student();}/*** 添加一个学生** param student 学生对象的JSON数据* return 状态码*/PostMappingpublic int addStudent(RequestBody Student student) {System.out.println(student student);return 0;}/*** 更新一个学生的信息** param student 更新后的学生信息* return 状态码*/PutMappingpublic int updateStudent(RequestBody Student student) {System.out.println(student student);return 0;}/*** 通过学生id删除一个学生** param id 学生编号* return 状态码*/DeleteMapping(/{id})public int deleteStudent(PathVariable(id) int id) {System.out.println(id id);return 0;}/*** 批量查询学生** param currentPage 当前页数* param pageSize 当页数据条数* return 学生集合*/GetMapping(/stuList)public ListStudent getAllStudent(RequestParam(currentPage) int currentPage,RequestParam(pageSize) int pageSize) {System.out.println(currentPage currentPage , pageSize pageSize);return new ArrayList();}/*** 获取请求头中的数据** param ua 请求头中的User-Agent*/GetMapping(/header)public void getHeader(RequestHeader(User-Agent) String ua) {System.out.println(ua ua);}/*** 获取cookie中的数据** param status cookie中的keystatus*/GetMapping(/cookie)public void getCookie(CookieValue(status) String status) {System.out.println(status status);}}全局异常处理
RestControllerAdvice
public class ExceptionController {/*** 处理全局异常的方法** param e 异常对象* return 异常信息*/ExceptionHandler(Exception.class)public String exceptionHandler(Exception e) {return e.getMessage();}
}常用的注解 实例都在上方 //用于标记是否是一个控制器
Controller//匹配请求中的URL地址来调用对应的handler
RequestMapping//用于匹配URL地址中的parameter参数
RequestParam//用于匹配URL路径上的参数
PathVariable//用于匹配前端发送给后端的JSON数据
RequestBody//用于匹配请求头中的数据
RequestHeader//用于匹配Cookie中的数据
CookieValue//用于标记一个方法的返回值是否直接返回给前端
ResponseBody//RESTFul风格下的注解等同于Controller ResponseBody
RestController//RESTFul风格下的用于匹配不同请求方式
GetMapping/PostMapping/PutMapping/DeleteMapping//该注解只能应用在类上表示这个类就是处理异常的控制器
ControllerAdvice//RESTFul风格下的用于表示这个类就是处理异常的控制器并且返回值直接返回给前端等同于ControllerAdvice ResponseBody
RestControllerAdvice//该注解只能应用在ControllerAdvice或者说RestControllerAdvice标识的类的方法上用来处理异常
ExceptionHandler静态资源访问解决
为什么静态资源无法访问
因为在Tomcat的自带的web.xml中有这样一个配置
!--.......--
servletservlet-namedefault/servlet-nameservlet-classorg.apache.catalina.servlets.DefaultServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value0/param-value/init-paraminit-paramparam-namelistings/param-nameparam-valuefalse/param-value/init-paramload-on-startup1/load-on-startup
/servlet
!--.......--
!-- The mapping for the default servlet --
servlet-mappingservlet-namedefault/servlet-nameurl-pattern//url-pattern
/servlet-mapping说明在创建webapp项目时我们在web.xml中配置的DispathcerServlet的映射覆盖了DefaultServlet的映射所以就不会再使用默认的DefaultServlet造成了静态资源无法访问
解决方案
方案一修改XxxMapping中的url比如加上后缀.do、.action
方案二【推荐】在web.xml中配置静态资源的访问地址比如将js、css、图片等静态资源放在static文件夹下
!-- web.xml --
servlet-mappingservlet-namedefault/servlet-nameurl-pattern/static/*/url-pattern
/servlet-mapping方案三在spring.xml文件中配置 default-servlet-handler
!--
这个handler就是处理静态资源的它的处理方式就是将请求转会到tomcat中名为default的Servlet
--
mvc:default-servlet-handler/
!-- mapping是访问路径location是静态资源存放的路径 --
mvc:resources mapping/static/** location/static/ /中文乱码问题
解决方案编码转换器
!-- 编码转换器 --
!-- 字符串数据转换器 --
bean idstringHttpMessageConverter classorg.springframework.http.converter.StringHttpMessageConverter/!-- JSON格式数据转换器 --
bean idjsonConverter classcom.alibaba.fastjson.support.spring.FastJsonHttpMessageConverterproperty namesupportedMediaTypeslistvaluetext/html;charsetUTF-8/valuevalueapplication/json;charsetUTF-8/value/list/property
/bean
!--在注解驱动中添加编码转化器--
mvc:annotation-drivenmvc:message-convertersref beanstringHttpMessageConverter/ref beanjsonConverter//mvc:message-converters
/mvc:annotation-driven