http 状态码
100-199:表示信息性代码,请求正在进行。
200-299:请求成功
300-399:表示用于已经移走的资源文件。指示新地址。
400-499:表示又客户端引发的错误
500-599:表示由服务器端引发的错误
设置状态码。
Response.setStatus(num);
设置错误信息。
responser.sendeError(404,“not find”);
设置状态码300-399
Response.setStaus(302);
repponse.setHeader(“Location”,”资源网页”) 资源重定向。
编码集设置 :
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
设置响应内容的类型,设置mime类型
什么是mime类型。 告诉浏览器,服务器发送回去的数据类型是什么,客户端启动相应的应用程序来处理响应的内容。
Response.setcontentType(“text/html;charset=utf-8”); 按照utf-8的格式解析
通过响应头设置mime类型。
.setheader(“contentType”,”text/html;charset=utf-8”); tomcat 默认编码集是ISO8859-1;
设置内容在传输的过程中编码格式.
SetcharsetEncoding();
自动刷新功能
.setHeader(“refresh”,”秒数;index.jsp”);
控制数据无法缓存
.setHeader(“Pragma”,”No-cache”)
.setHeader(“Cache-Contorl”,”No-cache”)
.serHeader(“Expires”,system.cuttentTimerMillis(毫秒数)) 设置过期时间。
设置消息体
输出流对象。
PrintWriter out =Resp.getWriter(); 字符输出流对象
Out.print() 输出所有格式
Out.write() 只能输出字符
Print和write
共同点:两者都不会刷新页面。只在原来的页面上写数据。两个方法都是重写了writer类里面的weiter方法
不同点:print可以将不同的数据转换为字符串输出,writer只能操作,字符,字符数组,字符串。
获取到字节流输出对象
OutputStream os= Response.getoutputStream();
将字符串转化成字节数组,再输出
字符串.getBytes()
下载文件
1、设置响应编码集
2、获取文件要下载的路径,通过上下文对象获取到文件的物理路径
.getServletContext().getRealPath(“路径”)
3、设置响应头,控制浏览器打开下载框
Resp.serHeader(“content-disposition”,”attchment;filename=”+”文件名”)
中文文件
Resp.serHeader(“content-disposition”,”attchment;filename=”+
New String(文件名.getbytes(“”),”服务器编码集”))
4、获取到图片的二进制流
//---FileReader fr = new FileReader(path);字符流
Inputstrem in =new fileinpitstrem(path);
5、创建一个二进制流
//---printwiter out=resp.getwriter();
Outputstrem out= resp.getoutputstrem();
6、创建缓存区
Int len=0;
Byte b=new byte[1024];
While((len=in.read(b))>0){
Out.writer(by,0,len);
}
通过字符流操作二进制的文件,可能出现内容丢失。
重定向
1Resp.sendrditect (“目标网页”);
2 设置响应头的方式 Response.setStaus(302);
repponse.setHeader(“Location”,”资源网页”)
内容:
1.重定向的状态码是302,表示资源被移走,重新请求新的资源
2.重定向是客户端发起的两次请求。
3.调用sendredirect方法可以不用设置状态码
使用servlet处理http请求
提交方法
Doget:用于获取到服务器的资源
1.地址栏直接输入服务器资源
2,通过js直接访问
3,超链接访问。
Dopost :
主要是用于传输数据,客户端向服务器发送数据。文本、二进制的数据。
使用:1请求一个静态页面或者图形文件时使用get方法。因为仅仅需要发送文件名
2发送大数据使用post 因为没有大小限制
3上传文件时用post
4发送保密信息时使用post
获取到请求行的内容。
获取到客户请求的方法
String Method =Requ.getMethod();
获取到请求的url地址 --url统一资源定位符
String url =requ.getrequestUrl().toString()
获得uri --uri统一资源标识符
requ.getrequestUri()
获取到请求附带的参数;
Requ.getqueryString()
获取到客户端的ip
Requ.getremoteaddr();
获取到服务器的内容
Requ.getlocalPort(); 端口返回int类
获取到请求头:
Requ.getheader(“name”);
获取到所有的请求头
Enumeration num = req.getheaderName(); 返回枚举
Getdateheader(); 返回日期类型。
setChacrEcncoding();
Requ.getparameter(“key”);
获取到客户端传递的多个数据。
Requ.getparametervalues(“key”)
遍历--
请求派发:
整个过程是在服务器端完成。(客户端只需要发一次请求)
Reqdispatcher rd= Req.getreqdispatcher(“跳转页面”)
Rd.forward(req,resp)
当前请求派发后这个资源就将控制权移交给下一个资源。
但是java'代码任然要执行。
Include(req,resp)
包含:将其他资源的内容包含到本资源来,最终控制权会回到该服务器上。
请求派发和重定向的区别
1.请求派发的状态307 重定向是302
2.请求派发是在服务器端完成,不影响客户端,地址栏不会发生变化。
3.请求派发只能在本服务器完成,重定向是可访问其他服务器的资源。
4. 重定向加/ Js提交、超链接提交、重定向、都要加上项目名字。提交的路径是找到webapps目录(不加/是相对路径)
请求提交
Js提交、超链接提交、重定向、都要加上项目名字。
请求派发默认调用dopost