JavaWeb知识点大致梳理
Posted yfyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb知识点大致梳理相关的知识,希望对你有一定的参考价值。
xml:
概念:
Extensible Markup Language 可扩展标记语言
标签自定义
功能:
存储数据
xml和html的区别:
-
xml标签都是自定义的,html标签是预定义。
-
xml的语法严格,html语法松散
-
xml是存储数据的,html是展示数据
语法:
基本语法:
-
xml文档的后缀名 .xml
-
xml第一行必须定义为文档声明
-
xml文档中有且仅有一个根标签
-
属性值必须使用引号(单双都可)引起来
-
标签必须正确关闭
-
xml标签名称区分大小写
组成成分:
-
文档声明
-
指令
-
标签
-
属性
-
文本
约束:
-
框架使用者
-
分类
-
DTD
-
Schema
解析:
-
操作xml文档
-
解析
-
写入
-
-
解析xml的方式
-
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
-
SAX:逐行读取,基于事件驱动的
-
-
xml常见的解析器
-
JAXP
-
DOM4J
-
Jsoup
-
PULL
-
Web基础:
软件架构:
C/S:客户端/服务器端
B/S:浏览器/服务器端
资源分类:
-
静态资源:用户访问后一样(静态资源可以直接被浏览器解析)
html,css,javascript
-
动态资源:用户访问不一样(动态资源被访问后,需要转换为静态资源,再返回给浏览器)
servlet,jsp,php,asp
网络通信三要素:
IP:电子设备在网路中的唯一标识
端口:应用程序在计算机中的唯一标识符 0~65536
传输协议:规定了数据传输的规则(tcp:安全协议,三次握手,速度稍慢。udp:不安全协议,速度慢)
web服务器软件
服务器:
安装了服务器软件的计算机
服务器软件:
接收用户的请求,处理请求,做出响应
Web服务器软件:
让用户通过浏览器访问项目
常见Java的Web服务器软件:
-
webLogic
-
webSphere
-
JBOSS
-
Tomcat
JavaEE:
Java语言在企业级开发中使用的技术规范总和,一共规定了13项大的规范
#####
Servlet:server applet
概念:
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
Web.xml配置:
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.imut.servlet.demo</servlet-class>
</servle>
?
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
执行原理:
-
当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
-
查找web.xml文件,是否有对应的<url-pattern>标签体内容。
-
如果有,则在找到对应的<servlet-class>全类名
-
tomcat会将字节码文件加载进内存,并且创建其对象
-
调用其方法
Servlet生命周期:
-
创建 init方法
-
提供服务 service方法
-
销毁 destroy方法
Servlet体系结构:
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
?
* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
?
* HttpServlet:对http协议的一种封装,简化操作
1. 定义类继承HttpServlet
2. 复写doGet/doPost方法
HTTP:
概念:
Hyper Text Transfer Protocol 超文本传输协议
传输协议:
定义了客户端和服务端通信时,发送数据的格式
特点:
1. 基于TCP/IP的高级协议
2. 默认端口号:80
3. 基于请求/响应模型的:一次请求对应一次响应
4. 无状态的:每次请求之间相互独立,不能交互数据
请求消息数据格式:
-
请求行
-
HTTP协议有7中请求方式,常用的有2种 * GET: 1. 请求参数在请求行中,在url后。 2. 请求的url长度有限制的 3. 不太安全 * POST: 1. 请求参数在请求体中 2. 请求的url长度没有限制的 3. 相对安全
-
-
请求头
-
常见的请求头:
-
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
-
可以在服务器端获取该头的信息,解决浏览器的兼容性问题
-
Referer:http://localhost/login.html
-
告诉服务器,我(当前请求)从哪里来? * 作用: 1. 防盗链: 2. 统计工作:
-
-
-
-
-
-
请求空行
-
请求体
Request:
request对象和response对象的原理:
-
request和response对象是由服务器创建的。我们来使用它们
-
request对象是来获取请求消息,response对象是来设置响应消息
request对象继承体系结构:
ServletRequest -- 接口 | 继承 HttpServletRequest -- 接口 | 实现 org.apache.catalina.connector.RequestFacade 类(tomcat)
request功能:
-
获取请求消息数据
-
获取请求行数据
-
方法:
-
获取请求方式 :GET String getMethod()
-
获取虚拟目录:/day14
String getContextPath()
-
获取Servlet路径: /demo1
String getServletPath()
-
-
获取get方式请求参数:name=zhangsan
String getQueryString()
-
获取请求URI
-
String getRequestURI():
StringBuffer getRequestURL()
?
URL:统一资源定位符
?
URI:统一资源标识符
?
6. 获取协议及版本:HTTP/1.1
?
String getProtocol()
?
7. 获取客户机的IP地址:
?
String getRemoteAddr() -
-
获取请求头数据
* (*)String getHeader(String name):通过请求头的名称获取请求头的值
* Enumeration<String> getHeaderNames():获取所有的请求头名称 -
获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤:
-
获取流对象 BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
-
再从流对象中拿数据
-
-
-
其他功能
-
获取请求参数通用方式
-
请求转发
-
共享数据
-
获取ServletContext
-
HTTP协议:
-
请求消息:
客户端发送给服务器端的数据
-
数据格式:
-
请求行
-
请求头
-
请求空行
-
请求体
-
-
-
响应消息:
服务器端发送给客户端的数据
-
相应行
-
组成:协议/版本 响应状态码 状态码描述
-
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
-
状态码都是3位数字
-
分类
1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2xx:成功。代表:200
3xx:重定向。代表:302(重定向),304(访问缓存)
4xx:客户端错误。
404(请求路径没有对应的资源)
405:请求方式没有对应的doXxx方法
5xx:服务器端错误。代表:500(服务器内部出现异常)
-
-
-
相应头
常见的响应头:
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
-
相应空行
-
相应体
Response对象
功能:
设置响应消息
设置响应行:
-
格式:HTTP/1.1 200 ok
-
设置状态码:setStatus(int sc)
设置响应头:
setHeader(String name, String value)
设置响应体:
使用步骤:
-
获取输出流
字符输出流:PrintWriter getWriter() 字节输出流:ServletOutputStream getOutputStream()
-
使用输出流,将数据输出到客户端浏览器
ServletContext对象:
-
概念:
代表整个web应用,可以和程序的容器(服务器)来通信
-
获取:
-
通过request对象获取 request.getServletContext();
-
通过HttpServlet获取 this.getServletContext();
-
功能:
-
获取MIME类型:
MIME类型:在互联网通信过程中定义的一种文件数据类型
格式: 大类型/小类型 text/html image/jpeg 获取:String getMimeType(String file)
-
域对象:共享数据
-
setAttribute(String name,Object value)
-
getAttribute(String name)
-
removeAttribute(String name)
ServletContext对象范围:所有用户所有请求的数据
-
获取文件的真实(服务器)路径
-
方法:String getRealPath(String path) String b = context.getRealPath("/b.txt");//web目录下资源访问 System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问 System.out.println(c);
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问 System.out.println(a);
会话技术:
-
会话:
一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
-
功能:
在一次会话的范围内的多次请求间,共享数据
-
方式:
-
客户端会话技术:Cookie
-
服务器端会话技术:Session
Cookie:
-
概念:
客户端会话技术,将数据保存到客户端
-
快速入门:
使用步骤:
-
创建Cookie对象,绑定数据
new Cookie(String name, String value)
-
发送Cookie对象
response.addCookie(Cookie cookie)
-
获取Cookie,拿到数据
Cookie[] request.getCookies()
-
实现原理
-
基于响应头set-cookie和请求头cookie实现
-
-
cookie的细节
-
一次可不可以发送多个cookie?
可以 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
-
cookie在浏览器中保存多长时间?
-
默认情况下,当浏览器关闭后,Cookie数据被销毁
-
持久化存储:
setMaxAge(int seconds)
-
正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
-
负数:默认值
-
零:删除cookie信息
-
-
-
cookie能不能存中文?
在tomcat 8 之前 cookie中不能直接存储中文数据。 需要将中文数据转码---一般采用URL编码(%E3) 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
-
cookie共享问题?
-
假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
默认情况下cookie不能共享 setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录 如果要共享,则可以将path设置为"/"
-
不同的tomcat服务器间cookie共享问题?
setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享 setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
-
Cookie的特点和作用
-
cookie存储数据在客户端浏览器
-
浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
作用:
-
cookie一般用于存出少量的不太敏感的数据
-
在不登录的情况下,完成服务器对客户端的身份识别
-
JSP:入门学习:
-
概念:
Java Server Pages: java服务器端页面
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
用于简化书写!!!
-
原理
JSP本质上就是一个Servlet
-
JSP的脚本:
JSP定义Java代码的方式
<% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
-
JSP的内置对象:
在jsp页面中不需要获取和创建,可以直接使用的对象
jsp一共有9个内置对象。
学习3个:
request
response
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和out.write()的区别:
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
response.getWriter()数据输出永远在out.write()之前
Session:
-
概念:
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
-
快速入门:
-
获取HttpSession对象: HttpSession session = request.getSession();
-
使用HttpSession对象: Object getAttribute(String name) void setAttribute(String name, Object value) void removeAttribute(String name)
-
原理
Session的实现是依赖于Cookie的。
-
细节:
-
当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下。不是。
如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。 Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(60*60); response.addCookie(c);
-
客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
session的钝化:
在服务器正常关闭之前,将session对象系列化到硬盘上
session的活化:
在服务器启动后,将session文件转化为内存中的session对象即可。
-
session什么时候被销毁?
-
服务器关闭
-
session对象调用invalidate() 。
-
session默认失效时间 30分钟 选择性配置修改 <session-config> <session-timeout>30</session-timeout> </session-config>
-
-
-
session的特点
-
session用于存储一次会话的多次请求的数据,存在服务器端
-
-
session可以存储任意类型,任意大小的数据
session与Cookie的区别:
-
session存储数据在服务器端,Cookie在客户端
-
session没有数据大小限制,Cookie有
-
session数据安全,Cookie相对于不安全
-
MVC:开发模式
-
jsp演变历史
-
早期只有servlet,只能使用response输出标签数据,非常麻烦
-
后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
-
-
再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
-
MVC:
-
M:Model,模型。JavaBean
完成具体的业务操作,如:查询数据库,封装对象
-
V:View,视图。JSP
展示数据
-
C:Controller,控制器。Servlet
获取用户的输入
调用模型
将数据交给视图进行展示
-
-
优缺点:
-
优点:
-
耦合性低,方便维护,可以利于分工协作
-
重用性高
-
-
缺点:
-
使得项目架构变得复杂,对开发人员要求高
-
-
EL表达式:
-
概念:
Expression Language 表达式语言
-
作用:
替换和简化jsp页面中java代码的编写
-
语法:
${表达式}
-
注意:
jsp默认支持el表达式的。如果要忽略el表达式
-
设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
-
${表达式} :忽略当前这个el表达式
-
使用:
-
运算:
运算符:
-
算数运算符: + - * /(div) %(mod)
-
比较运算符: > < >= <= == !=
-
逻辑运算符: &&(and) ||(or) !(not)
-
空运算符: empty
功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
-
-
获取值
-
el表达式只能从域对象中获取值
-
语法:
-
${域名称.键名}:从指定域中获取指定键的值
域名称:
-
pageScope --> pageContext
-
requestScope --> request
-
sessionScope --> session
-
applicationScope --> application(ServletContext)
-
-
-
举例:在request域中存储了name=张三
获取:${requestScope.name}
2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
3. 获取对象、List集合、Map集合的值
1. 对象:${域名称.键名.属性名}
2. List集合:${域名称.键名[索引]}
3. Map集合:
${域名称.键名.key名称}
${域名称.键名["key名称"]}-
隐式对象:
el表达式中有11个隐式对象
pageContext:
获取jsp其他八个内置对象
${pageContext.request.contextPath}:动态获取虚拟目录
-
JSTL:
-
概念:
JavaServer Pages Tag Library JSP标准标签库是由Apache组织提供的开源的免费的jsp标签 <标签>
-
作用:
用于简化和替换jsp页面上的java代码
-
使用步骤:
-
导入jstl相关jar包
-
引入标签库:taglib指令: <%@ taglib %>
-
使用标签
-
常用的JSTL标签
-
if:相当于java代码的if语句
-
属性:
test 必须属性,接受boolean表达式
如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
一般情况下,test属性值会结合el表达式一起使用
-
choose:相当于java代码的switch语句
-
使用choose标签声明 相当于switch声明
-
使用when标签做判断 相当于case
-
使用otherwise标签做其他情况的声明 相当于default
-
-
foreach:相当于java代码的for语句
三层架构:软件设计架构:
-
界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
-
业务逻辑层:处理业务逻辑的。
-
数据访问层:操作数据存储文件。
Filter:过滤器:
-
概念:
生活中的过滤器:净水器,空气净化器,土匪、
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:
一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...
-
快速入门:
-
步骤:
-
定义一个类,实现接口Filter
-
复写方法
-
配置拦截路径
-
web.xml
-
注解
-
-
-
-
过滤器细节:
-
web.xml配置 <filter> <filter-name>demo1</filter-name> <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!-- 拦截路径 --> <url-pattern>/*</url-pattern> </filter-mapping>
-
过滤器执行流程
-
执行过滤器
-
执行放行后的资源
-
回来执行过滤器放行代码下边的代码
-
-
过滤器生命周期方法
-
init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
-
doFilter:每一次请求被拦截资源时,会执行。执行多次
-
destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
-
-
过滤器配置详解
拦截路径配置:
-
具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
-
拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
-
后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
-
拦截所有资源:/* 访问所有资源时,过滤器都会被执行
拦截方式配置:资源被访问的方式
注解配置:
设置dispatcherTypes属性
-
REQUEST:默认值。浏览器直接请求资源
-
FORWARD:转发访问资源
-
INCLUDE:包含访问资源
-
ERROR:错误跳转资源
-
ASYNC:异步访问资源
web.xml配置
设置<dispatcher></dispatcher>标签即可
-
-
过滤器链(配置多个过滤器)
执行顺序:如果有两个过滤器:过滤器1和过滤器2
-
过滤器1
-
过滤器2
-
资源执行
-
过滤器2
-
-
过滤器1
过滤器先后顺序问题:
-
注解配置:按照类名的字符串比较规则比较,值小的先执行
如: AFilter 和 BFilter,AFilter就先执行了。
-
web.xml配置: <filter-mapping>谁定义在上边,谁先执行
-
-
Listener:监听器:
概念:
web的三大组件之一。
事件监听机制
事件 :一件事情
事件源 :事件发生的地方
监听器 :一个对象
注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
AJAX:
-
概念:
ASynchronous JavaScript And XML 异步的JavaScript 和 XML
-
异步和同步:客户端和服务器端相互通信的基础上 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 [1]
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
提升用户的体验
-
实现方式:
-
$.ajax() 语法:$.ajax({键值对}); //使用$.ajax()发送异步请求 $.ajax({ url:"ajaxServlet1111" , // 请求路径 type:"POST" , //请求方式 //data: "username=jack&age=23",//请求参数 data:{"username":"jack","age":23}, success:function (data) { alert(data); },//响应成功后的回调函数 error:function () { alert("出错啦...") },//表示如果请求响应出现错误,会执行的回调函数
dataType:"text"//设置接受到的响应数据的格式 ? });
-
$.get():发送get请求
语法:$.get(url, [data], [callback], [type])
参数:
url:请求路径
data:请求参数
callback:回调函数
type:响应结果的类型
-
$.post():发送post请求
语法:$.post(url, [data], [callback], [type])
参数:
url:请求路径
data:请求参数
callback:回调函数
type:响应结果的类型
-
JSON:
-
概念:
JavaScript Object Notation JavaScript对象表示法
-
语法:
-
基本规则 数据在名称/值对中:json数据是由键值对构成的 键用引号(单双都行)引起来,也可以不使用引号 值得取值类型:
-
数字(整数或浮点数)
-
字符串(在双引号中)
-
逻辑值(true 或 false)
-
数组(在方括号中) {"persons":[{},{}]}
-
对象(在花括号中) {"address":{"province":"陕西"....}}
-
null
-
-
-
-
-
-
数据由逗号分隔:多个键值对由逗号分隔 花括号保存对象:使用{}定义json 格式 方括号保存数组:[]
1. 获取数据:
-
json对象.键名
-
json对象["键名"]
-
数组对象[索引]
-
遍历
-
-
JSON数据和Java对象的相互转换
-
JSON解析器:
-
常见的解析器:Jsonlib,Gson,fastjson,jackson
-
JSON转为Java对象
-
导入jackson的相关jar包
-
创建Jackson核心对象 ObjectMapper
-
调用ObjectMapper的相关方法进行转换
-
readValue(json字符串数据,Class)
-
Java对象转换JSON
-
使用步骤:
-
导入jackson的相关jar包
-
创建Jackson核心对象 ObjectMapper
-
调用ObjectMapper的相关方法进行转换 1. 转换方法: * writeValue(参数1,obj): 参数1: File:将obj对象转换为JSON字符串,并保存到指定的文件中 Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中 OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中 * writeValueAsString(obj):将对象转为json字符串
2. 注解: 1. @JsonIgnore:排除属性。 2. @JsonFormat:属性值得格式化 * @JsonFormat(pattern = "yyyy-MM-dd") 3. 复杂java对象转换 1. List:数组 2. Map:对象格式一致
-
-
-
-
-
-
-
-
-
-
-
-
-
以上是关于JavaWeb知识点大致梳理的主要内容,如果未能解决你的问题,请参考以下文章