web开发,springMVC1

    科技2022-07-16  113

    web开发的几种常见的模式:

    同步开发:每次请求客户端发起url,服务端解析并渲染页面(jsp),输出流把渲染的静态html返回客户端。

    半分离的异步开发:

    前端html代码与后端java代码仍然在一个项目中,一起部署到tomcat,用户先请求tomcat获取html页,客户端拿到html后,再发起ajax异步请求获取数据,客户端拿到数据后再通过前端技术来渲染动态html页(DOM操作)。

    全分离异步开发(前后端分离):

    用户先请求nginx获取html页,再发起针对tomcat服务器的异步请求,拿到数据,客户端动态渲染页面。

    前端html代码独立项目,独立部署nginx静态服务器;

    后端java代码独立项目,独立部署tomcat动态服务器(处理数据);

    http协议:

    请求头:content-type:application/x-www-form-urlencoded:前端数据格式key=value&key=value

    ​ content-type:application/json:前端数据格式:{key:value,key:value,key:value}

    ​ content-type:multipart-formdata:文件上传场景:字节流

    ​ http-method:请求方法:get、post、put、delete,options

    ​ use-agent:客户端信息(浏览器,移动端)

    响应头:content-type:text/html

    ​ application/json

    ​ ​

    第二阶段的servlet中request.getParameter()不能获取json数据,只能获取key=value&key=value

    ​ request.getInputStream(),读取输入流中的数据为String,后端得到json字符串,再通过fastjson或gson组件把json字符串转对象。

    1.springmvc作用

    springMVC的spring框架中的一个子框架,是web模块中的一个小组件。

    对servlet进行封装,解决servlet开发中繁琐的代码。

    一个servlet只能够处理一件事情;

    繁琐的getParameter,繁琐的转型;

    返回json数据麻烦。response.getWriter().print(JSON.toJsonString(Object obj));

    2.搭建springMVC环境

    引入spring核心jar,引入spring-web核心jar(spring-web;spring-webMVC),引入springMVC内部依赖的json组件包jackson(三个:core;databind;annotation)创建springMVC的xml配置文件. <context:component-scan base-package="com.javasm"></context:component-scan> <!--开启mvc注解识别:@RequestMapping,@GetMapping,@PostMapping,@PutMaping,@DateTimeFormated.@RequestBody,@RequestParam,@ResponseBody--> <!--@JSONFormated--> <mvc:annotation-driven></mvc:annotation-driven> <!--jsp视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/page/"></property> <property name="suffix" value=".jsp"></property> </bean>

    在web.xml配置springmvc的前端控制器DispatcherServlet。

    两个作用:tomcat启动时加载spring的xml文件初始化容器;

    ​ 用户请求时,解析请求url,根据url去springmvc容器中找到对应的处理器对象。

    写springmvc风格的控制层对象controller(处理器对象)

    3.springMVC执行流程

    tomcat启动:DispatcherServlet加载springmvc.xml,初始化XmlWebApplicationContext容器对象;

    解析@Controller注解的类里面的@RequestMapping注解,进行url映射(url字符串/hm–>HandlerMethod)

    Map<String,HandlerMethod>.put("/hm",hellomvc).put(“login”,loginpage)

    用户请求:

    dispatcherServlet接收请求,解析url字符串(/hm或/login),RequestMappingHandlerMapping查找处理器方法,把找到的方法返回dispatcherServlet在dispatcherServlet中,调用RequestMappingHandlerAdapter对象执行处理器方法,获取前端参数,解析封装,调用处理器方法,调用service,调用doa,得到方法的返回值,把返回值返回给dispatcherServlet;在dispatcherServlet中,调用视图解析器InternalResourceViewResolver得到视图路径。后端进行页面渲染,返回给前端。

    4.接收前端参数

    接收key=value&key=value格式的参数,content-type:application/x-www-form-urlencoded

    加形参,底层通过反射,获取处理器方法的形参数组,根据形参名去getParameter获取数据。

    可以通过@DateTimeFormated指定日期格式

    可以通过@RequestParam注解指定参数默认值,该注解只能用在简单类型上,获取key=value数据.

    接收前端{key:value,key:value}json格式的参数,即请求头content-type:application/json

    处理器方法的形参加注解@RequestBody注解

    5.同步开发中返回数据给前端

    同步开发中:(服务器端渲染视图)request.setAttribute(key,value),在jsp页jstl+el。

    ​ springMVC中使用Model或者ModelAndView对象来把数据传输到视图层。

    6.异步请求返回json数据给前端

    springMVC内部使用的jackson进行json处理。

    在处理器方法上加@ResponseBody注解,springMVC对方法返回值走json转换器(MappingJackson2HttpMessageConverter)进行转json字符串处理器方法的返回值类型改为ResponseEntity对象. ResponseEntity.ok(数据)new ResponseEntity(数据,响应头,状态码)主要用在下载,刷新token

    7.如何限定请求方法:

    在RequestMapping注解进行url映射时,通过注解的属性method限定请求方法 @RequestMapping(path = "add",method = RequestMethod.POST) 使用GetMapping,PostMapping,PutMapping,DeleteMapping进行url映射 @PostMapping("add")

    8.乱码解决

    get:tomcat8及以上版本不需要在server.xml中配置URIEncoding=UTF-8,useDefaultEncdoing=true。

    post:加编码过滤器,CharacterEncodingFilter

    9.项目中问题:

    如果前端表单参数属于多个实体对象.

    参数以key=value&key=value传输,后端可以直接取数据参数以json传输,不能在通过@RequestBody直接注解两个对象,需要注解到map,再通过BeanUtils来分数据到对象。

    10.如何获取servlet的核心对象

    在处理器方法的形参上添加HttpServletRequest,HttpServletResponse,HttpSession。

    如果需要获取ServletContext对象的话,通过request或session对象间接获取。

    11.springMVC的几个概念

    前端控制器(中央处理器):DispatcherServlet

    处理器映射器:RequestMappingHandlerMapping:解析带有@Controller的类中的RequestMapping注解,进行url映射注册。当用户请求时,根据url得到对应的映射的处理器方法。

    处理器适配器:RequestMappingHandlerAdapter:用来封装表单参数,执行处理器方法。

    视图解析器:ViewResolver:设置视图的公共前缀和后缀,通过返回的ModelAndView对象得到完整的视图路径。

    json转换器:Converter,MappingJackson2HttpMessageConverter,把对象转json字符串。

    12.与DateTimeFormat结合使用的JsonFormated

    通过DateTimeFormat注解把获取的日期字符串指定日期格式,转成Date对象

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")//jackson在序列化对象的时候,把日期序列化这种格式字符串,timezone = "GMT+8" private Date rdate;

    总结:

    做url映射:

    ​ @RequestMapping注解,用来做url映射,把url映射一个处理器方法上。可以限定客户端提交请求的方法。

    ​ @GetMapping,@PostMapping,@PutMapping,@DeleteMapping

    用于接收参数:

    ​ @RequestParam,针对key=value格式的参数,注解到简单类型的形参上(String,Date,包装类,基本类型),可以设置默认值。

    ​ @RequestBody,针对{key:value}json格式的参数,注解到对象类型的形参上。也可以注解到Map上。

    用于返回数据:

    ​ @ResponseBody,表示处理器方法返回值不执行视图解析器,而是执行jackson消息转换器把返回值对象转 json字符串。

    ​ ResponseEntity:处理器方法的返回值类型,灵活的设置响应体,响应头,状态码.

    ​ ResponseEntity.ok(响应体数据)

    ​ new ResponseEntity(Obejct,HttpHeaders,HttpStatus)

    其他:

    ApplicationContext

    ​ WebApplicationContext

    转发与重定向

    restUrl

    Processed: 0.014, SQL: 8