标签:page request对象 str 转化 开源 bre jsoup 特殊字符 获取对象
Extensible Markup Language 可扩展标记语言
标签自定义
存储数据
xml标签都是自定义的,html标签是预定义。
xml的语法严格,html语法松散
xml是存储数据的,html是展示数据
xml文档的后缀名 .xml
xml第一行必须定义为文档声明
xml文档中有且仅有一个根标签
属性值必须使用引号(单双都可)引起来
标签必须正确关闭
xml标签名称区分大小写
文档声明
指令
标签
属性
文本
框架使用者
分类
DTD
Schema
操作xml文档
解析
写入
解析xml的方式
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
SAX:逐行读取,基于事件驱动的
xml常见的解析器
JAXP
DOM4J
Jsoup
PULL
C/S:客户端/服务器端
B/S:浏览器/服务器端
静态资源:用户访问后一样(静态资源可以直接被浏览器解析)
html,css,JavaScript
动态资源:用户访问不一样(动态资源被访问后,需要转换为静态资源,再返回给浏览器)
servlet,jsp,php,asp
IP:电子设备在网路中的唯一标识
端口:应用程序在计算机中的唯一标识符 0~65536
传输协议:规定了数据传输的规则(tcp:安全协议,三次握手,速度稍慢。udp:不安全协议,速度慢)
安装了服务器软件的计算机
接收用户的请求,处理请求,做出响应
让用户通过浏览器访问项目
webLogic
webSphere
JBOSS
Tomcat
Java语言在企业级开发中使用的技术规范总和,一共规定了13项大的规范
#####
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
<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会将字节码文件加载进内存,并且创建其对象
调用其方法
创建 init方法
提供服务 service方法
销毁 destroy方法
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
?
* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
?
* HttpServlet:对http协议的一种封装,简化操作
1. 定义类继承HttpServlet
2. 复写doGet/doPost方法
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和response对象是由服务器创建的。我们来使用它们
request对象是来获取请求消息,response对象是来设置响应消息
ServletRequest -- 接口 | 继承 HttpServletRequest -- 接口 | 实现 org.apache.catalina.connector.RequestFacade 类(tomcat)
获取请求消息数据
获取请求行数据
方法:
获取请求方式 :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
客户端发送给服务器端的数据
数据格式:
请求行
请求头
请求空行
请求体
服务器端发送给客户端的数据
相应行
组成:协议/版本 响应状态码 状态码描述
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
状态码都是3位数字
分类
1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2xx:成功。代表:200
3xx:重定向。代表:302(重定向),304(访问缓存)
4xx:客户端错误。
404(请求路径没有对应的资源)
405:请求方式没有对应的doXxx方法
5xx:服务器端错误。代表:500(服务器内部出现异常)
相应头
常见的响应头:
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据
相应空行
相应体
设置响应消息
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
setHeader(String name, String value)
获取输出流
字符输出流:PrintWriter getWriter() 字节输出流:ServletOutputStream getOutputStream()
使用输出流,将数据输出到客户端浏览器
代表整个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对象,绑定数据
new Cookie(String name, String value)
发送Cookie对象
response.addCookie(Cookie cookie)
获取Cookie,拿到数据
Cookie[] request.getCookies()
基于响应头set-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一般用于存出少量的不太敏感的数据
在不登录的情况下,完成服务器对客户端的身份识别
Java Server Pages: java服务器端页面
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
用于简化书写!!!
JSP本质上就是一个Servlet
JSP定义Java代码的方式
<% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
在jsp页面中不需要获取和创建,可以直接使用的对象
jsp一共有9个内置对象。
学习3个:
request
response
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和out.write()的区别:
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
response.getWriter()数据输出永远在out.write()之前
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。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与Cookie的区别:
session存储数据在服务器端,Cookie在客户端
session没有数据大小限制,Cookie有
session数据安全,Cookie相对于不安全
早期只有servlet,只能使用response输出标签数据,非常麻烦
后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
M:Model,模型。JavaBean
完成具体的业务操作,如:查询数据库,封装对象
V:View,视图。JSP
展示数据
C:Controller,控制器。Servlet
获取用户的输入
调用模型
将数据交给视图进行展示
优点:
耦合性低,方便维护,可以利于分工协作
重用性高
缺点:
使得项目架构变得复杂,对开发人员要求高
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}:动态获取虚拟目录
JavaServer Pages Tag Library JSP标准标签库是由Apache组织提供的开源的免费的jsp标签 <标签>
用于简化和替换jsp页面上的java代码
导入jstl相关jar包
引入标签库:taglib指令: <%@ taglib %>
使用标签
if:相当于java代码的if语句
属性:
test 必须属性,接受boolean表达式
如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
一般情况下,test属性值会结合el表达式一起使用
choose:相当于java代码的switch语句
使用choose标签声明 相当于switch声明
使用when标签做判断 相当于case
使用otherwise标签做其他情况的声明 相当于default
foreach:相当于java代码的for语句
界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
业务逻辑层:处理业务逻辑的。
数据访问层:操作数据存储文件。
生活中的过滤器:净水器,空气净化器,土匪、
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>谁定义在上边,谁先执行
web的三大组件之一。
事件监听机制
事件 :一件事情
事件源 :事件发生的地方
监听器 :一个对象
注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
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:响应结果的类型
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:对象格式一致
标签:page request对象 str 转化 开源 bre jsoup 特殊字符 获取对象
原文地址:https://www.cnblogs.com/yfyyy/p/12274293.html