JavaWeb核心知识点
一:HTTP协议
一、概述
1. 概念:超文本传输协议
2. 作用:规范了客户端(浏览器)和服务器的数据交互格式
3. 特点
1. 简单快速:客户端向服务器请求服务时,仅通过键值对来传输请求方法和路径
2. 灵活:允许传输任意类型的数据对象,正在传输的类型由Content-Type标记(例如图片,文本)
3. 持续连接:处理完客户端的一个请求时候,服务器不立马关闭,而是在指定的时间之后才关闭
4. 无状态:如果第二次请求中需要用到第一次请求的数据,那么必须在请求第一次的数据
二、交互流程
1. 连接:客户端和服务器端建立连接
2. 请求:客户端发送请求数据到服务器端
3. 响应:服务器端接收到请求后进行处理,将处理结果返回响应客户端
4. 关闭:关闭客户端和服务器端连接(HTTP1.1版本之后不会立即关闭)
三、请求
1. 请求格式
1. 请求行:请求方式、请求地址和HTTP协议版本
2. 请求头:消息报头,附加信息,不包括核心数据
3. 空行:请求头和请求实体之间的必须有空行
4. 请求实体:核心数据,非必须
2. 请求方式
1. GET请求(没有请求实体):请求数据以?的形式拼接在请求头中,URL中有具体的请求数据,不安全,由于浏览器对URL的长度有限制,所以适合数据量小的传输
2. POST请求:请求数据字请求实体中发送,URL中没有具体的请求数据,安全,适合数据量大的传输
四、响应
1. 响应格式
1. 响应行:HTTP版本、状态码和状态消息
2. 响应头:消息报头,附加信息
3. 空行:响应头和响应实体之间必须存在空行
4. 响应实体:服务器返回给客户端的数据
2. 状态码
1. 200:客户端请求成功
2. 400:客户端请求有语法错误,不能被服务器所理解
3. 403:服务器收到请求,但是拒绝服务
4. 404:请求资源不存在(URL错误)
5. 500:服务器发生不可预期的错误
6. 503:服务器不能处理当前客户端的请求,一段时间后恢复正常
二:Tomcat服务器
一、概念及作用
1. 概念:Tomcat 服务器是一个免费的开源的轻量级Web 应用服务器(Java编写的),是开发和调试JSP 程序的首选。
2. 作用:能够根据客户端的请求来启动并运行我们编写的数据逻辑代码。
二、安装
1. 下载
1. Tomcat官网
2. 点击左侧Download下对应的版本
3. 下载压缩包(zip)
4. 解压即可
2. 目录介绍
1. bin:存放tomcat的命令,以.sh结尾的(linux命令),以.bat结尾的(windows命令)
1. startup:启动Tomcat
2. shutdown:关闭Tomcat
2. conf:存放tomcat的一些配置文件
1. server.xml:设置端口、域名或IP、默认加载的项目及请求编码
2. web.xml:文件类型设置
3. context.xml:配置数据源
4. tomcat-users.xml:管理tomcat的用户与权限
3. lib:存放tomcat运行需要加载的jar包
4. log:存放tomcat在运行过程中产生的日志文件
5. webapps:存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序
6. work:存放tomcat在运行时的编译后文件
三、检测安装
1. 双击bin目录下的startup文件,不要关闭
2. 在浏览器URL中输入:localhost:8080
3. 如果跳转到tomcat推荐页面则安装成功
二:Servlet
一、概述
1. 概念:Servlet是指任何实现了这个Servlet接口的类,Servlet运行于支持Java的应用服务器中,Servlet只用来扩展基于HTTP协议的Web服务器。
2. 作用 :交互式地浏览和修改数据,动态生成网页。
2. 使用
1. 创建普通的Java类继承HttpServlet
2. 覆写service方法
3. 在service方法中书写逻辑代码
4. 在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet的别名
二、访问流程和生命周期
1. 访问流程
1. 客户端输入URL(服务器地址:端口号/虚拟项目名/servlet的别名)发起请求到服务器
2. 服务器解析请求URL地址中的URI信息(虚拟项目名/servlet的别名)
3. 按照虚拟项目名在webapps目录下找到对应的项目文件
4. 按照servlet的别名(url-pattern)在项目下的web.xml中检索对应的servlet
5. 运行servlet-class中的所对应的servlet
2. 生命周期
1. 从第一次加载进内存(调用)到服务器关闭
2. 在web.xml中配置了load-on-startup,生命周期为从服务器的启动到服务器的关闭
3. doGet、doPost、service方法的区别
1. service方法:可以处理get/post方式的请求,如果servlet中有service方法,会优先调用service方法对请求进行处理。如果service方法中调用了父类的service方法,那么在此service执行完成之后会再次执行对应请求的处理方法,如果不存在会报405错误,一般情况下不会调用。
2. doGet方法:只能处理get方式的请求
3. doPos方法: 只能处理post的请求方式
三、request对象
1. 概述
1. 概念: 封装了所有请求信息,由服务器创建并作为实参传递给处理请求的servlet的service方法。
2. 作用:解决了一次请求内的数据共享问题
3. 作用域:一次请求内
2. 获取请求行数据
1. 获取请求方式:String method = req.getMethod();
2. 获取请求URL:String url = req.getRequestURl();
3. 获取请求URI: String uri = req.getRequestURI();
4. 获取请求协议:String scheme = req.getScheme();
3. 获取请求头数据
1. 获取指定的请求头数据:String header = req.getHeader("键名");
2. 获取所有请求头键的枚举
Enumeration e = req.getHeaderNames();
while(e.hasMoreElements) {
String name = (String) e.nextElement();
String value = req.getHeader(name);
System.out.println(name + ":" + value);
}
4. 获取用户数据
1. 获取指定的用户数据:String name = req.getParameter("键名");
2. 获取同键不同值的用户数据(多选): String[] values = req.getParameterValues("键名");
5. 设置请求编码格式:req.setCharacterEncoding("")
6. 请求转发
1. 作用:多个servlet联动操作处理请求。
2. 特点:一次请求(只有一个request对象),地址栏信息不改变。
3. 使用: req.getRequestDispatcher("jsp路径").forward(req, resp);
return;
7. 数据的存储和获取(存储优先于获取)
1. 存储:req.setAttribute(Object name, Object value);
2. 获取:req.getAttribute(Object obj);
四、response对象
1. 概述
1. 概念:封装了所有响应信息,由服务器创建并作为实参传递给要处理请求的servlet的service方法
2. 作用:将服务器的信息响应给浏览器
2. 设置响应编码格式:resp.setContentType("text/html;charset=utf-8");
3. 设置响应状态码:sendError(int sc, String msg);
4. 设置响应头
1. 同键会覆盖:setHeader(“键名”, “键值”);
2. 同键不覆盖:addHeader(“键名”, “键值”);
5. 设置响应实体
1. 响应字符串或HTML页面:resp.getWrite().write("");
2. 请求重定向:resp.sendRedirect("uri");
6. 请求重定向
1. 作用:解决表单重复提交并将不能处理的请求交给其他servlet处理。
2. 特点:多次请求(多个request对象),地址栏信息改变。
3. 使用:resp.sendRedirect("uri");
五、cookie对象
1. 概述
1. 概念:浏览器端的存储技术
2. 作用:解决发送的不同请求数据共享问题
3. 特点
1. cookie对象由服务器创建,存储在客户端
2. 临时存储:存储在浏览器的运行内存中,浏览器关闭即失效
3. 定时存储:存储在硬盘中,在有效期内符合有效路径要求的请求都会附带该信息
2. 存储
1. 创建cookie对象(一个对象只能存储一条信息):Cookie c = new Cookie(String name, String value);
2. 设置cookie信息(非必须)
1. 设置有效期:c.setMaxAge(int seconds);
2. 设置有效路径:c.setPath(Strign uri);
3. 响应cookie信息:resp.addCookie(cookie对象);
3. 获取
1. 获取cookie对象数组: Cookie[] cks = req.getCookie();
2. 遍历cookie信息:判断是否为null后使用for循环遍历
1. 获取键:c.getName();
2. 获取值:c.getName();
六、session对象
1. 概述
1. 概念:用户第一次访问服务器,服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用cookie技术存储到浏览器中,保证该用户的其它请求能够获得同一个session对象。
2. 作用:解决了一个用户不同请求的数据共享问题。
3. 作用域:一次会话(从访问到浏览器关闭)
4. 特点
1. session对象由服务器创建,存储在服务器端
2. session依赖Cookie技术,JESSIONID存储在Cookie的临时存储空间中,浏览器关闭失效
2. 获取session对象: HttpSession hs = req.getSession();
1. 如果请求中拥有session的标识符(JSESSIONID),则返回其session对象
2. 如果请求中没有session的标识符(JSESSIONID),则创建session对象
3. 如果session对象是失效的,则创建session对象
3. 设置session信息
1. 设置有效期(默认30分钟):hs.setMaxInactiveInterval(int seconds);
2. 设置强制失效:hs.invalidate();
4. 数据的存储和获取
1. 存储:hs.setAttribute(String name, Object value);
2. 获取:hs.getAttribute(String nam)
七、ServletContext对象
1. 概述
1. 概念:ServletContext对象内部封装了该web应用(项目)的信息。
2. 作用:解决了不同用户的数据共享问题。
3. 作用域:从服务器启动到服务器关闭
4. 特点
1. ServletContext对象由服务器创建,存储在服务器端
2. 用户共享,一个项目只有一个
2. 获取ServletContext对象
1. ServletContext sc = this.getServletContext();
2. ServletContext sc = this.getServletConfig().getServletContext();
3. ServletContext sc = req.getSession().getServletContext();
3. 获取项目中web.xml文件中的全局配置数据:String name = sc.getInitParameter(String name);
4. 获取webroot下资源的绝对路径:String path = sc.getRealPath("/文件夹/文件名");
5. 获取webroot下资源的流对象:InputStream is = sc.getResourceAsStream("/文件夹/文件名");
6. 数据的存储和获取
1. 存储:hs.setAttribute(String name, Object value);
2. 获取:hs.getAttribute(String nam)
八、ServletConfig对象
1. 概述
1. 概念:ServletConfig对象是Servlet的专属对象,每个Servlet都单独拥有一个ServletCinfig对象。
2. 作用:ServletConfig对象用来获取每一个Servlet在web.xml文件中的配置信息。
2. 获取ServletConfig对象:ServletConfig sc = this.getServletConfig();
3. 获取web.xml中的配置数据:String name = sc.getInitParameter(String name);
十一、web.xml
1. 全局配置参数
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
2. Servlet配置
<init-param>
<param-name>name</param-name>
<param-value></param-value>
</init-param>
3. 过滤器配置
4. 监听器配置
5. 加载时机:服务器启动
6. 加载顺序:全局配置-->监听器-->过滤器-->Servlet配置
三:JSP
一、概述
1. 概念:JSP(全称Java Server Pages)是由sun公司主导创建的一种动态网页技术标准。
2. 作用:将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。
3. 本质:Servlet
4. 原理:当请求访问JSP文件时,JSP文件会被JspServlet转义成对应的Servlet同时执行转义好的Servlet。
二、三个指令
1. page指令:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
1. 作用:配置jsp文件的转译相关的参数
2. 属性
2. include指令(静态引入):<% include file="要引入的jsp文件的相对路径" %>
1. 作用:在当前jsp文件中引入其他jsp文件
2. 特点
1. 会将当前和引入的jsp文件合并成一个servlet(不会单独转义)然后显示
2. 当前和引入的jsp文件中不能使用Java代码块声明的同名变量(合并成一个servlet)
3. taglib指令
1. 作用:声明jstl标签库
2. 指令:<%@taglib uri="标签库" prefix="c" %>
三、六个动作
1. 动态引入:<jsp:include >
1. 使用:<jsp:include page="path"></jsp:include>
2. 作用:在当前jsp文件中引入其他jsp文件
3. 特点
1. 将引入的jsp文件单独转译,然后在当前servlet(当前jsp文件)中调用转义引入的servlet并显示
2. 允许含有同名变量
2. 请求转发:<jsp:forward>
1. 使用:<jsp:forward page="path">< /jsp:forward>
2. 作用:请求转发
3. 特点:标签中间只能写<jsp:param>子标签,其他的任意字符都会报错
3. 设置请求参数:<jsp:param>
1. 使用
<jsp:forward page="path">
<jsp:param name="名" value="值" />
< /jsp:forward>
2. 作用: 将额外的请求信息保存到request对象中
3. 特点:一个标签只能保存一个信息
4. 创建对象:<jsp:useBean>
1. 使用:<jsp:useBean id="对象名" class="className" scope="作用域">
2. 作用:实例化一个类对象
3. 特点:一个标签只能实例化一个对象
5. 给指定的对象属性赋值:<jsp:setProperty>
1. 使用:<jsp:setProperty name="beanName" property="propertyName" value=" propertyValue" />
1. 在<jsp:useBean>外:立即执行
2. 在<jsp:useBean>内:只有对象被实例化时才会执行
2. 作用:给指定对象属性赋值
6. 取出指定对象的属性值:<jsp:getProperty>
1. 使用:<jsp:getProperty name="beanName" property="propertyName" />
2. 作用:取出指定对象的属性值
3. 特点:先实例化对象才能取对应属性的值
四、九大内置对象
1. pageContext对象
1. 作用:管理当前JSP的运行及其他内置对象
2. 使用
1. 获取其他内置对象:pageContext.getXxx();
2. 获取指定作用域中的数据:pageContext.getAttribute(String name,int Scope)
3. 向指定作用域中存储数据:pageContext.setAttribute(String name,Object o,int Scope);
4. 删除指定作用域中的数据:removeAttribute(String name,int Scope);
5. 作用域常量
1. page: PageContext.PAGE_SCOPE
2. request:PageContext.REQUEST_SCOPE
3. session:PageContext.SESSION_SCOPE
4. application:PageContext.APPLICATION_SCOPE
6. 自动从page request session application中获取数据:findAttribute(String name);
五、四大作用域
1. pageContext
1. 作用:解决了当前页面内数据共享问题
2. 作用域:当前页面
3. 数据流转方式:获取其他内置对象
2. request
1. 作用:解决了一次请求内的servlet的数据共享问题
2. 作用域:一次请求内
3. 数据流转方式:请求转发,将数据流转给下一个servlet
3. session
1. 作用:解决了同一用户的不同请求的数据共享问题
2. 作用域:一次回话
3. 数据流转方式:将数据从一次请求流转给其他请求
4. application
1. 作用:解决不同用户的数据共享问题
2. 作用域:项目内
3. 数据流转方式:将数据从一个用户流转给其他用户
四:EI表达式
一、概述
1. 概念:EL(全称Expression Language) 是为了使JSP写起来更加简单。
2. 作用:获取四个作用域中的数据
3. 使用:${表达式}
二、获取作用域数据
1. 获取请求头数据(了解)
1. 获取所有请求头信息:${header}
2. 获取指定键对应的值:${header["键名"]}
3. 获取同键不同值的所有值:${headerValues["键名"]}
2. 获取cookie数据(了解)
1. 获取所有cookie对象的map集合:${cookie}
2. 获取指定cookie对象: ${cookie.键名}
3. 获取指定cookie对象的存储数据的键:${cookie.键名.name}
4. 获取指定cookie对象的存储数据的值:${cookie.键名.value}
3. 获取请求数据(掌握)
1. 获取唯一键的值:param.键名
2. 获取同键不同值:paramValues.键名
4. 获取自定义数据(掌握)
1. 获取普通字符串: ${键名}
2. 获取普通对象
1. 属性是普通类型:${键名.属性名}
2. 属性是对象类型:${键名.属性名(对象属性).属性名(对象属性的属性)...}
3. 获取集合对象
1. list集合:${ 键名[角标].属性名(如果有) }
2. map集合:${ 键名.map集合存储的键名.属性名(如果键名是对象)}
三、作用域查找顺序
1. 默认:pageContext-->request-->session-->application
2. 自定义:${pageScope.键名}----${requestScope.键名}----${sessionScope.键名}----${applicationScope.键名}
四、运算
1. 算数运算:${变量1 算数表达式(+ - * /) 变量2}
2. 逻辑运算:${变量1 逻辑表达式(&& || !) 变量2}
3. 关系运算:${变量1 关系表达式(> < == >= !=) 变量2}
4. 空值判断:${empty 键名}
五:JSTL
一、概述
1. 概念:JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范。
2. 作用:提高jsp中的编写逻辑代码的效率
二、核心标签库
1. 基本标签:操作作用域中的数据
1. 输出数据给浏览器:<c:out value="可以是常量值也可以是EL表达式" default="默认值"></c:out>
2. 添加数据到指定作用域中:<c:set var="键名" value="数据" scope="作用域对象"></c:set>
3. 删除指定作用域中的数据:<c:remove var="键名" scope="作用域对象"/>
2. 逻辑标签
1. 单分支判断:<c:if test="${表达式}">前端代码</c:if>
2. 多分支判断
<c:choose>
<c:when test="">前端代码</c:when>
<c:when test="">前端代码</c:when>
......
<c:otherwise>前端代码</c:otherwise>
</c:choose>
3. 循环标签
1. 常量循环
<c:forEach begin="起始位" end="结束位" step="步长" varStatus="记录每次循环的数据(如索引)">
循环体
</c:forEach>
2. 动态循环
<c:forEach items="${对象}" var="每次循环的结果(对象中的数据)">
${s}
${s.属性}
</c:forEach>
三、格式化标签库
1. 格式化日期
1. yyyy年MM月dd日 上午HH时mm分ss秒格式:<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${日期对象}" />
2. yyyy-MM-dd HH:mm:ss格式 :<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${日期对象}" />
2. 格式化数字
1. ¥000,000.00格式:<fmt:formatNumber type="number" value="${数值对象}" />
2. 000,000.000格式:<fmt:formatNumber type="number" maxFractionDigits="整数型最大位数" value="${数值对象}" />
3. $120,000.23格式:<fmt:formatNumber value="${货币对象}" type="currency"/></p>
四、SQL标签库
1. 数据库连接:<sql:setDataSource var="对象名" driver="驱动" url="连接地址" user="用户名" password="密码"/>
2. 查询语句
<sql:query dataSource="${对象名}" var="结果集变量">
SQL查询语句
</sql:query>
3. 更新语句
<sql:update dataSource="${对象名}" var="受影响行数变量">
SQL增删改语句
</sql:update>
4. 给占位符赋值(嵌套在查询和更新语句中):<sql:param value="${empId}" />
JavaWeb核心知识点的更多相关文章
- javascript中的一些核心知识点以及需要注意的地方
前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不 ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- Java核心知识点学习----使用Condition控制线程通信
一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- 2019年Spring核心知识点整理,看看你掌握了多少?
前言 如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,在这里总结一下,理顺头绪. Spring 概述 Spr ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- 保证看完就会!大数据YRAN核心知识点来袭!
01 我们一起学大数据 大家好,今天分享的是大数据YRAN的核心知识点,老刘尽量用通俗易懂的话来讲述YARN知识点,争取做到大家看完后能够用口语化的形式将它们表达出来,做到真正的看完就会!(如果觉得老 ...
- Canal:同步mysql增量数据工具,一篇详解核心知识点
老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...
随机推荐
- js随机生成验证码以及随机颜色
Javascript通过Math.random()随机生成验证码. 代码如下: <!DOCTYPE html><html> <head> <meta char ...
- python 2.x中的中文
先不管一大堆的中文显示的原理,在这里记录下正确显示中文的方式,便于以后的查阅和深入学习. 方法1 a = {} a["哈哈哈"] = "啦啦啦啦啦啦啦" s1 ...
- 基于 HTML5 Canvas 的楼宇自控系统
前言 楼宇自控是指楼宇中电力设备,如电梯.水泵.风机.空调等,其主要工作性质是强电驱动.通常这些设备是开放性的工作状态,也就是说没有形成一个闭环回路.只要接通电源,设备就在工作,至于工作状态.进程.能 ...
- CSS布局解决方案(终结版)
作者:无悔铭 https://segmentfault.com/a/1190000013565024 前端布局非常重要的一环就是页面框架的搭建,也是最基础的一环.在页面框架的搭建之中,又有居中布局.多 ...
- 开发架构+osi七层协议+socket(day26)
目录 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议/OSI七层协议 传输层 网络层 数据链路层 物理连接层 socket 什么是socket 为什么用socket 如何使用 软件开发架构 ...
- linux 安装swoole
1.首先我们要安装swoole扩展的话,需要把它的包下载下来,下载地址是: https://github.com/swoole/swoole-src 2.下载下来之后进行解压: unzip swool ...
- VMware问题--无法获得 VMCI 驱动程序的版本: 句柄无效
关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确 问题截图: 解决 1.根据配置文件路径找到对应的.vmx文件: 2.用编辑器打开,找到v ...
- 盘点一下Creator星球上的开源工具包!
晓衡开始写公众号,最早是从上架 Cocos 商店的 pbkiller 插件开始的,到至今有2年2个月了.在这期间,又陆续在公众号上分享了多个实用工具包,在这里统一盘点一下,方便与大家交流学习. 一.u ...
- (数据科学学习手札70)面向数据科学的Python多进程简介及应用
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 进程是计算机系统中资源分配的最小单位,也是操作系 ...
- Luogu P1098 字符串的展开
这几天划了划水看了看初赛的试题,没写什么随笔. 今天刷刷洛谷试炼场.(不要问为什么我还在普及区) 题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串 ...