快速配置与使用
快速配置
- web工程一个,导入jar或者maven引入依赖。略
- 在web.xml中配置前端控制器,ps:将mvc的DispatcherServlet(前端控制器)作为web工程的一个servlet配置,并配置拦截的url
<!-- 配置spring mvc的前端控制器 --> <servlet> <servlet-name>myspringmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定配置文件路径 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>myspringmvc</servlet-name> <!-- 1. 后缀 *.do *.action 2. /* 拦截所有 3. / 不会拦截 .jsp --> <url-pattern>/</url-pattern> </servlet-mapping>
- 配置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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!-- 自动扫描包,实现支持注解的IOC --> <context:component-scan base-package="com.zhangguo.springmvc01" /> <!-- Spring MVC不处理静态资源 --> <mvc:default-servlet-handler /> <!-- 支持mvc注解驱动 --> <mvc:annotation-driven conversionservice="conversionServiceBean"/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <!--在视图解析中我们把所有的视图都存放在/WEB-INF/目录下,这样是为了视图安全,因为这个目录客户端不能直接访问--> <property name="prefix" value="/WEB-INF/view/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> <!--注册⾃定义类型转换器--> <bean id="conversionServiceBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.lagou.edu.converter.DateConverter"> </bean> </set> </property> </bean> </beans>
- 自定义的日期转化器
public class DateConverter implements Converter<String, Date> { @Override public Date convert(String source) { // 完成字符串向⽇期的转换 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date parse = simpleDateFormat.parse(source); return parse; } catch (ParseException e) { e.printStackTrace(); } return null; } }
- 创建HelloWorld控制器
@Controller @RequestMapping("/Hello") public class HelloWorld { //ModelAndView模式,返回视图名 @RequestMapping("/Sayhi") public String SayHi(Model model) { model.addAttribute("message", "Hello Spring MVC!"); return "sayhi"; } //@RequestBody 将请求类型为JSON字符串的数据转化为处理方法的参数 //@ResponseBody 将返回数据转化为JSON字符串 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) @ResponseBody public void saveUser(@RequestBody List<User> users) { userService.batchSave(users); } }
- 创建视图
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello Spring MVC!</title> </head> <body> <h2>${message}</h2> </body> </html>
- ajax请求写法
var saveDataAry=[]; var data1={"userName":"test","address":"gz"}; var data2={"userName":"ququ","address":"gr"}; saveDataAry.push(data1); saveDataAry.push(data2); $.ajax({ type:"POST", url:"user/saveUser", dataType:"json", //将请求数据类型设置为JSON contentType:"application/json", data:JSON.stringify(saveData), success:function(data){ } });
使用
参数绑定
支持绑定的类型
- servlte原生入参:
- HttpServletRequest request,
- HttpServletResponse response,
- HttpSession session
- map类
- modelAndView
- modelMap
- map
- 8种基本类型及其包装类
- pojo(只含有1的)
- 其他类型,如Date需要自定义转化器
来源
- url @PathVariable + @RequestParam
- cookie @CookieVariable
- 请求头的参数 @RequestHeader
- 请求体
- application/x-www-form-urlencoded @RequestParam/@RequestBody
- multipart/form-data @RequestParam
- application/json @RequestBody
- text/xml @RequestBody
返回值
- 逻辑视图名
- string:逻辑视图名
- modelAndView
- json或xml数据
- 用@ResponseBody注解,会将返回值转化为json或者xml
原理
TCP/IP
分层
- 应用层:HTTP,DNS(Domain name system/域名系统),FTP
- 传输层:TCP/UDP(TCP三次握手,断开要4次握手)
- 网络层:传输线路与包 IP
- 数据链路层:硬件部分 以太网
HTTP
结构
content-type:
|Content-Type | 解释 |
|: -------- | :----- |
| text/html |html格式|
| text/plain |纯文本格式|
|text/css |CSS格式|
|text/javascript |js格式|
|image/gif |gif图片格式|
|image/jpeg |jpg图片格式|
|image/png |png图片格式|
|application/x-www-form-urlencoded |POST专用:普通的表单提交默认是通过这种方式。form表单数据被编码为key/value格式发送到服务器。|
|application/json |POST专用:用来告诉服务端消息主体是序列化后的 JSON 字符串|
|multipart/form-data |POST专用:用以支持向服务器发送二进制数据,以便可以在 POST 请求中实现文件上传等功能|
|text/xml |POST专用:发送xml数据|
跳转方式
超链接
转发
浏览器->A->B->浏览器
从定向
浏览器->A->浏览器->B->浏览器
ajax
RESTful
技术演进
- 静态网站:最简单的WEB项目,仅仅是静态网站,用超链接跳转,实现最基本的网站功能
- 缺点:静态网站对所用用户都是一样的,不能提供个性化的访问,比如用户管理等等
- 优点:访问速度快,有利于搜索
- 最简单的WEB工程
|-主目录-|-…页面文件
|-WEB-INF-|-WEB.XML
-|-…其他资源
- 动态网站
- servlet:
- servlet不善于处理前台页面
- JSP:JSP本质上一种servlet,JSP经过JSP引擎转换为对应的servlet,然后编译成字节码 .class 最后解释为机器码运行,输出HTML文件等,
- PS:JSP也称作服务器小程序是运行在服务器中的
- 单纯用JSP页面控制和页面混在一起,不利于后期维护,代码复用性低
- 发展历程:servlet->JSP->servlet+JSP
- model1:
- JSP页面负责view和controller 两种功能
- java Bean负责与数据库交互,完成业务处理
- 控制和页面混在一起,不利于后期维护,代码复用性低
- model2:(后端)MVC设计模式
- M:model java Bean负责与数据库交互,完成业务处理
- V:view JSP
- C:controller servlet
- HTML模板
- AJAX 与前端 MVC
- AJAX 最大的优点是不用重新加载全部数据,而是只要获取改动的内容即可
- 我们真正用web应用取代了web页面
- 前后端分离
- 前端负责展现:JS(jQuery,react,vue)实现业务逻辑,处理数据,发起网络请求,JavaScript 在浏览器上开发移动应用
- 后端负责数据输出:
- 唯一的联系就变成了 API 调用
- 缺点:
- 不利于SEO。搜索引擎的工作原理是访问每个网页,然后分析 HTML 中的标签和关键字并做记录。一个纯异步的网页,HTML 几乎是空壳子,而偏偏关键的数据都是动态下发的,这就影响了搜索引擎爬虫的工作过程,他们会认为该网页什么都没有,即使记录下来的也是非关键数据。
- 性能不够。从上文中 React 的示范代码可以看出,HTML 文件非常小,很快就被打开。但是页面的渲染逻辑直到 JavaScript 文件被下载后才能开始执行,这就会导致一段时间的白屏。
- Node.js全栈
- servlet:
是什么,能做什么
是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFramework 的后续产品
Spring MVC 本质可以认为是对servlet的封装,简化了我们serlvet的开发
做的事情: 1)接收请求 2)返回响应,跳转视图
处理流程
组件
- 核心的3个组件:
- HandlerMapping(处理器映射器)
- HandlerAdapter(处理器适配器)
- ViewResolver(视图解析器)
- 其他组件6个:
- HandlerExceptionResolver Handler异常处理器
- RequestToViewNameTranslator 视图名转化器
- LocaleResolver 国际化处理器
- ThemeResolver 主题处理器
- MultipartResolver 文件上传处理器
- FlashMapManager flash属性管理器
监听器,过滤器和拦截器的区别
- 监听器:servlter 监听web事件:初始化工作,特定事件
- 过滤器:Filter 可对所有资源过滤
- 拦截器:spring mvc ,不拦截静态资源,
拦截时机
hander方法之前
hander方法后,视图前
视图后,返回前端前
多个拦截器的执行顺序
spring mvc的过滤器Filter?
编码过滤器
请求方式过滤器 POST->PUT
异常处理器
注解
单个controller
所有controller