Servlet 是 Java 语言官方推出一个 web 容器,是用来构建web应用程序的框架
Servlet 编写的代码是需要运行在web服务器上的, 不能通过main方法进行调用
tomcat: 是一个非常轻量级的服务器、通常用来部署java的中小型web应用型,普通被企业认可
jboss : 是一个商用的 web应用服务器,主要应用与大型java应用程序
weblogic : 是Oracle提供的基于java的web应用服务器、支持大型的java应用程序、多用于银行、政府项目
apache : 是一个开源的优秀的web服务器,不能直接部署java服务,主要可以做 web代理服务器来使用
IIS : 是微软提供的一个基于 .net 的 web服务器
Tomcat 官方下载解压后的目录结构
apache-tomcat-9.X
bin : 内置了tomcat的一些命令
conf : 内置了tomcat 的配置文件
lib: 存放tomcat 需要的第三方库依赖库
logs : 存放tomcat 运行产生的日志(通过分析日期、可以解决项目中的问题)
temp : 存放系统运行产生的临时文件
webapps : 存放多个java web项目, 用来做项目部署
work : web应用程序在运行过程中jsp转换后的java字节码文件
tomcat 端口号默认是 8080
配置文件是 conf/server.xml
URIEncoding="UTF-8"是解决WEB服务器在进行GET请求传入中文参数乱码的、在Tomcat8之后的版本可以不在设置
org.apache.tomcat
tomcat-servlet-api
9.0.65
编写一个 java 类 、继承 HttpServlet
重写 HttpServlet 中的 service 方法
在 类上使用 @WebServlet 设置请求路径
可以给 Servlet 初始化一些数据、如果想让 init 在 tomcat 启动完成后就执行, 那么需要在该Servlet添加一个配置
@WebServlet(value = “/xxx”, loadOnStartup = 1) , loadOnStartup默认值 -1
service() : 提供服务的方法,每次请求 都会被 执行的代码
doXxx() : (doGet, doPost, doPut, doDelete) : 和请求方式相关的方法、如果是 get 请求,则会在调用service之后,自动调用 doGet
destroy() : 销毁, 当销毁(web服务关闭的时候)servlet对象的时候,会执行的代码,只会被执行一次
浏览器 -> 服务器 封装的 对象 就被称为 请求对象
请求对象 通常可以用来 获取 从浏览器 携带的 信息
如果 传入 key ,则 返回一个 字符串, 如果没有传 key, 则返回 null
如果 key 传入了多个,只会获取到第一个值
getParameterValues(String key) : 根据请求参数的名、获取请求参数值(多值)
request.getParameterNames() : 获取所有的请求参数名,返回一个枚举对象 (了解)
request.getParameterMap() : 获取所有的请求参数,返回一个 Map
request.setCharacterEncoding("UTF-8")
-Dfile.encoding=UTF-8
response.setCharacterEncoding("UTF-8")
// 响应 网页 乱码解决方案
response.setContentType("text/html;charset=UTF-8");
// 响应 JSON 乱码解决访问
response.setContentType("application/json;charset=utf-8");
<%@page pageEncoding="UTF-8" contentType="text/html; utf-8" %>
request.getReqeustDispatcher(urlpattern).forward(request, response);
整个跳转是 1 次请求
地址栏的地址不会发生变化(从请求开始的地址 — > 响应的结束地址 地址没有发生改变)
可以通过 request 向页面传递 数据 request.setAttribute(key ,val)
可以在跳转的页面中,通过 request.getAttribute(key) 来获取数据
request 只能在 自身服务器提供的 服务中 进行跳转
转发到的请求 和 原请求的 请求方式 是一致的
jsp页面通常不允许直接访问,转发的操作通常推荐跳转到jsp页面中
response.sendRedirect(requestURI|URL);
整个跳转是 2次 请求
地址栏的地址发生了变化(从请求开始的地址 — > 响应的结束地址 地址没有发生改变)
不能通过 request 向页面传递数据
可以跳转到任意的网址
重定向的请求地址 一定是采用 GET 请求访问的
在 web开发中,通常不允许用户直接访问到 jsp 页面,1.会暴露网站的开发技术、2.经过转发可以携带数据,更方便网页的展示、3.路径更优雅
WEB-INF 是一个非常特殊的目录、该目录下存储的所有内容不能直接访问,但可以通过转发来获取
可以进行数据存储
数据的格式是键值对格式的数据,键是字符串格式、值是任意数据类型
可以在JSP页面中获取对应的数据
setAttribute(key, val) : 用来存储数据
getAttribute(key) : 获取存储的数据
removeAttribute(key) : 移除存储的数据
request.getSession() ;
request.getSession().getServletContext()
存储在request作用域中的数据 只能在同一个请求中才能够使用,会随请求的结束而销毁
存储在session作用域中的数据 当 session没有过期(默认30分钟) 或者 浏览器没有关闭 的时候,可以在任何位置使用,可以跨请求传递数据
session是基于用户(浏览器) 的、所以存储在session中的数据在不同用户间是隔离的
存储在application作用域中数据 整个 web应用程序都可以访问和使用、会随web应用程序的关闭而销毁。
Cookie : 是存储在浏览器中的一段字符串、Cookie可以用来做登录的标识 , Cookie是基于浏览器的技术
Session : 是存储服务器中的数据的、也是用来存储登录的标识、Session是基于服务器的技术
当用户访问session的时候、服务器会获取浏览器中的Cookie信息找到一个 Cookie的键为 jsessionid 的Cookie
如果找不到 jsessionid 对应的Cookie , 那么 服务器 会创建一个 Session对象,并将 session对象的唯一标记ID 存储到 浏览器的Cookie中
键是 jsessionid , 值 为 session的唯一标记ID
如果找到了jsessionid对应的Cookie, 则 获取 对应的 Cookie value值(session的ID) , 并根据 value 值 从 SessionStore 容器中,获取管理的
session对象, 并返回 session对象
如果浏览器禁用了Cookie、 那么要使用session的时候,需要在地址上拼接一个 ;jsessionid=XXXXXXXXXXXXXXXXXXX
<% … %> : 可以编写 java 代码,支持多行代码, 每行代码必须以 ; 结尾
<%= … %> : 输出结果、= 后面只能写 java 表达式 、且 不用使用 ;
结果
on对象, 并返回 session对象
如果浏览器禁用了Cookie、 那么要使用session的时候,需要在地址上拼接一个 ;jsessionid=XXXXXXXXXXXXXXXXXXX
<% … %> : 可以编写 java 代码,支持多行代码, 每行代码必须以 ; 结尾
<%= … %> : 输出结果、= 后面只能写 java 表达式 、且 不用使用 ;
结果
<%! … %> : 用来定义 内部类 、 成员变量和方法