目录
一、相关概念
1.关系
javase:java基础技术栈,包括javaweb、javaee
javaweb:java开发网站相关技术,包括Servlet、JDBC、Tomcat、Session/Cookie
javaee:Java Platform,Enterprise Edition,构建企业级的面向服务体系结构、微服务、组件等的技术栈,主流框架有Struts + Hibernate + Spring SSH、SpringMVC + Spring + Mybatis SSM、SpringBoot + Spring + Myabtis 新版SSM、微服务架构:MicroService : SpringCloud /Alibaba Cloud 、无服务架构:ServerLess 、服务网格:Service Mesh
2.网页
静态网页:内容都是不变的,由HTML+CSS+JS开发
动态网页:浏览器-》后端程序-》数据库的数据,浏览器和服务器进行数据交互,服务器端根据客户的不同请求动态的生成网页内容,开发模式为前端:HTML + CSS + JS + HTTP、后端:Servlet+Request+Response+Cookie+Session、数据库(类似excel):Mysql
3.架构
CS架构 客户机-服务器,即Client-Server(C/S)结构,缺少通用性。
BS架构 B/S架构即浏览器和服务器架构模式, WEB浏览器是客户端统一了客户端,系统功能实现的核心部分集中到服务器上。
类似于软件与网站的区别。
4.URL
统⼀资源定位符
标准格式: 协议(决定解析⽅式)://服务器IP(区分主机):端⼝(区分不同进程)/路径1(区分后端接口)/路径N ? key1=value1 & key2=value2
5.http
HyperText Transfer Protocol 超文本传输协议,规定好⼀种信息的格式,发送⽅与接 收端要按照这种格式发送或解析数据信息。http连接:客户端发送的每次请求都需要服务器回送响应。
常见协议下的数据格式
http请求
请求行
- 请求方法:
get向服务器获取资源,post向服务器提交数据,head和get类似,用于获取报头
- URL地址
- 协议名
请求头
- 报文头包含若干个属性 格式为“属性名:属性值”,
- 服务端据此获取客户端的基本信息
请求体
- 请求的参数,可以是json对象,也可以是前端表单生成的key=value&key=value的字符串
http响应
-
响应行
- 报文协议及版本、状态码
响应头
- 报文头包含若干个属性 格式为“属性名:属性值”
响应正文
- 响应报文体,我们需要的内容,多种形式比如html、json、图片、视频文件等
6.https
Hyper Text Transfer Protocol over SecureSocket Layer,即HTTP + SSL / TLS
可防止数据在传输过程中不被窃取、改变,确保数据的完整性
7.服务器
安装服务器程序监听对应端口的远程电脑,根据用户的请求去获取对应的数据并返回给调用方。
Web服务器和应用服务器是服务器电脑上安装的软件,web服务器处理的是Http协议,包括Apache、IIS、Nginx等;应用服务器还可以处理其他协议,包括Tomcat、Jboss等
8.Tomcat
Apache是web服务器,Tomcat是应用(java)服务器,它是一个servlet容器,是Apache的扩展,是一个开放源代码的Web应用服务器;
Tomcat目录文件:
bin存放启动和关闭tomcat脚本,conf存放配置文件,lib存放Tomcat运行需要的第三方包(jar包之类的),log存放运行的相关日志文件,webapps存放web项目,work:编译后产生的class文件
9.Servelet
JavaServlet,Java编写的运行在服务器上的程序,用于交互式地浏览和生成动态Web内容(接收用户通过浏览器传来的表单数据,或读取数据库信息返回给浏览器查看,创建动态网页)
两个常见的子类:HttpServlet、GenericServlet
HttpServletRequest对象可以获得请求的所有信息。
HttpServletResponse对象,封装了向客户端发送数据、发送响应头,发送响应状态码的方法,用于设置相关信息。
生命周期
Servlet 接口的5个方法:三个生命周期方法(初始化init()方法,在服务器装入 Servlet 时,仅执行一次 ;服务service方法,客户请求HttpServlet 对象被调用;销毁destroy方法,在服务器停止且卸装 Servlet 时,仅执行一次)和两个普通方法
想要具体实现效果可移步
https://mp.csdn.net/mp_blog/creation/editor/146452115
10.Javaweb作用域对象
对象的生命周期,在WEB服务器启动时创建,服务器关闭时销毁
四大作用域对象(用于存取数据):PageContext(页面)->ServletRequest(请求)->HttpSession(会话)->ServletContext(应用,即webapps下的目录,代表了servlet环境上下文的全局存储空间);
11.JSP
Java Server Pages,是一种动态网页开发技术,可用JSP标签在HTML网页中插入Java相关代码。其本身就是一种Servlet,是HttpServlet的子类。
区别:jsp就是在html里面写java代码,servlet就是在java里面写html代码
JSP
<%--
Created by IntelliJ IDEA.
User: xdclass
Date: 2020/5/27
Time: 下午10:04
To change this template use File | Settings | File Templates.
--%>
<%--JSP组成:在html中嵌套java代码--%>
<%--java代码--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--html页面代码--%>
<html>
<head>
<title>$Title$</title>
</head>
<body>
小滴课堂
</body>
</html>
Servlet
package net.xdclass.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;
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容
resp.setContentType("text/html;charset=utf-8");//设置响应内容类型
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div> hello world! </div>");//输出响应内容:嵌套html代码
}
}
简介:代表服务器的响应,封装了向客户端发送数据、发送响应头,发送响应状态码的方法
JSP表达式的语法格式:(不能用分号结束)<%= 表达式 或者java代码段%>
二、相关操作
1.RequestDispatcher
请求转发,
格式
request.getRequestDispatcher(URL地址).forward(request, response)
过程:客户端(浏览器)发送请求----->服务器(servlet作相应的业务处理------>调用forward将资源)------>返回客户端(浏览器)
servlet类中
//设置请求req的属性存储到request作用域 req.setAttribute("name","xdclass"); User user = new User(); user.setHost("https://xdclass.net"); user.setId(1); user.setName("老王"); //设置跳转至index.jsp页面,将数据内容传递过去 req.getRequestDispatcher("/index.jsp").forward(req,response);response.sendRedirect("/index.jsp");
index.jsp中
<hr><%--换行--%> <%--使用EL表达式对JSP页面进行简化 --%> name = ${user.name} <hr> id= ${user.id} <hr> host= ${user.host}
实现效果的过程:直接访问端口号+forward 此时,网页显示页面index(浏览器客户端)的name=由forward转发过来的值,但如果直接访问端口号+index.jsp页面(浏览器客户端)的name是没有值的。
拓展-EL表达式
Expression Language简化JSP,使JSP访问java对象(javaBean)更简单。
格式 ${ } 可通过属性范围来设置其作用范围
对比在JSP中嵌套java代码<%= (String)request.getAttribute("name")%> 等价于EL表达式 ${name}
2.sendRedirect
请求重定向
过程:客户端发送请求,Servlet做出业务逻辑处理------->response.sendRedirect("xxx.jsp")方法----->客户端浏览器重新访问服务器资源“xxx.jsp”------->服务器再次对客户端浏览器做出响应
特点:浏览器可以看到两个请求,取不到request中的存储的数据。
servlet类中
//设置请求req的属性存储到request作用域 req.setAttribute("name","xdclass"); User user = new User(); user.setHost("https://xdclass.net"); user.setId(1); user.setName("老王"); //重定向 response.sendRedirect("/index.jsp");
访问浏览器一次时,会同时有index.jsp与forward两个请求出现
3.cookie
由于HTTP协议的无状态性,通过cookie为同个浏览器的多次请求生成一个统一的标识
过程:浏览器发送request请求到服务器------>服务器给请求分配一个唯一标识ID(cookie)和response------>返回给浏览器
特点:由服务端生成,用于标记客户端(浏览器)的唯一标识,在每次网络请求中,都会被传送。通过document.cookie只能获得本网页的cookie,有大小限制。
操作
获取请求的cookie
package net.xdclass.web.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name ="cookieServlet",urlPatterns = {"/get_cookie_test"})
public class GetCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cookie,遍历并打印cookie的相关信息
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
System.out.println(cookie.getDomain());
System.out.println(cookie.getName());
System.out.println(cookie.getValue());
}
}
}
生成cookie请求
package net.xdclass.web.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/gene_cookie_test")
public class GeneCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//生成cookie,并设置相关属性
Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa")
//20秒过期时间,过期后不会自动携带过去
cookie.setMaxAge(20);
response.addCookie(cookie);
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
4.Session
由于HTTP协议的无状态性,通过cookie和session让服务端知道多次http请求是否来自同一用户。
过程:浏览器第一次发送request请求到服务器-------->服务器给请求分配一个唯一标识sessionId和response------>返回给浏览器------->服务器在本地创建一个map结构(Session),存储sessionId和浏览器的关系------->第二次访问时会自动带上这个标识sessionId(cookie)
session是服务端自己维护的一个map数据结构,用于记录key-Object上下文内容状态
区别:cookie是保存在客户端,session是存在服务器,session依赖于cookie
操作
获取session请求
package net.xdclass.web.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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/session_servlet")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session并打印相关信息
HttpSession session = request.getSession();
//获取sessionid,java里面叫jsessionid
System.out.println("sessionid="+session.getId());
//创建时间戳,毫秒
System.out.println("getCreationTime="+session.getCreationTime());
//是否是初次创建,记得情况浏览器的cookie,验证sessionid
System.out.println("isNew="+session.isNew());
//往session存储东西
session.setAttribute("name","xdclass.net");
}
}
具体实例:
5.Filter过滤器
动态地拦截请求和响应,通过元注解@WebFilter来配置过滤规则(servletNames指定过滤的Servlet;urlPatterns指定 Filter拦截的 URL;filterName指定Filter的名称)
生命周期:
init(容器初始化,即应用启动的时候加载一次) doFilter(命中过滤规则就触发调用chain.doFilter(request, response)方法,执行对应的servlet或url下的资源) destroy(容器销毁,即应用停止的时候调用一次)
相关参数
FilterConfig类(过滤器配置类),通过该类可获取过滤器基本信息;
dispatcherTypes 参数,指定过滤的dispatcher模式(转发模式),不符合不放行。
6.Listener监听器
是实现了特定接口的普通Java类,用于监听其他对象的创建和销毁及其方法执行和属性改变;
javaweb中监听器的作用:监听域对象的创建和销毁,主要包括ServletContextLitener、HttpSessionListener、ServletRequestListener。
实现步骤
创建一个Java类------->该类实现监听器的接口-------->实现监听器接口的所有方法------>用 @WebListener来配置监听器(或者在web.xml文件中配置信息)
具体实例移步
7.MVC模型
Model模型:承载数据用的Bean,即java对象,如实体类User、Dao层对象
View视图:页面比如JSP,为用户提供使用界面,与用户直接进行交互
Controller控制器:将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应,如Servlet、Controller
三层架构
视图层 View也叫web层:接收用户提交请求的代码
服务层 Service:系统的业务逻辑
持久层 Dao (Data Access Object):操作数据库的代码
常见的src目录结构
controller 存放控制器;service 存放业务接口;impl 存放业务接口或数据访问接口实现类;
dao 存放数据访问接口;domain 存放实体类;util 存放工具类;listener 存放监听器
filter 存放过滤器;config 存放配置
8.JDBC连接数据库的开发步骤
- 加载数据库连接驱动
- 获取数据连接对象
- 获取语句对象
会话对象有两种Statement和PreparedStatement
- 执行语句
- 处理结果集
- 关闭资源rs.close()、st.close()、conn.close() 注意关闭顺序以及处理异常
9.maven
一个基于项目对象模型(POM)的软件项目管理和综合工具,能够实现自动下载项目依赖库(直接在maven仓库添加配置,指定版本,自动下载),统一Java 项目结构。
仓库包括本地仓库( 用户目录下/.m2/repository/)和远程仓库。
添加依赖包后,Maven检查 pom.xml文件(确定下载的依赖),Maven 首先将从本地资源库获得依赖资源,如果没有找到,它才会从远程仓库去找。
生命周期
对所有的构建过程进行抽象和统一,主要有
clean 清理项目
build 构建处理项目
验证 validate->编译 compile->测试 Test->包装package->检查verify->安装 install->部署 deploy
site 项目文档创建处理
在pom.xml中导入依赖的参考配置网址:https://mvnrepository.com/
10.浏览器地址时页面处理过程
- 解析url地址合法性
- 浏览器检查是否有缓存, 如果有直接显示。
如果没有
- 在发送http请求前,需要域名解析(DNS解析),解析获取对应过的ip地址。
- 浏览器向服务器发起tcp链接,完成tcp三次握手
- 握手成功后,浏览器向服务器发送http请求
- 服务器收到处理的请求,将数据返回至浏览器
- 浏览器收到http响应。
- 浏览器解析响应。如果响应可以缓存,则存入缓存
- 浏览器进行页面渲染