HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。

  怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。详见https://www.cnblogs.com/wenanbang/p/4142415.html

其实也可以单纯的认为是若是带数据的话就请求转发了,若改地址的话就重定向了。

一、HttpServletRequest:

  概述和运行流程详见HttpServletResponse!

二、获取HTTP请求:

三、获取请求行:

1、获得客户端的请求方式:

getMethod()     获得String类型;

2、获得请求的资源:

getContextPath() 获得String类型的 web应用的名称(项目名)

getQueryString() 获得 get提交url 地址后的参数字符串;

getRequestURI() 获取URI地址String类型

getRequestURL() 获取URL地址StringBuffer类型

request.getRemoteAddr() 获得访问的客户端IP地址

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取请求方式
String method = request.getMethod();
System.out.println("请求方式为:" + method);
// 获取请求URI
String URI = request.getRequestURI();
System.out.println("URI为" + URI);
// 获取请求URL
StringBuffer URL = request.getRequestURL();
System.out.println("URL为:" + URL);
// URI为/WEB/LineServlet
// URL为:http://localhost:8080/WEB/LineServlet
// 获取WEB项目名称
String name = request.getContextPath();
System.out.println("WEB项目名称为:" + name);
// 获取get请求后url后的字符串
String query = request.getQueryString();
System.out.println("get请求的参数为:" + query);
// 获取客户端的ip地址
String ip = request.getRemoteAddr();
System.out.println("ip地址为:" + ip);
}

四、获取请求头:

getHeader(String name)

referer 头的作用:获取该访问的来源,做防盗链

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取refere头
String refere = request.getHeader("Referer");
String content = null;
if(refere.startsWith("http://localhost:8080")){
content="真的离婚了!";
}else{
content="你是小偷!";
}
//解决乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(content);
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/WEB/RefereServlet">宋仲基和宋慧乔分手了</a>
</body>
</html>

五、获得请求体:

1、解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

2、解决get提交的方式的乱码:

parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码问题(post请求)
// request.setCharacterEncoding("UTF-8");
//获取请求参数
//1.单个值的参数
String name=request.getParameter("username");
//get解决乱码:得先将获取到的信息用原来的编码表进行解码,然后再用后来的编码表进行编码
name=new String(name.getBytes("ISO-8859-1"),"UTF=8");
String sex=request.getParameter("sex");
System.out.println(name+" ......"+sex);
//2.获取多个值的
String[] hobbys=request.getParameterValues("hobby");
//遍历
for(String s:hobbys){
System.out.println(s);
}
//3.获取所有的请求参数MAP
Map<String,String[]> map=request.getParameterMap();
//遍历
Set<String> set=map.keySet();
for(String str:set){
String [] value=map.get(str);
for(String v:value){
System.out.println(str+"..."+v);
}
}

六、request的其他功能:

1、request 也是个域对象,也是具有以下功能:

  setAttribute(String name, Object o)

  getAttribute(String name)

  removeAttribute(String name)

2、request完成请求转发:

  获得请求转发器----path是转发的地址

RequestDispatcher getRequestDispatcher(String path)

  通过转发器对象转发

requestDispathcher.forward(ServletRequest request, ServletResponse response)

七、ServletContext域与Request域的生命周期比较

1、ServletContext

       创建:服务器启动

       销毁:服务器关闭

       域的作用范围:整个web应用

2、request

      创建:访问时创建request

      销毁:响应结束request销毁

      域的作用范围:一次请求中

八、转发和重定向的区别:

1、重定向两次请求,转发一次请求

2、重定向地址栏的地址变化,转发地址不变

3、重新定向可以访问外部网站 转发只能访问内部资源

4、转发的性能要优于重定向

(需要带数据的时候用请求转发,由第一个Servlet01带数据到Servlet02需要地址转变的用重定向)

public class Servlet01 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向request域中存值
request.setAttribute("name", "张三" );
//请求转发
request.getRequestDispatcher("/Servlet02").forward(request, response); }
public class Servlet02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request 域中取值
String name =(String)request.getAttribute("name");
//解决中文乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("hello"+name);
}

JAVA基础之HttpServletRequest请求的更多相关文章

  1. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  2. Java根据HttpServletRequest请求获取服务器的IP地址

    以下总结了两种根据HttpServletRequest请求获取发出请求浏览器客户端所在服务器的IP地址方法: 代码: import javax.servlet.http.HttpServletRequ ...

  3. Java基础面试题总结

    目录 索引 Java基础知识篇 Java web基础知识总结 Java集合篇常见问题 Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较 ...

  4. Java基础96 ajax技术的使用

    本文知识点(目录): 1.ajax的概念   2.使用ajax技术获取服务端的数据_实例   3.使用ajax技术检查用户名是否已存在_实例   4.使用ajax技术验证登录页面的用户名和密码_实例 ...

  5. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  6. Java 基础--小结

    Java  基础--小结 java基础 Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机( ...

  7. java基础(1-50)-------->超级简单,不信你不会!!!

    1:java中的保留字:const&goto; 2:&和&&都可以做逻辑运算符,即运算符两边的表达式都为true,结果才为true,一方为false,则结果为false ...

  8. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...

  9. Java基础部分 2

    一. Java基础部分 2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2 2.Java有没有goto? 2 3.说说&和&&am ...

随机推荐

  1. 【Swoole】计一次swoole_server配合laravel5启动报错:Address already in use[98]

     [2019-11-11 11:42:25 @21371.0] WARNING swSocket_bind(:434): bind(0.0.0.0:9501) failed, Error: Addre ...

  2. web3 编译部署调用合约

    //导入solc 编译器 let solc = require('solc') let fs = require('fs') //读取合约 let sourceCode = fs.readFileSy ...

  3. JDK性能监控命令

    阅读原文 查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps ...

  4. WPF,回车即是tab

    正在做的WPF项目,客户需要在文本框里输入后按回车即跳到下一个框框,和tab一样的 上网搜索了下解决方案:如下: 在文本框外围 的grid加上KeyDown事件,代码里写上: /// <summ ...

  5. promise简单实现

    function isFunction(fn){ return Object.prototype.toString.call(fn) === '[object Function]'; } let ST ...

  6. windows zip命令

    针对 Windows 用户的提示: win不自带zip,因此 Windows 用户可以从 GnuWin32 项目页面 上下载zip ,并将 C:\Program Files\GnuWin32\bin( ...

  7. 简单工厂(二)——coding

    public abstract class Video { public abstract void produce(); } public class JavaVideo extends Video ...

  8. DL Practice:Cifar 10分类

    Step 1:数据加载和处理 一般使用深度学习框架会经过下面几个流程: 模型定义(包括损失函数的选择)——>数据处理和加载——>训练(可能包括训练过程可视化)——>测试 所以自己写代 ...

  9. 如何录制高清GIF格式的图片

    如何录制高清GIF格式的图片 工具:傲软GIF 下载地址:https://www.apowersoft.cn/gif 特点:质量高,能够一帧一帧的修改 使用简单.就不说了.自行尝试.这里只是提供一个制 ...

  10. 聚焦JavaScript面向对象的思想

    面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物.随着时代的发展,计算机被用于解决越来越复杂的问题.一切事物皆对象,通过面向对象的方式,将现实世界的 ...