HTTP:全称 HyperText Transfer protocol 超文本传输协议,用于传输HTML等内容的应用协议,位于应用层,规定了浏览器和服务器之间如何通信,以及通信时的数据格式。
https://www.ietf.org
https://developer.mozilla.org/zh-CN
分层的目的是为了解耦。
服务端代码分三层:表现层,业务层,数据访问层。
浏览器访问服务器首先访问表现层,期待表现层返回写数据,表现层调用业务层处理逻辑,业务层处理业务的过程会调用数据库进行数据访问,最后表现层得到业务层返回的数据,返回给浏览器,整个请求结束。
MVC:是一种刚刚设计模式,将复杂的代码分为三个层次。
M:Model模型层(数据)
V:View视图层
C:Controlle控制层
MVC主要解决的是表现层的数据,当浏览器发送请求的时候发首先访问的是Controlle控制器,接受请求中的数据,然后调用业务层,将得到的数据封装到Model中,将它传送给视图层,视图层利用封装的数据形成一个HTML返回给浏览器。
Spring MVC有一个核心组件前端控制器DispatcherServlet。
添加链接描述
模板引擎生成动态HTML。模板引擎需要Model和模板文件。
1、标准表达式:页面那些数据需要被动态的数据替换
2.判断与循环:渲染数据或显示数据的时候需要检查一下这个数据是不是空值。Model给的数据可能是一个集合或者是一个数据需要循环的处理。
3.模板布局:很多页面相似,如何将一样的区域复用。
模板引擎的配置
模板引擎是默认启用缓存的,是SpringBoot的自动配置。
如果不将缓存关掉,那么将会有缓存,有缓存后修改页面时看到的内容还是缓存中的内容,因为存在延迟,但是系统上线后这个模板引擎的缓存应该开启,可以降低服务器的压力。
演示在Spring MVC如何获得请求对象的数据,响应对象的数据。
@RequestMapping("/http")
@ResponseBody
public void http(HttpServletRequest request, HttpServletResponse response) {
//获取请求数据
System.out.println(request.getMethod());
System.out.println(request.getServletPath());
Enumeration<String> enumeration =request.getHeaderNames();
while(enumeration.hasMoreElements()){
String name=enumeration.nextElement();
String value=request.getHeader(name);
System.out.println(name+":"+value);
}
System.out.println(request.getParameter("code"));
//返回响应数据
response.setContentType("text/html;charset=utf-8");
try (
PrintWriter writer=response.getWriter();
){
// PrintWriter writer=response.getWriter();
//打印
writer.write("牛客网
");
} catch (IOException e) {
e.printStackTrace();
}
}
演示请求数据
假如查询所有的学生,查询的路径是:student?current=1&limit=20
?后,是显示分页。当前是第几页,然后一页显示多少数据。
@RequestMapping通过参数path声明请求的路径,method声明请求的方法。
当没有查询路径的:student?current=1&limit=20的时候,如何处理请求参数?
通过注解@RequestParameter,注解中参数可以为name,当required=false时候是不传这个值进来。defaultValue是默认值,默认值为1。
当查询一个学生,根据Id时候的路径可以这样设置student/123
通过在@RequestMapping中的path中写入/student/{id}实现,请求方式为GET
响应@ResponseBody返回字符串
通过注解@pathVariable路径变量括号中写入名字id。
虽然请求方式有很多中,但是get和post就可以了。
Post请求:当浏览器向服务器提交数据的时候如何获取参数。
首先浏览器先打开一个带有表单的网页。
在templates中存放的是动态的模板,在static中存放静态的网页,图片,css文件,js文件。
http://localhost:8080/community/html/teacher
GET请求传参是在明面上的,路径是带参数的,但是路径有长度,所以提交数据的时候不用GET请求。
如何向浏览器动态的响应一个HTML
返回的类型ModelAndView ,所有主键都是有前端控制器调度,前端控制器会掉Controller的某一个方法,方法需要返回Model数据,也需要返回视图相关的数据,交给模板引擎,所以数据中有Model数据和view数据两份。
动态加入数据后,还需要设置一个模板,模板的路径和名字。
第一个文本显示姓名,第二个文本显示年龄。
th:是thymeleaf 变量名name、age,是从model中取出来的。这是Thymeleaf的语法。
Model对象添加通过addAttribute()方法。ModelAndView更直观,将Model和View直接都装入到一个对象中。我们将Model对象直接的装入到Model model的参数中。
当前网页不刷新,但是悄悄刷新了一次,这就叫做异步请求。所以本次结果不是一个HTML。
响应JSON数据(异步请求)
Java对象返回浏览器,浏览器解析这个对象用的是js,js也是面向对象语言,故将java对象通过使用JSON实现两者的兼容转成JS对象,java对象转换成JSON字符创给浏览器传给JS对象。