JavaWeb学习
JavaWeb
一、基本概念
1.1 基本介绍
web开发:
- web -- 网页
- 静态web
- html,css
- 提供给所有人看,始终不会发生变化
- 动态web
- 淘宝
- 根据不同的人展示不同的效果
- 技术栈:Servlet/JSP、APS、PHP(最好语言 = =、)
Java中,动态web资源开发的技术统称为JavaWeb
软件架构:
-
C/S:客户端/服务器端
-
B/S:浏览器/服务器端
资源分类:
-
静态资源:用户访问后一样(静态资源可以直接被浏览器解析)
html,css,JavaScript
-
动态资源:用户访问不一样(动态资源被访问后,需要转换为静态资源,再返回给浏览器)
servlet,jsp,php,asp
网络通信三要素:
- IP:电子设备在网路中的唯一标识
- 端口:应用程序在计算机中的唯一标识符 0~65536
- 传输协议:规定了数据传输的规则(tcp:安全协议,三次握手,速度稍慢。udp:不安全协议,速度慢)
1.2 web应用程序
- 可以提供浏览器访问的程序
- 一个web应用由多部份组成
- html,css,js
- jsp,servlet
- java程序
- jar包
- 配置文件(Properties)
- web应用程序填写完毕后,若想提供给外界访问:需要一个服务器来统一管理
1.3 静态Web
- *.html... 若服务器一直存在,则直接可以访问到
-
静态web存在的缺点
web页面无法动态更新,所有用户看到的都是同一个页面
-
轮番图,点击特效:伪动态
-
JavaScript
-
VBScript
-
无法和数据库交互(数据无法持久化)
-
1.4 动态Web
- 页面可以动态展示:“Web的页面因人而异”
-
缺点
加入服务器的动态web资源出现了错误,我们需要重新编写后台程序,重新发布
停机维护
-
优点
web页面无法动态更新,所有用户看到的都不是同一个页面
可以和数据库交互(数据可以持久化)
二、Web服务器
2.1 之前的技术
ASP
- 微软:国内最早运行
- HTML中嵌入了VB的脚本,ASP+COM
- 页面特别乱,维护困难
JSP/Servlet
- sun公司主推的B/S架构
- 基于Java语言
- 可以承载三高问题(高并发,高性能,高承载量)
- 语法像ASP,加强市场强度
PHP
- 开发速度快,功能强大、跨平台,代码简单
- 无法承担大访问量的情况(局限性)
2.2 Web服务器
服务器是一种被动的操作,用来处理用户的一些请求,和给用户一些响应信息
IIS
webLogic
webSphere
JBOSS
Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,是目前比较流行的Web 应用服务器。
三、Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
3.1 Tomcat文件夹
- bin:启动、关闭脚本文件
- conf:配置
- lib:依赖的jar包
- logs:日志
- webapps:存放网站
3.2 网站访问(面试)
- 输入域名,回车
- 检查本机hosts配置文件下有无域名映射
- 有,直接返回对应的ip地址
- 没有,去DNS服务器找,并返回结果
四、HTTP介绍
4.1 什么是Http
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html,字符串,~,....
- 超文本:图片,音乐,视频定位,地图....
- 80
HTTPS:安全的
- 403
4.2 两个时代
- http 1.0
- HTTP/1.0:客户端可以与服务器连接后,只能获得一个web资源,断开连接。
- http 2.0
- HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源。
4.3 HTTP请求
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get/post方法
Status Code: 200 OK 状态码
Remote Address: 127.0.0.1:7890 Remote:远程
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 语言
Cache-Control: max-age=0
Connection: keep-alive
1.请求行
- 请求行中的方式
- get(高效),一次请求,携带参数少,有限制
- post(安全)
2.消息头
Accept: 告诉浏览器,支持的数据类型
Accept-Encoding: 支持的编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 语言环境
Cache-Control: max-age=0 缓存控制
Connection: keep-alive 告诉浏览器,请求完成是断开还是保持连接
HOST 主机
GET 请求
- form 标签 method=get
- a 标签
- link 标签引入 css
- Script 标签引入 js 文件
- img 标签引入图片
- iframe 引入 html 页面
- 在浏览器地址栏中输入地址后敲回车
POST请求
- form 标签 method=post
4.4 HTTP响应
1.响应体
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Refrush:刷新告诉客户端多久刷新一次
Location:让网页重新定位
2.响应状态码
- 200:请求成功
- 3xx:请求重定向(重定向:重新找新位置)
- 4xx:找不到资源 404(资源不存在)
- 5xx:服务器代码错误
五、Maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
其核心思想是:约定大于配置
六、XML
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
可扩展:标签自定义,功能:存储数据
xml和html的区别:
-
xml标签都是自定义的,html标签是预定义。
-
xml的语法严格,html语法松散
-
xml是存储数据的,html是展示数据
七、Servlet
7.1 Servlet简介
- Servlet是sun公司开发的一门动态web技术
- Servlet是JavaEE规范之一。规范就是接口
- Sun在这些API中提供了一个接口叫做:Servlet
- Servlet是一个运行在服务器上的一个java小程序
JavaWeb三大组件
- Servlet程序
- Filter过滤器
- Listener监听器
实现Servlet的方法
- 编写一个类,实现Servlet接口,把开发好的java类部署到web服务器中
我们把实现了Servlet接口的Java程序叫做,Servlet
Servlet的方法
-
init() 方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
public void init() throws ServletException { // 初始化代码... } -
service() 方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ } -
doget() 方法
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 } -
dopost() 方法
POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 } -
destroy() 方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
public void destroy() { // 终止化代码... }
7.2 Hello,Servlet
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
</dependency>
</dependencies>
Servlet接口 --- GenericServlet --- HttpServlet --- 我们自己的类只需要继承HttpServlet即可
package cn.imut.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
//get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("进入doGet方法");
PrintWriter writer = response.getWriter(); //响应流
writer.print("Hello,Servlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
<%--
Created by IntelliJ IDEA.
User: vipp
Date: 2020/4/12
Time: 18:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello,World</h1>
</body>
</html>
7.3 Servlet执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的
标签体内容。 - 如果有,则在找到对应的
全类名 - tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法
7.4 Servlet生命周期
- Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程
- Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
7.5 Servlet体系结构
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
-
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
-
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
-
HttpServlet:对http协议的一种封装,简化操作
-
定义类继承HttpServlet
-
复写doGet/doPost方法
-
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
7.5 ServletConfig类
Servlet 程序的配置信息类,Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象
作用
- 可以获取 Servlet 程序的别名 servlet-name 的值
- 获取初始化参数 init-param
- 获取 ServletContext 对象
八、ServletContext对象
Web容器在启动时,会为每一个web程序都创建一个对应的ServletContext对象,其代表的当前的web应用
ServletContext 是一个接口,它表示 Servlet 上下文对象 ,ServletContext 对象是一个域对象,在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁
域对象:是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。
8.1 共享数据
package cn.imut.controller;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/context")
public class ServletContextDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username = "LEIZ";
context.setAttribute("username", username); //将一个数据保存在了ServletContext中
System.out.println("Hello");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package cn.imut.controller;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/getServlet")
public class GetServletDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
response.getWriter().println(username);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
8.2 获取初始化参数
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
@WebServlet("/hello")
public class ServletContextDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
response.getWriter().println(url);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
8.3 请求转发
8.4 读取资源文件
九、Request与Response
9.1 HttpServletRequest 类
作用
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。
常用方法
请求转发
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
9.2 HttpServletResponse 类
作用
HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。
HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置
输出流
只能使用一个!
请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。
9.3 Web中的路径
- 相对路径
- 绝对路径
在实际开发中,路径都使用绝对路径,而不简单的使用相对路径。
十、Cookie
10.1 介绍
- Cookie 翻译过来是饼干的意思
- Cookie 是服务器通知客户端保存键值对的一种技术
- 客户端有了 Cookie 后,每次请求都发送给服务器
- 每个 Cookie 的大小不能超过 4kb
10.2 创建
public void createCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 创建cookie对象
Cookie cookie = new Cookie("key1", "value1");
//2. 通知客户端保存cookie
response.addCookie(cookie);
response.getWriter().write("Cookie 创建成功");
}
10.3 服务器获取Cookie
Cookie工具类
package cn.imut.utils;
import javax.servlet.http.Cookie;
public class CookieUtils {
public static Cookie findCookie(String name, Cookie[] cookies) {
if(name == null || cookies == null || cookies.length == 0) {
return null;
}
for (Cookie cookie: cookies) {
if(name.equals(cookie.getName())){
return cookie;
}
}
return null;
}
}
public void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
// getName方法 返回 Cookie的 key(名)
// getValue方法 返回 Cookie的 value值
for (Cookie cookie : cookies) {
resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br/>");
}
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
//如果不等于null,说明赋过值,也就是找到了需要的Cookie
if (iWantCookie != null) {
resp.getWriter().write("找到了需要的 Cookie");
}
}
10.4 Cookie值的修改
方案一、
- 创建一个要修改的同名(指的就是 key)的 Cookie 对象
- 在构造器,同时赋于新的 Cookie 值
- 调用 response.addCookie(Cookie)
方案二、
- 先查找到需要修改的 Cookie 对象
- 调用 setValue()方法赋于新的 Cookie 值
- 调用 response.addCookie()通知客户端保存修改
10.5 浏览器中查看Cookie
10.6 Cookie生命控制
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)
setMaxAge()
- 正数,表示在指定的秒数后过期
- 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
- 零,表示马上删除 Cookie
十一、Session会话
11.1 介绍
- Session 就一个接口(HttpSession)
- Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术
- 每个客户端都有自己的一个 Session 会话。
- Session 会话中,我们经常用来保存用户登录之后的信息。
11.2 创建Session和获取
**request.getSession() **
第一次调用是:创建 Session 会话
之后调用都是:获取前面创建好的 Session 会话对象。
**isNew()判断到底是不是刚创建出来的(新的) **
true 表示刚创建
false 表示获取之前创建
每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。
getId() 得到 Session 的会话 id 值。
11.3 Session域数据的存取
public void serAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("key1", "value1");
response.getWriter().write("向Session中保存了数据");
}
public void getAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object attribute = request.getSession().getAttribute("key1");
response.getWriter().write("从Session中获取出key1的数据是:", + attribute);
}
11.4 Session生命周期控制
publicvoidsetMaxInactiveInterval(intinterval)
设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。
- 值为正数的时候,设定 Session 的超时时长。
- 负数表示永不超时(极少使用)
publicintgetMaxInactiveInterval(): 获取 Session 的超时时间
publicvoidinvalidate() : 让当前 Session 会话马上超时无效。
Session 默认的超时时间长为 30 分钟。
因为在Tomcat服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前Tomcat服务器下所有的Session 超时配置默认时长为:30 分钟。
<session-config>
<session-timeout>30</session-timeout>
</session-config



浙公网安备 33010602011771号