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. 使用uiautomator2自动化测试app(二)------操作篇

    提示: 1. 推荐使用python3以上的版本来进行开发 2. 手机使用安卓手机,版本最好不要太老,一根数据线 3. 安装虚拟机(博主使用雷电) 操作: 这里只简单的介绍一些uiautomator2的 ...

  2. [转]将已有项目代码加入svn版本控制

    原文链接:https://blog.csdn.net/aaroun/article/details/79074178 将已有项目代码加入svn版本控制 - TortoiseSVN入门篇Windows下 ...

  3. hive分区与实际分区文件不匹配导致spark读文件出错的问题解决

    先解释下,由于历史原因导致hive中的看到分区比hdfs中的文件夹不匹配,存在hive中分区数有,实际hdfs中无此文件夹. spark中通过sparkSQL读取hive中的该表时,将会出现异常. 解 ...

  4. Vue 自定义按键修饰符

    如点击F2 触发某个事件 <input type="button" name="" id="" value="添加" ...

  5. Indellij IDEA的菜单 File Edit View等主菜单栏不小心删除,恢复的解决办法

    修改以后保存,重启Idea

  6. element-ui 上传图片 后清空 图片 显示

    使用element-ui组件,用el-upload上传图片,上传图片后再次打开还是会有原来的图片,想要清空原来上传的图片,只需要在组件上绑定ref,在提交成功后的方法里调用this.$refs.upl ...

  7. 解决catalina.out文件过大的问题

    有用Tomcat的人,绝对都会遇到这样一个问题:catalina.out文件过大. 它是Tomcat默认生成的日志文件,会随着时间的推移,逐渐增大,不断的增长,甚至达到几G,几十G的大小.由于文件过大 ...

  8. Ajax验证

    import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

  9. java Random 抢红包算法

    红包有一个总金额和总数量,领的时候随机分配金额. 维护一个剩余总金额和总数量,分配时,如果数量等于1,直接返回总金额,如果大于1,则计算平均值,并设定随机最大值为平均值的两倍,然后取一个随机值,如果随 ...

  10. JobStorage.Current property value has not been initialized. You must set it before using Hangfire Client or Server API.

    JobStorage.Current property value has not been initialized. You must set it before using Hangfire Cl ...