Web基础之Request对象和Response对象项目实战
2017-05-30 10:20
429 查看
Web基础之Request对象和Response对象项目实战
一、知识回顾:
Request请求对象:主要的作用是获取客户端提交过来的参数,以及转发请求等;
Response响应对象:主要作用是处理客户端的请求;可以设置响应状态,响应正文等一系列响应信息;
对两个对象的API有一定的了解;
二、项目实战:
项目实战1:简单的登录验证
项目实战2:图片下载
项目实战3:文件列表下载
整体项目结构:
三、项目源代码:
配置文件信息:
三、项目运行效果:
简单登录验证:
单张图片下载:
文件列表下载:点击下载即可下载相应的文件到本地;
四、总结
1、对Request对象和Response对象有了更加深刻的了解;
2、知道Request对象和Response对象的API该怎么应用;
3、通过做出文件下载知道了原来网络上下载文件的原理;
共勉!
一、知识回顾:
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"> <div style="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><a href="http://localhost:8080/Servlet03/comdown?fileName=JDBC.docx">下载</a></td> </tr> <tr> <td>2</td> <td>pic1.jpg</td> <td><a href="http://localhost:8080/Servlet03/comdown?fileName=pic1.jpg">下载</a></td> </tr> <tr> <td>3</td> <td>WEB BASE.xlsx</td> <td><a href="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、通过做出文件下载知道了原来网络上下载文件的原理;
共勉!
相关文章推荐
- QX项目实战-13.基础架构试验四:JavaWeb消息平台
- Web基础之Servlet+JDBC+JSP项目实战记录(二)
- Web基础之Servlet+JDBC+JSP项目实战记录(一)
- Web基础之Cookie对象和Session对象项目实战和对比
- Vue2+VueRouter2+Webpack+Axios 构建项目实战(一)基础知识概述
- Web基础之Servlet+JDBC+JSP项目实战记录(三)
- Web基础之Request对象与Response对象
- Web基础之Servlet+JDBC+JSP项目实战终结篇
- Python爬虫开发与项目实战 2:Web前端基础
- Flask零基础到项目实战(五)Flask-Script
- Nginx实战基础篇一 源码包编译安装部署web服务器 推荐
- WEB项目,获取详细路径,工程项目名称,在绝对(详细)地址基础获取工程项目名称
- Nginx实战基础篇五 如何让用户通过用户名密码认证访问我们的web站点
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第五节)
- SSM项目实战(三)--- 高并发秒杀系统之Web层
- Nginx实战基础篇四 通过https方式访问web服务器
- 10年开发工程师带你Python从零基础到项目实战
- .net实战项目零基础学习视频教程,.net就业课程网络教学
- JavaWeb基础—项目名的写法
- 【创科之龙】零基础学习嵌入式开发以及项目实战开发【第二期视频】