导读
1.Http协议请求流程
2.对响应操作
Http协议请求流程
对响应操作
HttpServletResponse resp
//在页面显示内容
字符输出 PrintWriter pw=resp.getWrite();
//设置内容类型
resp.setContentType
实例:
package com.oracleoaec.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应头--响应正文的编码集格式(解决响应中文乱码问题,下边的更常用)
// resp.setHeader("Content-Type", "text/html; charset=utf-8");
//解决响应正文的中文乱码问题
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.write("<a href='#'>罗玉凤</a>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
字节输出 ServletOutputStream os = resp.getOutputStream();
实例
package com.oracleoaec.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置资源转化类型,可以百度查HttpContentType资源表
resp.setContentType("image/jpeg");
ServletOutputStream os = resp.getOutputStream();//获得字节输出流
//边读边写
//图片资源
File file = new File("C:\\Users\\Administrator\\Desktop\\教学课堂笔记\\images\\m.jpg");
InputStream is = new FileInputStream(file);//字节读取流
//缓冲区
byte[] b = new byte[1024*1024];
int a = -1;//每次读取到的数量
while((a=is.read(b))!=-1){//循环读
os.write(b, 0, a);//循环写
}
is.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
生成验证码
首先要导入jar包ValidateCode.jar到WebContent->WEB-INF->lib
package com.oracleoaec.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.dsna.util.images.ValidateCode;
public class ServletDemo3 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//width 宽
//height 高
//codeCount 验证码的数量
//lineCount 干扰线的数量
ValidateCode vc = new ValidateCode(120, 20, 4, 9);
//在服务器后台打印验证码
System.out.println(vc.getCode());
vc.write(resp.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//设置响应头信息
resp.setHeader(String name, String value)
实例
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 通过路径得到一个输入流
String path = "D:\\阿里巴巴 Java 开发手册.pdf";
FileInputStream fis = new FileInputStream(path);
// 创建字节输出流
ServletOutputStream sos = resp.getOutputStream();
// 得到要下载的文件名
String filename = path.substring(path.lastIndexOf("\\") + 1);
// 设置文件名的编码
filename = URLEncoder.encode(filename, "UTF-8");// 将不安全的文件名改为UTF-8格式
// 告知客户端要下载文件
resp.setHeader("content-disposition", "attachment;filename=" + filename);
// 文件下载http://tool.oschina.net/commons
resp.setHeader("content-type", "application/pdf");
// 执行输出操作
int len = 1;
byte[] b = new byte[1024*1024];
while ((len = fis.read(b)) != -1) {
sos.write(b, 0, len);
}
sos.close();
fis.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//请求重定向
sendRedirect(String location)
实例
package com.oracleoaec.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//逻辑验证
System.out.println("我是S5");
int a = 1;
if(a!=1){
//跳转资源到doS2
resp.sendRedirect("doS2");//重定向到doS2
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
图解
补充
//告知浏览器使用什么码表
resp.setHeader("content-type", "text/html;charset=UTF-8");
//告知客户端不缓存
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");
resp.setDateHeader("expires", 0);
//设置响应状态码
resp.setStatus(int sc)