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


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、通过做出文件下载知道了原来网络上下载文件的原理;
共勉!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值