Java-Request对象是用来回去请求信息,得到页面的请求
1.Request
1.1 request对象和response对象的原理(了解)
- request对象和response对象是由服务器创建的,我们来使用他们即可
- request对象是用来回去请求信息,得到页面的请求,response对象是来设置响应消息,可以往页面传输写入数据
1.2 request对象继承体系结构(了解)
ServletRequest --接口
|继承
HttpServletRequest --接口
|实现
org.apache.catalina.connector.RequestFacade 类(Tomcat)
代码如下
package cn.itcast.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/d4","/dd4","/ddd4","/demo4"})
//@WebServlet("/user/demo4")
//@WebServlet("*.do")
//*是指通配符
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo4.....");
System.out.println(req);
}
}
2.request获取请求消息
2.1 获取请求行数据
- GET/day14/demo1?name=zhangsan HTTP/1.1
- 方法:
- 获取请求方式:GET
- String getMethod()
- (*)获取虚拟目录:/day14
- String getContextPath()
- 获取Servlet路径:/demo1
*String getServletPath() - 获取get方式请求参数:name=zhangsan
- String getQueryString()
- (*)获取请求url:/day14/demo1
- String getRequestURI() /day14/demo1
- StringBuffer getRequestURL() :http://localhost/day14/demo1
- URI:统一资源定位符 /day14/demo1 游乐场
- URL:统一资源标符 http://localhost/day14/demo1 成都市游乐场
- 获取协议及版本:HTTP/1.1
- String getPortocol()
- 获取客户机的IP地址
- String getRemoteAddr()
代码如下
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 演示request对象获取请求行数据
*/
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
1.获取请求方式:GET
* String getMethod()
2.(*)获取虚拟目录:/day14
* String getContextPath()
3.获取Servlet路径:/demo1
*String getServletPath()
4.获取get方式请求参数:name=zhangsan
* String getQueryString()
5.(*)获取请求url:/day14/demo1
* String getRequestURI() /day14/demo1l
* StringBuffer getRequestURL() :http://localhost/day14/demo1
6.获取协议及版本:HTTP/1.1
* String getPortocol()
7.获取客户机的IP地址
* String getRemoteAddr()
*/
//1.获取请求方式:GET
String method=request.getMethod();
System.out.println(method);
//2.(*)获取虚拟目录:/day14
String contextPath=request.getContextPath();
System.out.println(contextPath);
//3.获取Servlet路径:/demo1
String servletPath=request.getServletPath();
System.out.println(servletPath);
//4.获取get方式请求参数:name=zhangsan
String queryString =request.getQueryString();
System.out.println(queryString);
// 5.(*)获取请求url:/day14/demo1
String requestURI =request.getRequestURI();
StringBuffer requestURL=request.getRequestURL();
System.out.println(requestURI);
System.out.println(requestURL);
// 6.获取协议及版本:HTTP/1.1
String protocol=request.getProtocol();
System.out.println(protocol);
// 7.获取客户机的IP地址
String remoteAddr=request.getRemoteAddr();
System.out.println(remoteAddr);
}
}
2.2 获取请求头数据
- 方法
- (*)String getHeader(String name):通过请求头的名称获取请求头的值
代码如下
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet("/RequestDemo2")
public class RequestDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//演示请求头数据
//1.获取所有请求头名称
Enumeration<String> headerNames=request.getHeaderNames();
//2.遍历
while(headerNames.hasMoreElements()){
String name=headerNames.nextElement();
//根据名称获取请求头的值
String value=request.getHeader(name);
System.out.println(name+"---"+value);
}
}
}
- Enumeration getHeaderName():获取所有的请求头名称
代码如下
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// //演示请求头数据
// String agent=request.getHeader("user-agent");
// //判断agent的浏览器版本
// if(agent.contains("Chorme")){
// //谷歌
// System.out.println("谷歌来了.....");
// }else if(agent.contains("Firefox")){
// //火狐
// System.out.println("火狐来了.....");
// }
//演示请求头数据 referer
String referer = request.getHeader("referer");
System.out.println(referer);
//防盗链
if (referer != null) {
if (referer.contains("/04_Request_war_exploded")) {
//正常访问
// System.out.println("播放电影");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("播放电影....");
} else {
// 盗链
// System.out.println("想看电影么,来......");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("想看电影么,来......");
}
}
}
}
2.3 获取请求体数据
- 请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数
- 步骤
- 获取流对象
- BufferedReader getReader():获取字符输入流 只能操作字符数据
- ServletInputStream getInputStream():获取字节输入流 可以操作所有类型数据
- 再从流对象中拿数据
代码如下
-------------------------页面----------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/04_Request_war_exploded/RequestDemo5" method="post">
<input type="text" placeholder="请输入用户名" name="username"><br>
<input type="text" placeholder="请输入密码" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
-------------------------java--------------------
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet("/RequestDemo5")
public class RequestDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求消息体--请求参数
// 1.获取字符流
BufferedReader br = request.getReader();
// 2.读取数据
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
3.request其他功能
3.1 获取请求参数通用方式 不论get还是post请求方式都可以使用下列方法来获取请求参数
- String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
- String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
- Enumeration getParameterNames():获取所有请求的参数名称
- Map<String,String[]> getParameterMap():获取所有参数的Map集合
- 中文乱码问题
- get方式 Tomcat8 已经将get乱码方式问题解决了
- post方式 会乱码
- 解决:在获取请求参数前,设置流的编码:request.setCharacterEncoding("utf-8");
代码如下
-----------------------------index.jsp------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/04_Request_war_exploded/RequestDemo6" method="get">
<input type="text" placeholder="请输入用户名" name="username"><br>
<input type="text" placeholder="请输入密码" name="password"><br>
<input type="checkbox" name="hobby" value="game">游戏
<input type="checkbox" name="hobby" value="study">学习
<br>
<input type="submit" value="注册">
</form>
</body>
</html>
-------------------------------java---------------------------------
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/RequestDemo6")
public class RequestDemo6 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post 获取请求参数
// 根据参数名称获取参数值
String username = request.getParameter("username");
// System.out.println("post");
// System.out.println(username);
//根据参数名称获取参数值的数组
String[] hobbies = request.getParameterValues("hobby");
// for (String hobby : hobbies) {
// System.out.println(hobby);
// }
// 获取所有请求的参数值名称
Enumeration<String> parameterNames = request.getParameterNames();
// while (parameterNames.hasMoreElements()) {
// String name = parameterNames.nextElement();
// System.out.println(name);
// String value = request.getParameter(name);
// System.out.println(value);
// System.out.println("-----------------------------------------");
// }
// 获取所有参数的map集合
Map<String, String[]> parameterMap = request.getParameterMap();
// 遍历
Set<String> keyset = parameterMap.keySet();
for (String name : keyset) {
//获取键获取值
String[] values = parameterMap.get(name);
System.out.println(name);
for (String value : values) {
System.out.println(value);
}
System.out.println("---------------------------------------");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 获取请求参数
// String username = request.getParameter("username");
// System.out.println("get");
// System.out.println(username);
this.doPost(request, response);
}
}
3.2 请求转发:一种在服务器内部资源跳转的方式
- 步骤
- 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatchar(String path)
- 使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
- 例如: request.getRequestDispatcher("/RequestDemo9").forward(request, response);
- 特点:
- 浏览器地址栏路径没有发生变化
- 只能转发到服务器内部资源中
- 转发是一次请求
3.3 共享数据
- 域对象:一个有作用范围的对象,可以在范围内共享数据
- request域:代表一次请求的范围,一般用于请求转发的多个资源共享中共享数据
- 方法
- void setAttribute(String name,Object obj):存储数据
- 存储数据到request域中:request.setAttribute("msg", "hello");
- Object getAttitude(String name):通过键获取值
- 获取数据:Object msg = request.getAttribute("msg");
- void removeAttribute(String name):通过键移除键值对
转发和共享代码如下
---------------------存储转发---------------------------
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo8")
public class RequestDemo8 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo8888被访问了.....");
//存储数据到request域中
request.setAttribute("msg", "hello");
//转发到demo9资源
// RequestDispatcher requestDispatcher = request.getRequestDispatcher("/RequestDemo9");
// requestDispatcher.forward(request, response);
request.getRequestDispatcher("/RequestDemo9").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 获取请求参数
// String username = request.getParameter("username");
// System.out.println("get");
// System.out.println(username);
this.doPost(request, response);
}
}
---------------------提取显示---------------------------
package cn.itcast.web.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo9")
public class RequestDemo9 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
System.out.println("demo9999被访问了.....");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 获取请求参数
// String username = request.getParameter("username");
// System.out.println("get");
// System.out.println(username);
this.doPost(request, response);
}
}
案例
- 用户登录案例需求
- 编写login.html登录页面
username&password两个输入框 - 使用Druid数据库连接池技术,操作mysql,day14数据库中user表
- 使用jdbcTemplate技术封装JDBC
- 登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
- 登录失败跳转到FailServlet展示:登录失败,用户名或密码错误
- 编写login.html登录页面
分析
- 输入框内容用request的String getParameter(String name):根据参数名称获取参数值
- 然后数据库里面的账号密码用集合包揽起来,之后比对与request中的数据,最后存储自己的用户昵称,然后转发到页面中
3.4 获取ServletContext
- ServletContext getServletContext()
代码如下
package cn.itcast.web.request;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo10")
public class RequestDemo10 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取数据
ServletContext servletContext = request.getServletContext();
System.out.println(servletContext);
System.out.println("demo1010被访问了.....");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 获取请求参数
// String username = request.getParameter("username");
// System.out.println("get");
// System.out.println(username);
this.doPost(request, response);
}
}
- 概念:代表整个web应用,可以和程序的容器(服务器)来通信
- 功能
- 获取MINE类型
- MIME类型:在互联网通信过程中定义的一种文件数据类型
- 格式 大类型/小类型 text/html image/jepg
- 获取:String getMimeType(String file)
- MIME类型:在互联网通信过程中定义的一种文件数据类型
- 域对象:共享数据
- setAttribute(String name,Object value)
- getAttribute(String name)
- removeAttribute(String name)
- ServletContext对象范围:所有用户所有请求的数据
- 获取文件的真实(服务器)路径
- 方法:String getRealPath(String path)
- 获取MINE类型
- 获取:
- 通过request对象获取
request.getServletContext() - 通过HttpServlet获取
this.getServletContext();
- 通过request对象获取
4.BeanUtils工具类
- 要求:类必须被public修饰,必须提供空参的构造器,成员变量必须使用private修饰,提供公共setter和getter
- 功能:封装数据
- 概念:成员变量,属性:setter和getter方法截取后的产物 例如:getUsername()->Username->username
- 方法:
- setProperty()
- getProperty()
- populate(Object obj,Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
代码演示
Map<String,String[]> map=req.getParameterMap()或者是一个map集合就可以
User user=new User()
BeanUtils.populate(user,map)//进行转换
Java-Request对象是用来回去请求信息,得到页面的请求的更多相关文章
- 获取用户的相关请求信息, 以及包括请求头 request.environ
#在index文件中 1. print(type(request)) #看出所属库 2. from django.core.handlers.wsgi import WSGIRequest #查看WS ...
- javaweb学习总结十九(http协议概述以及http请求信息分析)
一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...
- JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求 哇,一看标题怎么这么长啊,其实意思很简单,哥讨厌用HTTP Client做POST与GET提交 觉得那个毕竟是别人写 ...
- 【转】jmeter 进行java request测试
本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试 ...
- JMeter入门(4):Java Request实例
目的:对Java程序进行测试: 一.核心步骤 1.创建一个Java工程: 2.将JMeter的lib目录下的jar文件添加进此工程的Build Path: 3.创建一个类并实现JavaSamplerC ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...
- jmeter之Java request报错:java.lang.NoClassDefFoundError: redis/clients/jedis/Jedis
今天在学习Jmeter的java request,请求内容是连接redis并获取其中的一个字段值.结果在运行时报如下错误: 2018/05/24 13:08:20 ERROR - jmeter.thr ...
- JMeter入门:Java Request实例 (转)
转自:http://blog.csdn.net/czp11210/article/details/26174969 目的:对Java程序进行测试: 一.核心步骤 1.创建一个Java工程: 2 ...
- (转)Java发送http请求(get 与post方法请求)
本文转载于:http://bijian1013.iteye.com/blog/2166855 package com.bijian.study; import java.io.BufferedRead ...
随机推荐
- 80x86汇编—汇编程序基本框架
文章目录 First Program 指令系统 伪指令 数值表达式 程序框架解释 int 21 中断 通过一个基本框架解释各个指令和用处,方便复习.所以我认为最好的学习顺序就是先看一段完整的汇编代码程 ...
- IPv6 — 综合组网技术
目录 文章目录 目录 前文列表 IPv4v6 综合组网技术(转换机制) 双栈策略 隧道策略 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> ...
- windows上安装mysql-5.6.44-winx64
配置MySQL配置文件my.ini.datadir一般和安装目录是分开存放的 [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 ---这里输入你安装的文件路径- ...
- java 执行 javascript 代码
package com.ruoyi.project.front.controller; import java.math.BigDecimal; import java.util.*; import ...
- NOIP模拟56
前言 话说, T2 和 T3 的题面好像放反了. T1 爆零 解题思路 是个原题.. 当时 WindZR 25分钟就码完了,然后我就慌死,写完就开始调,诶,我当时场上不是切了吗,怎么现在打不对了.. ...
- Qt信号与槽的使用
参考视频:黑马程序员https://www.bilibili.com/video/BV1XW411x7NU?p=4 1 新建工程 先创建一个控件基础工程,创建后的界面如下: 主函数我们不需要修改,就 ...
- 任意树遍历,可以使用 goto 跳记号标注的
先顺序进入到最后一个根的根部,完后扫描同级 同级扫描完用 goto跳代码改层数到倒数地二层 之后操作就是倒着往上搜索的,有难度,但是还是能做到的嘛 用 lisit 好像不需要别的,全用 list 连接 ...
- C# JAVA UrlEncode
C# JAVA urlencode 默认是不兼容的.C# 需要encode的部分是小写.JAVA 需要encode的部分是大写. /// <summary> /// java UrlEn ...
- 关于 ulimit 的两个天坑
稍微有点 Linux 经验的人一定会遇到过 "Too many open files" 错误,这个错误本质是 ulimit 设置不合理导致的.关于 ulimit 设置,有哪些需要注 ...
- 手把手教你搭建Docker私有仓库Harbor
1.什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库.Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访 ...