Web基础之Request对象和Response对象项目实战

来源:互联网 发布:世界历史书 知乎 编辑:程序博客网 时间:2024/06/09 16:56

Web基础之Request对象和Response对象项目实战

一、知识回顾:

Request请求对象:主要的作用是获取客户端提交过来的参数,以及转发请求等;
Response响应对象:主要作用是处理客户端的请求;可以设置响应状态,响应正文等一系列响应信息;
对两个对象的API有一定的了解;

二、项目实战:
项目实战1:简单的登录验证
项目实战2:图片下载
项目实战3:文件列表下载

整体项目结构:


、项目源代码:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>登录界面</title></head><body><div style="text-align: center">欢迎注册华信会员</div><form action="mylogin" method="POST"><div style="text-align: center"><span>用户名:</span>:<input type="text" name="userName"><br /><span>密   码:</span><input type="text" name="pwd"><br /><input type="submit" value="确定"><input type="reset"value="重置"></div></form></body></html>

package com.hx.login;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet{private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置请求编码,防止乱码(POST请求方式)req.setCharacterEncoding("UTF-8");//获取客户端提交过来的用户名和密码String name=req.getParameter("userName");String pwd=req.getParameter("pwd");//登录校验if("刘让洲".equals(name)&&"123456".equals(pwd)){writeResponse(resp, "恭喜您登陆成功!");}else{writeResponse(resp, "登陆失败!");}}protected void writeResponse(HttpServletResponse resp,String content) throws IOException {//设置响应类型以及浏览器的解析编码resp.setContentType("text/html;charset=utf-8;");//响应正文输出resp.getWriter().write(content);}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req, resp);}}

package com.hx.login;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DownLoadImageServlet extends HttpServlet{private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//1.拿到图片的路径String path =req.getServletContext().getRealPath("/img/pic1.jpg");//2.获取图片的输入流InputStream in = new FileInputStream(path);//3.设置相应头String contentType=req.getServletContext().getMimeType(".jpg");//3.1设置响应正文的MIME类型resp.setContentType(contentType);//3.2设置响应正文的长度resp.setContentLength(in.available());//3.3.设置下载文件的描述信息resp.setHeader("Content-Disposition","attachment;fileName=dowmload.jpg");//4.输出响应正文OutputStream out =resp.getOutputStream();byte [] bytes = new byte[1024];int len =in.read(bytes);while(len!=-1){out.write(bytes, 0, len);len =in.read(bytes);}//关闭流in.close();}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}}

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>可下载文件列表</title></head><body style="text-align: center"><divstyle="width: 250px; height: 180px; text-align: center; margin: 0 auto"><table border="2"><caption>可下载文件列表</caption><tr><th>序号</th><th>文件名</th><th>操作</th></tr><tr><td>1</td><td>JDBC.docx</td><td><ahref="http://localhost:8080/Servlet03/comdown?fileName=JDBC.docx">下载</a></td></tr><tr><td>2</td><td>pic1.jpg</td><td><ahref="http://localhost:8080/Servlet03/comdown?fileName=pic1.jpg">下载</a></td></tr><tr><td>3</td><td>WEB BASE.xlsx</td><td><ahref="http://localhost:8080/Servlet03/comdown?fileName=WEB BASE.xlsx">下载</a></td></tr></table></div></body></html>

package com.hx.login;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CommonDownLoadServlet extends HttpServlet{private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//判断是否盗链,不懂可以略过String referer =req.getHeader("Referer");if(referer!=null && !"".equals(referer.trim())){int index0 =referer.lastIndexOf("/");String temp =referer.substring(0,index0);index0=temp.lastIndexOf("/");String srcAddress=temp.substring(index0);String contextPath=req.getContextPath();if(!srcAddress.equals(contextPath)){resp.sendError(404, "你个盗链狗!");return;}}//获取要下载的文件名String fileName=req.getParameter("fileName");//判断文件是否为空if(fileName==null || "".equals(fileName.trim())){//设置响应正文,防止乱码resp.setContentType("text/html;charset=utf-8");//resp.sendError(404,"请指定下载文件名称!");resp.getWriter().write("请指定下载文件名称!");return;}//获取要下载文件的MIME类型int index=fileName.lastIndexOf(".");String mimeType=null;//如果文件没有后缀,则将文件mime类型设置问二进制文件if(index<0){mimeType=req.getServletContext().getInitParameter(".bin");}else{//拿到文件的后缀String subfix=fileName.substring(index);mimeType=req.getServletContext().getMimeType(subfix);if(mimeType==null || "".equals(subfix.trim())){mimeType=req.getServletContext().getInitParameter(".bin");}}//获取文件输入流InputStream in = req.getServletContext().getResourceAsStream("/File/"+fileName);//设置响应头String contentType=req.getServletContext().getMimeType(mimeType);resp.setHeader("Content-Type", contentType+";charset=UTF-8;");resp.setContentLength(in.available());resp.addHeader("Content-Disposition", "attachment;fileName="+fileName);OutputStream out =resp.getOutputStream();byte [] bytes=new byte[1024];int len =in.read(bytes);while(len!=-1){out.write(bytes, 0, len);len =in.read(bytes);}//关闭流in.close();}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req, resp); }}


配置文件信息:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>Servlet03</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>    <servlet>  <servlet-name>login</servlet-name>  <servlet-class>com.hx.login.LoginServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>login</servlet-name>  <url-pattern>/mylogin</url-pattern>  </servlet-mapping>    <servlet>  <servlet-name>download</servlet-name>  <servlet-class>com.hx.login.DownLoadImageServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>download</servlet-name>  <url-pattern>/down</url-pattern>  </servlet-mapping>    <servlet>  <servlet-name>comdownload</servlet-name>  <servlet-class>com.hx.login.CommonDownLoadServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>comdownload</servlet-name>  <url-pattern>/comdown</url-pattern>  </servlet-mapping>  </web-app>


三、项目运行效果:

简单登录验证:









单张图片下载:





文件列表下载:点击下载即可下载相应的文件到本地;



四、总结
1、对Request对象和Response对象有了更加深刻的了解;
2、知道Request对象和Response对象的API该怎么应用;
3、通过做出文件下载知道了原来网络上下载文件的原理;
共勉!

原创粉丝点击