复习日记-xml/tomcat/response/request
xml:
可扩展的标签语言
标签自定义
作用:存储数据
书写规范:
1.区分大小写
2.应该有一个根标签
3.标签必须关闭
4.属性必须用引号括起来
5.标签体中的空格或者换行、制表符等都是作为数据内容存在
6.特殊字符必须转义
xml组成部分:
声明:<?xml ...?>
标签:
不能以xml开头、必须关闭、不能出现特殊字符
属性:用引号引起来
注释:
CDATA:
xml文件中的特殊字符必须转义,但是使用CDATA就可以不需要转义,直接原样输出
cdata格式:
<![CDATA[
原样输出的内容
]]>
/////////////////////////////////////////////////////////////////////////
xml解析
解析方式:
1.sax解析:从上到下逐行解析,只能查询,不支持增删改
2.dom解析:一次性将文档加载到内存中,形成一棵dom树,可以进行crud操作
解析技术:
JAXP:sun提供的dom和sax开发包
JDom:dom解析方式
jsoup:一种处理HTML特定解析开发包
dom4j:常用的解析开发包,hibernate底层使用
//////////////////////////////////////////////////////////////////////////
反射:
1.获取class对象的方式
1.Class clazz = Class.forName("全限定名");
2.Class clazz = 类名.class;
3.Class clazz = 对象.getClass();
2.通过class对象创建一个实例对象(相当于new类)
object clazz.newInstance();
3.通过class对象获取一个方法
Method method = clazz.getMethod("方法名",Class ... paramType);
Class ... 表示参数个数可变、paramType表示参数类型
4.方法执行;
method.invoke(Object 实例对象,Object 参数); 例如:method(a,10,30);
xml约束:一个xml文件只可以有一个DTD约束,可以有多个scheme约束
作用:规定xml中可以出现哪些元素以及属性,以及它们出现的顺序
约束的分类:
DTD约束:struts2、hibernate等
schema约束:tomcat、spring等
DTD约束:
和xml关联:
内部关联
格式:<!DOCTYPE 根元素名 [dtd语法]>
外部关联-系统关联
格式:<!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
外部关联-公共关联
格式:<!DOCTYPE 根元素名 PUBLIC "DTD约束文件名称" "约束文件的位置">
SCHEMA约束:
一个xml文档可以有多个schema约束
xml和schema的关联
格式:
<根标签 xmlns="..." ...>
<根标签 xmlns:别名="..." ...>
名称空间;
关联约束文件
例如:一个约束文件中有table,另一个约束文件中也有table,在同一个xml中同时引入这两个schema约束,一旦写一个table,应该使用哪一个约束呢?
为了避免这种情况发生,可以给其中一个约束起一个别名,使用的时候若是没有加别名就代表来自于没有别名的约束文件
例如a:table和table
显然:在一个xml文件中只能有一个不起别名的schema约束
tomcat:
下载;
.tar .tar.gz这种结尾是提供给Linux系统使用的
.zip .exe这种结尾是提供给Windows系统使用的
tomcat默认端口是8080,但是项目上线时基本修改为80端口,因为80是HTTP的端口号,且在浏览器中可以省略不写
有可能出现的问题:在环境变量中配置了CATALINA_HOME(tomcat的地址),这会导致无论安装几个tomcat都只会启动该变量所注明的那个
解决:删掉
通过类加载器获取文件路径(处于classes目录下的文件)
类.class.getClassLoader().getReousrce("文件路径").getPath()
类.class.getClassLoader().getReousrceAsStream("文件路径") 返回一个流
////////////////////////////////////////////////////////////////
response:
302:重定向
304:读缓存
404:用户访问错误,资源不存在
405:访问的方法不存在
500:服务器内部错误
常用方法:
setStatus(int 状态码):针对于1xx、2xx、3xx 配合location响应头使用
了解:
sendError(int 状态码):针对于4xx、5xx
常用响应头:
location:重定向
refresh:定时刷新
content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开
content-disposition:文件下载需要的响应头
重定向实现方式:
1.response.setStatus(302); response.setHeader("location","地址");
2.封装以上两步:response.setRedirect("地址");
定时刷新:
方案一:设置响应头refresh
方案二:通过HTTP的<meta>标签 <meta http-equiv=“refresh" content="3;url=..."> 三秒以后跳转到url地址
操作响应体:
页面上要展示的内容
常用方法;
Writer getWriter():字符流
ServletOutputStream getOutputStream():字节流
注意:自己写的东西用字符流,其余用字节流,但是这两个流不可以一起使用(互斥),当响应完成之后,服务器会判断流是否关闭,若没有服务器自动帮关闭
处理响应的中文乱码:
方式一:response.setContentType("text/html";charset=utf-8);
方式二:未封装前:response.setHeader("content-type","text/html;charset=utf-8");
////////////////////////////////////////////////////
文件下载:
下载方式:
1.超链接下载
若浏览器可以解析下载资源的MIME类型,则自动打开,若不能解析则下载
2.编码下载 通过servlet完成
<a href="...servletname?name=资源名">下载</a>
1.设置文件mime类型 response.setContentType(类型)
2.设置下载头信息 content-disposition
response.setHeader("content-disposition","attachment;filename="+文件名)
3.提供流
response.getOutputStream()
扩展:使用commons-io工具包操作流
扩展:通过response生成验证码
验证码:通过Java生成的验证码放在session中,在后台和用户输入的进行对比
作用:防止暴力攻击
request:
重要的请求头;
user-agent:浏览器内核
referer:页面来源,防盗链
请求的中文乱码:
get请求:参数追加到地址栏,会使用utf-8编码,服务器接收到请求之后,使用ios-8859-1解码,所以出现乱码
post请求:参数存放在请求体中,服务器获取请求体时使用iso8859-1解码,也会出现乱码
通用的方式:get和post都可以使用
new String(参数.getBytes("iso8859-1"),"utf-8");
针对post请求还有一种处理方式:只需要将请求流的编码设置成utf-8
request.setCharacterEncoding("utf-8");
扩展:URLEncode.encode(s,"utf-8");指定编码
URLDecode.decode(s,"iso8859-1");指定解码
中文下载扩展:
中文名称的文件名下载的时候名称会出现乱码问题,导致找不到指定资源,因此需要iso--->utf-8
常见的浏览器需要提供文件名称的utf-8编码的东西
对于火狐浏览器需要提供文件名称的base64编码
请求转发:一次会话,request域和session域数据共享
请求转发和重定向的区别;
重定向两次请求、地址栏改变,请求转发一次请求,地址栏不变
重定向是从浏览器发送的,请求转发是服务器内部转发,路径不一样
重定向不存在request域对象,请求转发可以使用request域对象
重定向是response的方法,请求转发是request的方法
重定向可以请求站外资源,请求转发不可以
//////////////////////////////////////////////////////////////////////////////////
jsp: java server pages Java服务器页面
本质上是一个servlet,在HTML上嵌套Java代码
运行在服务器端,处理请求、生成动态内容
对应的Java和class文件在tomcat目录下的work目录
注意:新建的jsp文件默认charset=iso,可以去eclipse修改默认设置
执行流程;
1.浏览器发送请求,jspservlet找到对应的jsp文件
2.服务器接收请求,JspServlet会帮我们查找对应的jsp文件
3.服务器将对应的JSP页面翻译成.java文件
4.jvm会将Java编译成.class文件
5.服务器运行class文件,生成动态内容
6.将内容发送给服务器,服务器组装成响应信息发送给浏览器
7.浏览器接收数据,解析展示
session底层依赖于cookie
cookie:JSESSIONID=...