一、Tomcat与Servlet入门
1.http协议
特点:基于请求和响应的模型,必须先有请求后有响应,必须成对出现。
请求部分:
u 请求行的提交方式:GET和POST的区别:
l GET的提交参数会显示在地址栏上,POST不显示
l GET有大小限制,POST没有
l GET没有请求体,POST有请求体
u 请求头:都是键值对的形式显示的
l User-Agent 浏览器类型。用于文件下载等
l Referer 网页来源。用于防盗链
l If-Modified-Since 与响应头中的Last-Modified一起查找本地缓存
u 请求体:POST方式提交的参数
响应部分:
u 响应行:
l 状态码:200-成功 302-重定向 304 查找本地缓存 404 资源不存在 500-服务器内部错误
u 响应头:键值对
l Last-Modified
l Content-Disposition 文件下载使用的头信息
l Location 重定向的跳转路径
l Refresh 定时刷新/跳转
u 响应体:显示浏览器的页面的内容
2.Servlet
SUN公司提供的动态网页开发技术,是运行在WEB服务器上的Java程序。
Servlet的生命周期
何时创建:用户第一次访问Servlet
何时销毁:项目从服务器移除,或者关闭服务器的时候
//说明Servlet是单例的
用户第一次访问Servlet时,服务器创建Servlet实例,执行Servlet中的init(),任何一次请求服务器都会创建一个新的线程访问Servlet中的service方法,在service方法内部根据请求方式调用doXXX方法,当项目移除或者关闭服务器时,Servlet实例就会被销毁,执行destroy()。
ServletContext 作用:
1.用来获得全局初始化参数
2.用来获得MIME类型
3.作为域对象存取对象
4.读取web工程下的文件
5秒跳转,设置响应头
response.setHeader("Refresh","5;url=/day09/demo5-refresh/index.html");
或直接在html的meta标签中设置,然后response重定向或转发
<meta http-equiv="Refresh"content="5;url=/day09/demo5-refresh/index.html"/>
设置响应码302重定向,然后设置响应头
response.setStatus(302);
response.setHeader("Location","/day09/demo5-refresh/success.html");
直接response.sendRedirect(””);比较省事
二、request和response
1.response
文件下载的方式
1.超链接直接下载,讲文件的地址写在href中,当浏览器支持这种格式时,会直接显示。
2.设置两个头一个流
Content-Type:文件的MIME类型
Content-Disposition:以下载的形式打开文件
InputStream:文件的输入流
向页面响应的方法:
getOutputStream();
getWriter();
做出响应的时候只能能使用其中一种。
输出中文乱码的处理
下载名称中文乱码:
response.setHeader(“Content-Disposition”,”attachment;filename=”+filename)
字节流:
设置浏览器打开的编码:
response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
设置中文字节取出时的编码
.getBytes(“UTF-8”);
字符流:
设置浏览器打开时的编码:
response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
设置response缓冲区的编码
response.setCharacterEncoding(“UTF-8”);
也可以用response.setContentType(”text/html;charset=UTF-8”)
2.request
处理request接受中文参数乱码问题
POST:
post的参数在请求体中,直接到达后台的Servlet,数据封装在Servlet的request中,request也有一个缓冲区,是ISO-8859-1编码,所以要在接收参数前设置缓冲区编码。
request.setCharacterEncoding(“UTF-8”);
GET:
1.使用URLEncoder和URLDecoder进行编码和解码操作
2.使用String的构造方法
重定向和转发的区别
1.重定向的地址栏会发生变化,转发地址栏不变
2.重定向两次请求两次响应,转发一次请求一次响应
3.重定向路径需要加工程名,转发不需要
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发
5.请求转发可以共享request域,重定向不能共享,因为第一次的request对象已经被销毁了。