web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;

如果要获取客户端请求过来的参数:找HttpServletRequest

如果要给客户端响应一些信息:找HttpServletResponse

具体的常量和方法可以看源码

HttpServletResponse

常见应用

1.向浏览器发送消息

2.下载文件

下载路径   + 下载名  +setHeader设置头文件(下载指令+格式)+ 输入流获得数据,  缓存后以 输出流 传送给HttpServletResponse

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 要获取下载文件的路径
// String realPath = "E:\\amixi.jpg"; //在网页上显示图片
String realPath = "E:\\note.txt"; //在网页上显示文件的内容
System.out.println("下载文件的路径:"+realPath);
// 2. 下载的文件名是啥?
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
// 3. 设置想办法让浏览器能够支持(Content-Disposition)自动下载我们需要的东西,中文文件
// 名URLEncoder.encode编码,否则有可能乱码
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
// 4. 获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
// 5. 创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
// 6. 获取OutputStream对象
ServletOutputStream out = resp.getOutputStream();
// 7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!
while ((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close(); }

生成验证码(动态生成图片)

package com.ljm.oo;

import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; public class Captcha_ extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//如何让浏览器3秒自动刷新一次;
resp.setHeader("refresh","3");
//在内存中创建一个图片
BufferedImage image = new
BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics2D g = (Graphics2D) image.getGraphics(); //笔
//设置图片的背景颜色
g.setColor(Color.white);
g.fillRect(0,0,80,20);
//给图片写数据
g.setColor(Color.BLUE);
g.setFont(new Font(null,Font.BOLD,20));
g.drawString(makeNum(),0,20);
//告诉浏览器,这个请求用图片的方式打开
resp.setContentType("image/jpeg");
//网站存在缓存,不让浏览器缓存
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("Pragma","no-cache");
//把图片写给浏览器
ImageIO.write(image,"jpg", resp.getOutputStream()); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
} private String makeNum(){
Random random = new Random();
String num = random.nextInt(9999999) + "";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 7-num.length() ; i++) {
sb.append("0");
}
num = sb.toString() + num;
return num;
} }

3.简单实现重定向(登录跳转)resp.sendRedirect("url")

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setHeader("Location","/servlet02_war/gethello");
// resp.setStatus(302);
resp.sendRedirect("/servlet02_war/baidu.jsp");
// /项目名字/web.xml中注册的url 丨 .jsp文件
}

  String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username+":"+password);
resp.sendRedirect("/servlet02_war/baidu.jsp");

<%@page contentType="text/html;" pageEncoding="UTF-8" %>
<%--{找到项目路径}/web.xml注册的url--%>
<form action="${pageContext.request.contextPath}/login" method="get">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit">
</form> 后面在web.xml中注册/login

HttpServletRequest

可以从请求中获取数据: 单个的(getParameter) 和多个的(getParameterValues)

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbys = req.getParameterValues("hobbys");
System.out.println("=============================");
//后台接收中文乱码问题
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbys));
System.out.println("=============================");
System.out.println(req.getContextPath());
//通过请求转发
//这里的 / 代表当前的web应用
req.getRequestDispatcher("/success.jsp").forward(req,resp);
}

最新文章

  1. android WeakReference(弱引用 防止内存泄漏)与SoftReference(软引用 实现缓存机制(cache))
  2. 对于System.Net.Http的学习(三)——使用 HttpClient 检索与获取过程数据
  3. Java之异常处理机制
  4. python IDLE 改变窗口背景颜色
  5. 2012年&quot;浪潮杯&quot;山东省第三届ACM大学生程序设计竞赛--n a^o7 ! 分类: 比赛 2015-06-09 17:16 14人阅读 评论(0) 收藏
  6. IOS系统框架
  7. td中使用overflow:hidden; 无效解决方案
  8. 20160121--Spring
  9. ibatis的优缺点及可行性分析
  10. Redis自学笔记:5.实践
  11. GSSAPIAuthentication=no
  12. html5-文件的基本格式
  13. AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(三)
  14. 微信小程序初窥-环境搭建
  15. 洛谷 P1138 第k小整数
  16. nmap简单使用
  17. [arc079f] Namori Grundy 分类讨论
  18. Python股票信息抓取~
  19. Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记
  20. linux配置Nginx启动,停止

热门文章

  1. 一个序列出现固定元素个数的方法(DFS)
  2. 判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?
  3. Java代码规范总结,更新持续中
  4. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  5. Nacos如果加载不到配置文件的Debug
  6. Java有没有goto?
  7. springDataRedis忽略实体指定的属性
  8. 解释 WEB 模块?
  9. Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?
  10. Excel之“提取指定符号(中括号)中的字符”