您的位置:首页 > 产品设计 > UI/UE

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

2017-05-30 10:20 429 查看
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">
<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、通过做出文件下载知道了原来网络上下载文件的原理;
共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: