客户端访问地址 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>