客户端访问地址 tomcat从web.xml中根据地址 找到servlet类
并创建servlet对象 (第一次访问) 包含
(请求信息封装)请求对象和
(空/从中获取响应信息)响应对象 servlet对象对其进行操作
servlet 对象 写入响应缓冲区+响应...封装
public class Servlet01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {
//添加响应头
response.addHeader("name", "zhangsan"); //字符串
response.addHeader("name", "lisi"); //多个值逗号拼接
response.addIntHeader("age", 28); //整形数字
Date date=new Date()
long bir=date.getTime()
response.addDateHeader("birthday", bir); //长数字
//设置响应头 没有添加 有修改
response.setHeader("name", "wangwu");
response.setIntHeader("age", 29);
response.setDateHeader("birthday", 10000000000L);
//重定向 在doGet()方法末尾
//response.setStatus(302); //设置响应行 状态码 302:重定向
//response.setHeader("Location", "/WEB0003/Servlet02");//重定向地址
response.sendRedirect("/WEB0003/Servlet02");//重定向+地址
//设置定时跳转 五秒以后跳转到百度
//response.setHeader("refresh", "5;url=https://www.baidu.com");
//设置字体 响应的流不用关
PrintWriter writer=response.getWriter();//响应字符缓冲区对象
ServletOutputStream out=response.getOutputStream();
response.getOutputStream()和response.getWriter() 只能调一个
//response.setCharacterEncoding("utf-8"); //文字编码格式
//response.setHeader("Content-Type", "text/html;charset=UTF-8");
//客户端解码格式
response.setContentType("text/html;charset=UTF-8");//编码解码格
writer.write("中国");//写入响应对象的缓冲区
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
WebContent/index.jsp: 5秒后跳转
<body>
恭喜你,注册成功
<span id="second" style="color:red">5</span>秒以后跳转,
如不跳转点击<a href="https://www.baidu.com">这里</a>
</body>
</html>
<script>
window.onload=function(){/*跳转倒计时*/
var time=5;
var secondEle=document.getElementById("second");
var timer=setInterval(function(){
secondEle.innerHTML=time;
time--;
if(time==0){
clearInterval(timer);
location.href="https://www.baidu.com";/*跳转*/
}
},1000);
}
</script>
通过响应,下载文件
通过响应 下载文件
WebContent/download.jsp:http://localhost:8080/WEB0003/download.jsp
<body>
<h1>a标签指向服务器资源位置 浏览器 不能解析的才下载</h1>
<a href="/WEB0003/download/a.txt">a.txt</a>
<h1>使用服务器端编码的方式实现文件的下载</h1>
<a href="/WEB0003/DownloadServlet?filename=骚猪.txt">骚猪.txt</a>
</body>
public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
//获取要下载的文件名称
String filename=request.getParameter("filename");
//解决request对象中get方式 解决中文乱码//ISO解码utf-8编码
filename=new String(filename.getBytes("ISO8859-1"),"utf-8");
//获取User-Agent信息(哪个浏览器)
String agent=request.getHeader("User-Agent");
//根据不同浏览器对文件名进行不同的编码(解决无文件名问题)
String filenameEncoder="";
if (agent.contains("MSIE")) { // IE浏览器
filenameEncoder= URLEncoder.encode(filename, "utf-8");
filenameEncoder= filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) { // 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder= "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else { // 其它浏览器
filenameEncoder= URLEncoder.encode(filename, "utf-8");
}
//告知客户端浏览器该文件的MIME类型
String filemime=getServletContext().getMimeType(filename);
response.setContentType(filemime);
//告知浏览器该文件以附件的形式下载 而不是 解析
response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder);
String realpath=this.getServletContext().getRealPath("download/"+filename);//获取该文件在服务器上的绝对路径
FileInputStream fis=new FileInputStream(realpath); //数据源
ServletOutputStream out=response.getOutputStream(); //目的地
int len=0;
byte[] bytes=new byte[1024];
while((len=fis.read(bytes))!=-1){ //复制文件
out.write(bytes,0,len);
}
fis.close(); //释放资源
}
public void doPost(...){doGet(request, response);}
}
验证码服务
src/com.oracle.demo02/CheckImgServlet.java 复制到 路径下 验证码服务
WebContent/WEB-INF/new_words.txt 验证码词库
WebContent/WEB-INF/web.xml添加:
<servlet>
<servlet-name>CheckImgServlet</servlet-name>
<servlet-class>com.oracle.demo02.CheckImgServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckImgServlet</servlet-name>
<url-pattern>/CheckImgServlet</url-pattern>
</servlet-mapping>
WebContent/register.jsp添加:
<body>
<form action="#" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
验证码:<input type="text" name="code"><br>
<img src="/WEB0003/CheckImgServlet" onclick="checkImg(this)">
<input type="submit" value="提交">
</form>
</body>
<script>
function checkImg(obj){//每点击一次 请求一次 请求参数为时间戳
obj.src="/WEB0003/CheckImgServlet?time="+new Date().getTime();
}
</script>
来源:oschina
链接:https://my.oschina.net/u/4321246/blog/3671982