javaweb
[http]
定义: 超文本传输协议 ,规定了web客户端与服务器之间如何通信,
响应格式
-
HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Wed, 20 Oct 2021 06:46:15 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-Length: 737265 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <link rel="icon" href="../../favicon.ico"> <title> 吉首大学 </title> -
状态行
Http版本状态码状态信息
HTTP/1.1 200 ok -
响应头部
-
服务器环境信息响应体大小服务器支持的压缩类型 -
常见的响应头包括Content-Type、Content-Length、Server、Set-Cookie等
-
3xx 状态码重定向,要用到location属性
-
HTTP/1.1 301 Moved Permanently Location: https://www.example.com/new-page
-
-
-
Date: Wed, 18 Apr 2024 12:00:00 GMT Server: Apache/2.4.1 (Unix) Last-Modified: Wed, 18 Apr 2024 11:00:00 GMT Content-Length: 12345 Content-Type: text/html; charset=UTF-8
-
-
空行
请求头和请求体之间的分隔符,表示请求头的结束。
-
响应体
包含服务器返回的数据,如请求的网页内容、图片、JSON数据等
请求报文
-
GET http://jsuacm.cn/ HTTP/1.1 Host: jsuacm.cn Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 //”请求数据”(GET方式的请求一般不包含)Accept-Encoding 头字段可以使用gzip 和compress这两种最常见的数据编码格式。
-
请求行
- 请求方法、请求URI和HTTP版本
-
请求头
- 客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等
-
空行
- 请求头和请求体之间的分隔符,表示请求头的结束
-
请求数据
请求体包含要发送给服务器的数据。
GET http://jsuacm.cn/ HTTP/1.1
Host: jsuacm.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
//”请求数据”(GET方式的请求一般不包含)
[web前端速成]
基本概念
- url : 统一资源定位符
标签
-
charset 编码格式
-
name
-
http-equiv http头信息
-
align 对齐方式
-
<meta http-equiv="default-style" content="the document's preferred stylesheet"><link>
-
-
<link rel="stylesheet" type="text/css" href="theme.css">
-
-
<a> -
<body> -
<table>表格标题- border属性 设置表格的边框
-
<tr>table 表头,即最上方一行的属性名-
定义表格的一行,必须嵌套在
的标签内 -
<th>表头单元格 在 中
-
<td>table data 数据资料
- 定义表格中的标准单元格,在
标签内able>
-
<caption>定义表格标题 -
<label>标签 -
<input>输入设置 -
<option下拉列表选项 -
<select>下拉列表的选择 -
action指定提交表单时要执行的操作,即表单数据发送的URL. -
Target规定提交表单后在何处显示响应 -
Method指定提交表单数据时要使用的HTTP方法-
<form action="/action_page.php" method="get"></form> <form action="/action_page.php" method="post"></form>
-
-
Enctyoe规定在将表单数据发送到服务器之前如何对其进行编码 旨在method="post"时使用<form enctype="multipart/form-data"></form> -
autocomplete设定表单是否打开自动完成功能.<form action="/action_page.php" autocomplete="on"></form> -
novalidate规定提交表单时不对表单数据进行验证<form action="/action_page.php" novalidate></form> -
name设置表单名称 -
& nbsp
-
Form表单
用户名:
密码:
性别: 男 女
订阅推送信息
空格
注释
对文字字体设置
<font face="宋体" size="20px" color="Red"> </font>文字修饰符
加粗
着重文字
斜体字
小号字
加重
下标字 上标字 插入子字删除字标题
align 对其方式
这是一个一级标题
段落
Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。
ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
[javascript]
函数定义
-
函数声明
-
function myFunction(a, b) { return a * b; }
-
-
函数表达式
-
var x = function(a, b) { return a * b; };
-
-
普通定义
-
function functionName(parameters) { 执行的代码 }
-
-
Function构造函数
-
var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3);
-
-
函数可以作为值使用
-
function mf(a,b){ return a*b; } var x = mf(4,3);
-
-
函数提升
-
自调用函数
-
(function() { var x = "Hello!!"; // I will invoke myself })();(普通函数定义)();
-
Cookie
-
服务器向的客户端发送cookie时,会在http响应头字段中加入Set-Cookie响应头字段
-
Cookie 的 domain 属性是用来指定浏览器访问的域 , 不严格区分大小写
path属性
限制 Cookie 的作用范围:
只有请求路径匹配或包含path时,浏览器才会携带该 Cookie 发送给服务器。setMaxAge(int expiry)是Cookie类的方法,用于设置 Cookie 的最大存活时间(单位:秒)。不同参数值的含义如下:
-
参数值 行为 > 0Cookie 存活指定秒数(如 setMaxAge(60)表示 1 分钟后过期)。= 0立即删除 Cookie(浏览器收到后会移除该 Cookie)。 < 0Cookie 成为会话 Cookie(默认行为),浏览器关闭时自动删除。 -
-
Session 相对于 Cookie 具有更高的安全性,它将关键数据保存在服务器端端。
-
Session 是一种将会话数据保存到服务器端的技术,需要借助Cookie技术来实现。
-
Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。
-
用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。
-
ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
-
对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。 ————————————————
- servlet的会话数据保存在Session和Cookie对象中
- invalidate()方法,该方法可以强制使Session对象失效,具体用法如下所示:
-
设置失效时间
-
web.xml
默认时间单位是分钟
-
servlet中手动设置
-
<Tomcat安装目录>\conf\web.xml文件中,如下配置片段 -
-
- 转发的地址栏是初次发出请求的地址
- 转发只能在当前 WEB 应用内部转发
- 在最终的 Servlet 中,request 对象和中转的 request 是同一对象,原有 request 对象属性不变
- 转发过程中,在方法中使用的 " / " 代表当前 WEB 应用的根目录
- 重定向的地址栏不是初次发出的请求地址,而是最后响应的地址
- 重定向可以跨 WEB 应用、服务器重新定位资源
- 在最终的 Servlet 中,request 对象和中转的 request 不是同一对象,原有 request 对象属性全部失效,开始新的 request 对象
- 重定向过程中,在方法中使用的 " / " 代表当前 WEB 站点的根目录
- 客户端发送请求,Servlet1 做出处理
- Servlet1 调用 forward() 方法,将请求转发给 Servlet2 来处理请求,为客户端服务
- Servlet2 对客户端浏览器做出响应
- 客户端发送请求,Servlet1 做出处理
- Servlet1 调用 sendReadirect() 方法,将客户端的请求重新定位到 Servlet2
- 客户端浏览器访问 Servlet2
- Servlet2 对客户端浏览器做出响应
-
Tomcat 容器中会话的有效时间可以在web.xml文件中设置,默认会话过期时间为30分 钟。
-
默认会话时间是30分钟
-
request(HttpServletRequest)、response(HttpServletResponse) -
session(HttpSession)、application(ServletContext) -
out(JspWriter,用于输出 , 向客户端发送文本形式实体内容)、pageContext(当前页面作用域) -
翻译阶段:JSP文件 → Servlet源码(
.java)。 -
编译阶段:Servlet源码 → 字节码(
.class)。 -
执行阶段:服务器加载编译后的类,处理请求并返回响应。
Session(会话)
是指一个客户端(浏览器)与服务器之间连续发生的一系列请求和响应过程
[servelet(GenericServlet 和 HttpServlet)]
零. 工作原理
一 .HttpServlet
servelet是运行在web服务器或者应用服务器上的java程序,是一个中间层 ,负责链接来自web浏览器或者其他HTTP客户程序和 {HTTP服务器} 上的应用程序
HttpServlet是写Servlet代码创建类是需要继承的类
二.HttpServletRequest
Tomcat会把收到的HTTP请求按照Http协议格式解析成一个HttpRequest 对象
打印请求信息
public class RequestDemo1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws
ServleteException,IOException{
//指定响应的数据格式以及使用的字符集
resp.setContentType("text/html;charset=utf-8"
);
StringBuilder sb = new StringBuilder();
//获取请求协议的名称和版本号
sb.append(req.getProtocol();
sb.append("<br>");//html 换行
//获取请求方法名称
sb.append(req.getMethod());
sb.appen("<br>");
//获取球球的URL和ContextPath
sb.append(req.getRequestURI());
sb.append("<br>");
sb.append(req.getContentPath());
sb.append("<br>");
//获取query string
sb.append(req.getQueryString();
sb.append("<br>");
//获取请求头中的键值对
Enumeration<String> headNames = req.getHeaderNames();
while (headerNames.hasMoreElements()){
//请求头中的key
String name = headerNames.nextElement();
//请求头中的value
String value = req.getHeader(name);
sb.append(name + ": "+value);
sb.append("<br>");
}
resp.getWriter().write(sb.toString());
}
}
三. HttpServletResponse
Servlet 中的 doxxx方法 会根据请求响应计算,并把响应的数据设置到HttpResponse对象中,然后Tomcat就会把这个HttpResponse 对象通过socket写回浏览器
(1)HttpServletResponse核心方法
设置浏览器每多少秒刷新一次
四.Servlet生命周期
Servlet从创建到销毁的过程
初始化阶段,运行阶段,销毁阶段

五.ServletConfig和ServletContext
ServletConfig就代表当前吧Servlet再web.xml中的配置信息.
当Servlet引擎创建一个Servlet实例对象后,调用该对象的构造函数init(ServletConfig config)方法将Servlet对象传递给Servlet
配置ServletConfig
把Servlet映射到URL地址,使用<servlet-mapping>标签进行映射,使用<servlet-name>子标签指定要映射的Servlet名称,名称要和之前在<servlet>标签下注册的相同;使用<url-pattern>子标签映射URL地址,地址前必须加“/”,否则访问不到。
<Servlet>
<Servlet-name>Demo4</Servlet-name>
<Servlet-class>com.zx.Demo4</Servlet-class>
<init-param>
<param-name>age</param-name>
<param-value>99</param-value>
</init-param>
</Servlet>
<Servlet-mapping>
<Servlet-name>Demo4</Servlet-name>
<url-pattern>/demo4</url-pattern>
</Servlet-mapping>
ServletConfig接口
ServletContext
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享
ServletContext接口
| 方法 | 功能描述 |
|---|---|
Set<String> getResourcePaths(String path) | 返回一个 Set 集合,集合中包含资源目录中子目录和文件的路径名称。参数 path 必须以正斜线 (/) 开始,指定匹配资源的部分路径。 |
String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数 path 代表资源文件的虚拟路径,它应该以正斜线 (/) 开始,/ 表示当前 Web 应用的根目录。如果 Servlet 容器不能将虚拟路径转换为文件系统的真实路径,则返回 null。 |
URL getResource(String path) | 返回映射到某个资源文件的 URL 对象。参数 path 必须以正斜线 (/) 开始,/ 表示当前 Web 应用的根目录。 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的 InputStream 输入流对象。参数 path 传递规则和 getResource() 方法完全一致。 |
例子(ServletContext)
六.会话
在Web开发中,服务器跟踪用户信息的技术称为会话技术
Cookie
Cookie是一种会话技术,可以将会话过程中的数据保存到用户的浏览器中。
|
/
当该浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确地响应
|
/
当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将用户信息以Cookie的形式发送给浏览器
CookieApi

setDomain(String pattern)方法和getDomain()方法是针对Cookie的domain属性的。domain属性用于指定浏览器访问的域。例如,传智播客的域为“itcast.cn”。设置domain属性时,其值必须以“.”开头,如domain=.itcast.cn。默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息发送给服务器(当前主机)。需要注意的是,domain属性的值不区分大小写。
Session
类似于就诊卡,只要卡号就可以查询到病例档案.当浏览器访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性
Session还具有更高的安全性,它将关键数据保存在服务器。cookie则是将数据存在客户端的浏览器中
SessionAPI
public HttpSession getSession(boolean create)//第一个
参数为true,则该HttpSession对象不存在时创建并返回新的HttpSession对象,false不创建,而是返回null。
public HttpSession getSession()//第二个
相当于上一个,不存在会创建
Session生命周期
HttpSession session = request.getSession();
session.invalidate();//注销该request的所有session
七.servlet使用方法
(1) 创建一个类实现Servlet接口,重写方法
使用IDEA,快捷键:Alt+insert,导入这5个方法)。或继承HttpServlet亦可,只需要掌握写了注释的那三个方法即可。
public class LoginServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//初始化方法
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//处理get/post请求的方法
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
//销毁的方法
}
}
(2) 在web.xml文档中配置映射关系
XML文件中配置好这个Servlet的映射关系:
<servlet>
<servlet-name>自定义名称</servlet-name> //3
<servlet-class>处理请求的类的完整路径</servlet-class> //4
</servlet>
<servlet-mapping><!-- mapping 表示映射 -->
<servlet-name>自定义名称</servlet-name> //2
<url-pattern>请求名</url-pattern> //1
</servlet-mapping>
或者使用@WebServlet配置
(3) 测试项目
启动tomcat,在浏览器输入http://localhost:8080/工程名/访问服务器的路径
(1):请求
(2):对应请求的自定义名称
(3):从自定义的名字找到要处理的类
(4):处理servlet请求的类----LoginServlet
package com.jw.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
public class LoginServlet extends HttpServlet {
static {
//传统方法加载数据库,之后会用druid连接池
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理get请求
//拒绝get请求访问,设置编码方式
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<script>alert('请通过表单进行登录');location.href='/login.html'</script>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理post请求
//设置编码
req.setCharacterEncoding("utf-8");
//获得参数
String webName = req.getParameter("username");//账号,引号引起来的是login页中的name
String password = req.getParameter("password");//密码
//连接数据库
try {
Database.createTable();
Database.insertData();
//跳转页面
if(Database.selectData(webName,password)){
req.getRequestDispatcher("/success.html").forward(req,resp);
System.out.println("成功");
}else {
req.getRequestDispatcher("/error.html").forward(req,resp);
System.out.println("失败");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
@Override
public void destroy() {
System.out.println("LoginServlet销毁");
}
@Override
public void init() throws ServletException {
System.out.println("LoginServlet初始化");
}
}
八.RequestDispatcher
RequestDispatcher 对象是由 Servlet 引擎创建的,用于封装一个要被其他资源调用的资源,如:Servlet、HTML、JSP 等,并可通过其中的方法将客户端的请求转发给所包装的资源
该接口的方法常用于请求的转发,而 ServletResponse 接口中的 sendReadirect() 方法常用于请求的重定向。
1.不同
1)forward() 转发:
2)sendReadirect() 重定向:
注:关于 WEB 应用与 WEB 站点的根目录
以 http://localhost:8080/test/ 为例,test/ 为应用的根目录,http://localhost:8080/ 为站点的根目录
2.原理
1)forward() 方法
2)sendReadirect() 方法
[Tomcat]
[JSP]
代码片段,声明标识,jsp表达式
JSP(JavaServer Pages)即Java服务器页面,是一种动态网页技术,允许在HTML中嵌入Java代码,用于创建动态Web内容。
声明标识

jsp表达式
生命周期
JSP 核心语法
(1) 脚本元素
<%-- 1. 声明(成员变量/方法) --%>
<%! int count = 0; %>
<%-- 2. 脚本片段(Java代码) --%>
<%
String name = request.getParameter("name");
out.println("Hello, " + name);
%>
<%-- 3. 表达式(输出变量值) --%>
<%= new Date().toLocaleString() %>
(2) 指令(Directives)
<%-- page指令:设置页面属性 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%-- include指令:静态包含其他文件 --%>
<%@ include file="header.jsp" %>
(3) 动作标签(Action Tags)
<%-- 动态包含 --%>
<jsp:include page="footer.jsp" />
<%-- 转发 --%>
<jsp:forward page="error.jsp" />
(4) 隐含对象
JSP 默认提供9个可直接使用的对象(无需声明):
