导图社区 Java Web后端技术
主要介绍Java Web后端相关技术,包括tomcat、HTTP协议、Cookie和Session、Servlet、filter、Web架构等知识,包含11个子页面。
编辑于2020-09-26 10:41:38Java Web后端技术
Tomcat
任务1
HTTP协议
任务2
Cookie和Session
任务4
web三大组件
Servlet(控制器)
任务3
filter(过滤器)
listener(监听器)
任务5
web架构
任务6
Tomcat
Web基础知识
Tomcat服务器
Tomcat服务器
介绍
Apache组织开源免费的web服务器
支持JavaEE规范
下载
https://tomcat.apache.org/download-80.cgi
重点目录
bin
启动和停止命令
启动
startup.bat
关闭
Ctrl+C两次
conf
配置文件
乱码问题
conf目录下的logging.properties可以设置编码,默认是UTF-8,修改为GBK解决中文乱码问题。
webapps
发布自己的网站的目录
IDEA中的使用
项目部署方式
webapps部署
最简单
直接放在webapps目录下
一般在开发完毕后使用
server.xml部署
了解
在tomcat/conf/server.xml中
配置context标签
独立xml部署
主要使用
开发时使用
tomcat/conf/Catalina/localhost目录下创建xml文件
添加context标签
Web基础知识
软件架构
B/S架构
C/S架构
资源分类
静态资源
html
css
js
动态资源
jsp
aspx
php
URL
协议
://
域名
:
端口号
/
资源位置
?
参数=值
Web服务器
Tomcat
Jetty
JBoss
Glass Fish
WebLogic
WebSphere
收费
HTTP协议
任务2
介绍
基础协议
TCP协议
默认端口
80
模式
请求/响应模式
请求/响应成对
无状态协议
多次请求之间相互独立
不能交互数据
可以通过域、session、cookie来实现数据交互
请求报文
请求行
请求方式
get
post
资源路径
协议/版本
请求头
HTTP协议类型
编码
内容长度
referer
告知服务器请求的来源
cookie
User-Agent
浏览器与操作系统信息
......
键值对的形式
空行
请求体
表单数据
键值对形式
post请求才有请求体
响应报文
响应行
协议/版本
状态码
200
请求成功
302
请求重定向
304
请求资源没有改变,访问本地缓存
404
请求资源不存在
500
服务器内部错误
状态码描述
响应头
Location
Content-Disposition
Set-Cookie
Refresh
......
空行
响应体
浏览器发给服务器的正文
Servlet(控制器)
任务3
介绍
含义
Servelet = server + applet
运行在服务器端的Java程序
作用
接收请求
处理逻辑
响应结果
快速入门
步骤
创建web项目
编写普通java类,实现servlet接口
在web.xml配置url-pattern
部署web项目
启动测试
原理
servlet生命周期
创建
init方法
默认
第一次请求
修改
可以在web.xml中配置为Tomcat启动时就创建servlet实例
运行
service方法
之后每一次请求都只会执行这个方法
不会再创建新的servlet实例
单实例多线程
销毁
destroy方法
服务器关闭
servlet被移除
Servlet的体系结构
Servlet
顶级接口
提供了五个抽象方法
GenericServlet
抽象类
重写了绝大多数方法
开发者只需要重写service方法即可
HttpServlet
抽象类
用来处理HTTP协议的各种请求方式
url-pattern的配置方式
精确匹配
目录匹配
后缀匹配
Request对象
含义
域对象
用来存储HTTP请求信息
使用
获取请求行
获取请求方式
String getMethod()
获取虚拟路径
String getContextPath()
获取URL
StringBuffer getRequestURL()
获取协议和版本号
String getProtocol()
获取IP地址
String getRemoteAddr()
获取请求头
根据请求头名获取值
String getHeader(String name)
获取所有请求头名
Enumeration getHeaderNames()
获取请求体
获取指定参数名的值
String getParameter(String name)
获取指定参数名的值数组
String[] getParameterValues(String name)
获取所有参数名和对应值数组
Map<String,String[]> getParameterMap()
中文乱码问题
请求转发
代码
RequestDispatcher getRequestDispatcher(String path)
void forward(ServletRequest request, ServletResponse response)
特点
浏览器:发了一次请求
地址栏:没有发生改变
只能转发到服务器内部资源,不能访问服务器外部资源
Response对象
含义
web服务器给浏览器返回的响应信息
体系结构
使用
设置响应信息
响应行
设置响应状态码
void setStatus(int sc)
响应头
设置指定头名称和对应的值
void setHeader(String name, String value)
响应体
字符输出流
PrintWriter getWriter()
字节输出流
ServletOutputStream getOutputStream()
二种类型的输出流不能同时存在,互斥
响应重定向
代码
方法一
response.setStatus(302)
Location response.setHeader("Location","重定向的地址");
方法二
response.sendRedirect("重定向网络地址");
特点
地址栏会发生改变
重定向是二次请求
不能使用request域共享数据
重定向是客户端(浏览器)行为,可以跳转到服务器外部资源
与请求转发的区别
对象
请求转发
request
重定向
response
请求次数
请求转发
一次
地址栏没有改变
重定向
两次
地址栏发生改变
发生位置
请求转发
服务器
重定向
浏览器
响应中文
中文乱码原因
浏览器解码方式
GBK
服务器编码方式
ISO-8859-1
解决方法
方式一
将服务器编码方式设置为GBK
resp.setCharacterEncoding("GBK");
方式二
统一浏览器和服务器的编解码方式
resp.setContentType("text/html;charset=utf-8");
ServletContext
介绍
域对象
作用
共享数据
获取资源在服务器的真实地址
获取全局配置参数
获取文件MIME类型
使用
获取ServletContext对象
ServletContext sc = request.getServletContext();
ServletContext sc = this.getServletContext();
获取文件真实路径
String getRealPath(String path);
获取全局的配置参数
request.getServletContext().getInitParameter("encode");
获取文件MIME类型
req.getServletContext().getMimeType(filename)
域对象
通用方法
设置数据
void setAttribute(String name, Object o)
获取数据
Object getAttribute(String name)
删除数据
void removeAttribute(String name)
使用场景
request
一次查询结果
session
存放当前会话的私有数据
用户登录状态
验证码
购物车
servletContext
若需要所有的servlet都能访问到,才使用这个域对象
使用原则
能用小的不用大的
生命周期
ServletContext域对象
创建
服务器启动、项目加载
销毁
服务器关闭或项目卸载
作用范围
整个web项目
HttpSession域对象
创建
第一次调用request.getSession()方法
销毁
服务器非正常关闭
未活跃状态30分钟
自杀
作用范围
一次会话中
HttpServletRequest域对象
创建
用户发送请求
销毁
服务器做出响应后
作用范围
一次请求中
Cookie和Session
任务4
会话
一次会话包含多次请求
会话技术
存储浏览器和服务器之间的通信数据的
客户端的
cookie
服务器端的
session
Session
介绍
HttpSession
域对象
在一次会话的多次请求之间共享数据,将数据保存到服务器端
生命周期
创建
用户第一次调用request.getSession()方法时创建
不是创建会话时就创建
销毁
服务器非正常关闭
如果是正常关闭,会序列化后存储,而不是销毁
过期
非活跃状态30分钟后:即浏览器完全不操作页面
自杀
session.invalidate();
原理
第一次请求没有携带JSESSIONID
会创建session对象
生成编号并返回
后面的请求携带JSESSIONID
根据ID查找session对象
使用
API
将数据存储到session中
HttpSession session = request.getSession();
session.setAttribute("username","哈哈,呵呵");
从session中获取数据
HttpSession session = request.getSession();
session.getAttribute("username");
Cookie
介绍
在一次会话的多次请求之间共享数据,将数据保存到客户端
特点
cookie存储数据都在客户端(浏览器)
cookie的存储数据只能是字符串
cookie单个大小不能超过4KB
cookie存储的数据不太安全
只能保存字符串信息
原理
服务器端调用addCookie函数
会在响应头中加入Set-Cookie字段
浏览器拿到后将cookie数据保存到本地
请求时将cookie信息发给服务器
服务器通过getCookies方法得到数据
使用
API
创建cookie
Cookie cookie = new Cookie(String name,String value);
添加信息
response.addCookie(cookie);
获取信息
Cookie[] cookies = request.getCookies();
存储中文
tomcat8之前的版本,不支持中文
编码
String product = "中文";
product= URLEncoder.encode(product, "UTF-8");
Cookie cookie = new Cookie("product", product);
解码
String value = c.getValue();
value = URLDecoder.decode(value,"UTF-8");
tomcat8以后的版本,支持中文
cookie保存时间
默认
浏览器关闭/会话结束
cookie销毁
修改
设置cookie存活时间
cookie.setMaxAge(int second); 单位秒
正数
指定存活时间,持久化浏览器的磁盘中,到期后自动销毁
负数
默认浏览器关闭,cookie销毁
零
立即销毁(自杀)
filter(过滤器)
介绍
拦截特定的请求
完成一些通用操作
场景
登陆验证
统一编码处理
敏感字符过滤
使用
步骤
1. 编写java类继承Filter接口
在这个类中定义拦截的规则
2. 配置web.xml文件
设置要拦截的是对哪一个servlet的请求
拦截路径
精准匹配
/targetServlet
目录匹配
/usere/*
后缀匹配
*.html
匹配所有
/*
过滤器链
1.用户发送请求
2.FilterA拦截,放行
3.FilterB拦截,放行
4.执行目标资源 show.jsp
5.FilterB增强响应
6.FilterA增强响应
7.封装响应消息格式,返回到浏览器
原理
生命周期
创建
服务器启动项目加载
先于servlet
运行
用户访问被拦截目标资源时
销毁
服务器关闭项目卸载时
listener(监听器)
介绍
监听对象发生变化
执行相应的操作
使用
步骤
创建一个类实现监听器接口
实现contextInitialized和contextDestroyed方法。
给这个类在xml中配置
监听三大域对象
HttpSessionListener
监听Httpsession域
ServletRequestListener
监听ServletRequest域
ServletContextListener
监听ServletContext域
web架构
任务6
MVC模式
M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)
V:view(视图) Jsp(展示数据)
C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)
三层架构
表示(现)层:又称为web层,与浏览器进行数据交互(控制器和视图)
业务逻辑层:又称为service层,处理业务数据(if判断,for循环)
数据访问(持久)层:又称为dao层(database access object),与数据库进行交互的(每一条(行)记录与javaBean实体对应)
包目录结构
com.lagou 基本包(公司域名倒写)
com.lagou.dao 持久层
com.lagou.service 业务层
com.lagou.web 表示层
com.lagou.domain 实体(JavaBean)
com.lagou.util 工具