首页 > 其他分享 >request对象的常用方法

request对象的常用方法

时间:2023-05-27 14:02:19浏览次数:33  
标签:常用 请求 对象 request 乱码 import servlet String

1 乱码问题  25

 // get请求在请求行上提交数据。

 // post请求在请求体中提交数据。

 // 设置请求体的字符集。(显然这个方法是处理POST请求的乱码问题。这种方式并不能解决get请求的乱码问题。)

 // Tomcat10之后,request请求体当中的字符集默认就是UTF-8,不需要设置字符集,不会出现乱码问题。

// Tomcat9前(包括9在内),如果前端请求体提交的是中文,后端获取之后出现乱码,怎么解决这个乱码?执行以下代码。

 request.setCharacterEncoding("UTF-8");

1.1 在Tomcat9之前(包括9),响应中文也是有乱码的,怎么解决这个响应的乱码?  25

 response.setContentType("text/html;charset=UTF-8");

// 在Tomcat10之后,包括10在内,响应中文的时候就不在出现乱码问题了。以上代码就不需要设置UTF-8了。

 // 注意一个细节

 // 在Tomcat10包括10在内之后的版本,中文将不再出现乱码。(这也体现了中文地位的提升。)

1.2 get请求乱码问题怎么解决?25

// get请求发送的时候,数据是在请求行上提交的,不是在请求体当中提交的。

// get请求乱码怎么解决

// 方案:修改CATALINA_HOME/conf/server.xml配置文件

// 注意:从Tomcat8之后,URIEncoding的默认值就是UTF-8,所以GET请求也没有乱码问题了。

代码在com.bjpowernode.javaweb.servlet

RequestTestServlet
package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

//request对象的常用方法  24-25
public class RequestTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        //获取客户端的ip地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println("客户端的ip地址="+remoteAddr);//客户端的ip地址=127.0.0.1
    }

    //设置请求体的字符集。(显然这个方法是处理POST请求的乱码问题。
    // 这种方式并不能解决get请求的乱码问题。)24-25
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求体的字符集
        //request.setCharacterEncoding("UTF-8");
        //响应中文也是有乱码的,怎么解决这个响应的乱码?  25
        // response.setContentType("text/html;charset=UTF-8");
        
        //这是POST请求
        String username = request.getParameter("username");
        //输出这个用户提交的用户名
        System.out.println(username);
    }
}
register.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user register</title>
</head>
<body>
<h1>user register</h1>

<form action="/servlet09/testRequest" method="post">
    username:<input type="text" name="username"><br>
    <br>
    <input type="submit" value="register">
</form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--    这是RequestTestServlet的配置-->
    <servlet>
        <servlet-name>requestTest</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.RequestTestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>requestTest</servlet-name>
        <url-pattern>/testRequest</url-pattern>
    </servlet-mapping>

</web-app>

2.  HttpServletRequest接口的其他常用方法:24-25

 // 获取客户端的IP地址

  String remoteAddr = request.getRemoteAddr();

// 获取应用的根路径

 String contextPath = request.getContextPath();


 // 获取请求方式

String method = request.getMethod();


 // 获取请求的URI

String uri = request.getRequestURI();  // /aaa/testRequest


// 获取servlet path

String servletPath = request.getServletPath(); //   /testRequest

代码在 com.bjpowernode.javaweb.servlet

MethodTest

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class MethodTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        //获取客户端的ip地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println("客户端的ip地址="+remoteAddr);//客户端的ip地址=127.0.0.1
        // 获取应用的根路径,这个方法用的较多,因为它可以动态的获取应用的根路径
        String contextPath = request.getContextPath();
        System.out.println("应用的根路径:"+contextPath);// 应用的根路径:/servlet09

        // 获取请求方式
        String method = request.getMethod();
        System.out.println("请求方式"+method);//请求方式GET

        // 获取请求的URI
        String requestURI = request.getRequestURI();
        System.out.println("请求的URI="+requestURI);//请求的URI=/servlet09/test

        // 获取servlet path
        String servletPath = request.getServletPath();
        System.out.println("获取servlet path="+servletPath);//获取servlet path=/test

    }
}

web.xml

 <!--    这是MethodTest的配置-->
    <servlet>
        <servlet-name>methodTest</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.MethodTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>methodTest</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>


标签:常用,请求,对象,request,乱码,import,servlet,String
From: https://blog.51cto.com/u_15784725/6362078

相关文章

  • git上传对象文件错误解决方案
    git上传对象文件错误解决方案​ 时隔一个星期,当我再次完成开发之后,准备将代码上传,却出现了一个上传代码的错误,记录一下错误和解决方案解决方案:运行gitfsck--full(base)ifeng@ubuntu:~/Desktop/luffycity$gitfsck--fullerror:对象文件.git/objects/c9/e59......
  • jsp学习日志一,基本用法和隐式对象
    基本用法在第一个index.jsp文件中<formaction="monday-01.jsp"><inputtype="text"name="uname"><inputtype="submit"value="提交"></form>而monday.jsp文件中<%Stringa=request.getPa......
  • 报文常用测试工具-----IPOP V4.1
    摘自:https://blog.csdn.net/weixin_40013461/article/details/126368274下载地址:http://y.downyagt.com:7658/down4/hwipgj_downyi.com.zip1.1、IPOP简介IPOP软件是一个华为IP工具的集合,最原始的功能是IP地址动态绑定,后续在此基础上不断的进行了扩充,就形成了现在的版本。IPOP是......
  • 【React工作记录七十】判断数组对象中是否满足某条件
     目录前言导语 核心代码总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语歌谣歌谣数组......
  • js原型prototype(实例构造函数的属性) __proto__(实例对象的属性) constructor(实例
    functionPerson(name,age){this.name=namethis.age=age}Person.prototype.sayHi=function(){//原型是公共方法解决构造函数new对象公共属性和方法的内存浪费console.log(this.name+'sayhi!!')}constp1=newPerson('aa',12)constp2=new......
  • Web 前端常用正则校验规则
    Web前端常用正则校验规则作为Web前端开发,常用的正则校验规则有很多。下面是一些常见的示例:校验手机号码手机号码的正则表达式可以根据不同国家和地区的手机号码格式进行调整。以下是中国大陆的手机号码正则表达式:constregex=/^1[3456789]\d{9}$/;在这个示例中,正则表......
  • 字符串常用函数
    count():返回某个字符在字符串中出现的次数replace():替换title():将字符串每个单词首字母转为大写lower():将字符串中大写转小写upper():将字符串中小写转大写字符串序列.split(分割字符,分割次数) # 返回数据个数为分割次数+1:返回的是一个列表哈切片语法:序列[开始位置下标:......
  • shell 常用命令3
    shell常用命令31sed用来自动编辑文件,可以用来实现替换配置文件的配置语法:sed[-hnV][-e<script>][-f<script文件>][文本文件]参数说明:-e<script>或--expression=<script>以选项中指定的script来处理输入的文本文件。-f<script文件>或--file=<script文件>以选项中指......
  • Docker CLI docker container commit常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 五月学习之Ansible ad-hoc和常用模块
    一、Ansiblead-hoc1、ad-hoc是什么ad-hoc简而言之就是临时命令,执行完即结束,并不会保存应用场景1:查看多台节点的进程是否存在应用场景2:拷贝指定的文件至本地2、ad-hoc命令使用ansible'groups'-mcommand-a'df-h'3、ad-hoc执行过程1.加载ansible配置文件,默认/etc/ansible/a......