1.MVC和三层架构
(1)MVC:
-
Model:指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。
-
View:负责提供页面为用户展示数据,提供相应的表单用于用户的请求,并在点击按钮时候向控制器发出请求来请求模型进行更新。
-
Controller:用来接收用户提交的请求,然后获取请求中的数据,然后调用业务模型相应的业务方法进行更新,同时根据业务执行结果来选择要返回的视图。
(2)三层架构:
- 表现层:负责接收前端传递过来的数据,然后传递给业务层
- 业务层:负责业务逻辑处理
- 持久层:负责连接数据库、操作数据库中表
2.Mybatis
什么是Mybatis?
Mybatis是持久层的框架,用于简化JDBC操作
参数占位符
- #{}:会将其替换为?,防止SQL注入
- ${}:拼sql,会存在SQL注入问题
- 二者使用场景: 参数传递的时候使用:#{}; 表名或者列名不固定的情况下,使用:${};
注意:Mybatis框架不会默认开启提交事务,所以需要手动设置,设置方法如下:
- openSession():默认开启事务,进行增删改查操作后需要使用sqlSession.commit();手动提交事务
- openSession(true):可以设置为自动提交事务(关闭事务)
3.B/S架构
概念:Browser/Server,浏览器/服务器 架构模式。
思路:客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端,浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。
4.javaWeb词汇理解
- 静态资源:HTML、CSS、JavaScript、图片等。所有人访问都是一样的页面
- 动态资源:Servlet、JSP等。
- HTTP协议:规定了浏览器和服务器之间数据传输的规则。特点:每次请求-响应都是独立的。多次请求不能共享数据。Java中使用会话技术(Cookie、Session)来解决这个问题。
- web服务器:负责解析HTTP协议、解析请求数据,并发送响应数据。将Web项目部署到服务器中,对外提供网上浏览服务
5.HTTP请求数据格式
请求数据分为3部分
- 请求行:请求数据的第一行。
- 请求头:第二行开始,格式为key:value形式
- 请求体:POST请求的最后一部分,存放请求参数
get和post请求方式区别
- GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
- GET请求请求参数大小有限制,POST没有
6.HTTP响应数据格式
响应数据分为3部分
- 响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200代表响应状态码,OK表示状态码描述
- 响应头:第二行开始,格式为key:value形式
- 响应体:最后一部分。存放响应数据
响应状态码
7.Servlet详解
1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象。通过设置loadOnStartup = 1该参数的值可以设置Servlet对象被创建的时间
- 负整数:第一次被访问时创建Servlet对象
- 0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高
以上注意:加载谁?实例化谁?——加载Servlet类。实例化Servlet的对象
2.初始化
在Servlet实例化之后,容器(web服务器)将调用Servlet的init()初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
3.请求处理
每次请求对应路径的Servlet时,容器(web服务器)都会调用Servlet的service()方法对请求进行处理
4.服务终止
当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
8.Request(获取请求数据)
(1)基本继承体系
- ServletRequest —— Java提供的请求对象根接口
- HttpServletRequest —— Java提供的对Http协议封装的请求对象接口
(2)获取请求参数
String[] getParameterValues(String name)根据名称获取参数值,结果为数组
String getParameter(String name)根据名称获取参数值,结果为单个值
(3)乱码问题
- 原因:浏览器编码方式为UTF-8,而tomcat解码的默认字符集是ISO-8859-1
- 解决方法:
1.先对乱码数据进行编码:转为字节数组
2.字节数组解码
byte[] bytes = userName.getBytes(StandardCharsets.IOS_8859_1);
userName = new String(bytes, StandardCharsets.UTF_8);
9.Response(设置响应数据)
(1)基本继承体系
- ServletResponse—— Java提供的请求对象根接口
- HttpServletResponse —— Java提供的对Http协议封装的请求对象接口
(2)响应数据
- 响应行
- 响应头
- 响应体
(3)重定向
- 代码如下:
resp.sendRedirect("重定向资源路径")
- 特点:
- 浏览器地址栏路径发生变化
- 可以重定向到任意位置的资源(服务器内部、外部均可)
- 两次请求,不能在多个资源使用request共享数据
10.请求转发(实现服务器内部资源共享)
- 代码如下:
req.getRequestDispatcher("转发资源路径").forward(req.resp);
- 特点:
- 浏览器地址栏路径不发生变化,一次请求
- 只能转发到当前服务器的内部资源
11.会话跟踪技术
(1)为什么要用会话跟踪技术?
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
(2)什么是会话?
在浏览器中,访问web服务器的资源,会话就此建立,直到有一方断开连接,该会话结束。(一次会话中可以包含多次请求和响应)
(3)服务端会话跟踪技术:Session
- 服务端会话跟踪技术:将数据保存到服务端
- session快速入门:
HttpSession session = request.getSession();//获取Session对象
void setAttribute(String name, Object o)//存储数据到session域中
Object getAttribute(String name)//根据key,获取值
void removeAttribute(String name)//根据key,删除该键值对
- session原理:基于Cookie实现
- session钝化、活化:
问题引入:
服务器重启后,Session中的数据是否还在?
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
- Session销毁(默认情况下,无操作,30分钟自动销毁,可在web.xml中配置)
调用Session对象的invalidate()方法即可自我销毁
(4)客户端会话跟踪技术:Cookie
- 思路:客户端会话技术,将数据保存在客户端,以后每次请求都携带Cookie数据进行访问
- cookie快速入门:
Cookie cookie = new Cookie("key", "value");//创建cookie
response.addCookie(cookie);//发送Cookie到客户端
Cookie[] cookies = request.getCookies();//获取客户端携带的所有Cookie
cookie.getName();
cookie.getValue();//使用Cookie对象方法获取数据
- Cookie原理:通过response对象添加响应头set-cookie ,当浏览器再次请求服务器时会在resquest请求头中携带cookie
- Cookie存活时间设置
setMaxAge(int seconds)//正数:到时间销毁 负数:当浏览器关闭,则Cookie被销毁 零:删除对应Cookie
12.Cookie和Session总结
(1)共同目的:
Cookie和Session都是为了完成一次会话内多次请求间数据共享
(2)二者区别:
- 安全性:Cookie不安全,Session安全
- 存储时间:Cookie可以长期存储,Session默认30分钟
- 存储位置:Cookie实践爱那个数据存储在客户端,Session将数据存储在服务端