hualinux servlet 2.13:ServletRequest 接口及其子接口

本文深入讲解Servlet中如何处理HTTP请求,包括获取请求参数、请求URL、请求方式等关键信息的方法。并通过实例演示如何使用getParameter、getParameterValues等方法,以及如何利用HttpServletRequest获取客户端的URI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、知识点

二、例子

2.1 例1 获取请求参数

2.1.1 代码

2.1.2 测试结果

2.2 例2 根据请求参数的名字,返回请求参数对应的字符串数组

2.2.1 在index.jsp编写表单

2.2.2 修改Login.java代码

2.2.3 测试结果

2.3 例3 请求参数返回枚举及Map对象

2.3.1 在Login.java添加代码

2.3.2 测试结果

三、HttpServletRequest(ServletReques子接口)

3.1 例子:获取客户端的URI

3.1.1 实现代码

3.1.2 测试结果


本章讲的是servet请求,也比较重要的章节,ServletRequest看名字就知道是处理请求的。

一、知识点

如何在Serlvet中获取请求信息:

1.Servlet 的service()方法用于应答请求:因为每次请求都会调用service()方法

public void service(ServletRequest request, ServletResponse response )
throws ServletException, IOException
ServletRequest:封装了请求信息。可以从中获取到任何的请求信息。
ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现.

这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入。

2.ServletRequest: 封装了请求信息。可以从中获取到任何的请求信息。

1)获取请求参数:
String getParameter(string name):根据请求参数的名字,近回参数值。
若请求参数有多个值(例如checkbox),该方法只能获取到第一个提交的值。

String[] getParametervalues(string name): 根据请求参数的名字,近回请求参数对应的字符串数组。

Enumeration getParameterNames():返回参数名对应的Enumeration对象,
类似于Serv1etConfig(或ServletContext)的getInitParameterNames()方法。

Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型。

2)获取请求的URL:

HttpServletRequest httpServletRequest = (HttpServ1etRequest) request;
String requestURI = httpServ1etRequest.getRequestURI();
System.out.println(requestURI); // /day_ 29/1oginServ1et

3)获取请求方式:

String method = httpServletRequest.getMethod();
System.out.print1n(method); //GET

4)若是-一个GET请求,获取请求参数对应的那个字符串,即?后的那个字符串.

String queryString = httpServletRequest.getQueryString();
//user=hua&password=123456&interesting=game&interesting=par
System.out.print1n(querystring); 

5)获取请求的Serlvet的映射路径

String servletPath = httpServletRequest.getServletPath();
System.out.print1n(servletPath); // /loginServ1et

6)和attribute相关的几个方法;

3. HttpServletRequest:是SerlvetRequest的子接口。针对于HTTP请求所定义。里边包含了大量获取HTTP请求相关的方法。

更多方便请查看https://javaee.github.io/javaee-spec/javadocs/中的ServletRequest接口

 

二、例子

下面所有例子都一样,src下建立一个Login类并继承Servlet接口,原始代码如下:

import javax.servlet.*;
import java.io.IOException;

public class Login implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

web.xm配置添加一个路由映射,如下:

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

整个web.xlm配置如下:这个配置包括了上一章的web.xml配置

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>t1</servlet-name>
        <servlet-class>T1</servlet-class>
        <!-- 在<servlet>下面是它的二级配置-->
        <init-param>
            <param-name>user</param-name>
            <param-value>hua</param-value>
        </init-param>
        <init-param>
            <param-name>pwd</param-name>
            <param-value>123</param-value>
        </init-param>
    </servlet>

    <!-- 这个是在<servlet>外面,不是它的二级配置-->
    <context-param>
        <param-name>ctx</param-name>
        <param-value>this is context-param value </param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>t1</servlet-name>
        <url-pattern>/t1</url-pattern>
    </servlet-mapping>

2.1 例1 获取请求参数

string getParameter(String name): 根据请求参数的名字,返回参数值。
若请求参数有多个值(例如checkbox),该方法只能获取到第一个提交的值。

2.1.1 代码

Login.java其中一个代码修改如下:

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    String user = servletRequest.getParameter("user");
    String pwd = servletRequest.getParameter("pwd");
    System.out.println(user+":"+pwd);
}

2.1.2 测试结果

根据HTML知识,要用Get方式传参用“?参数名=值”或“?参数名1=值1&参数名2=值2..”

打开浏览器尾部添加 “/login?user=hua&pwd=123”,我这里是

http://localhost:8080/myservlet_war_exploded/login?user=hua&pwd=123

看到空白页之后,再查看ide输出窗口为:

 

2.2 例2 根据请求参数的名字,返回请求参数对应的字符串数组

什么情况下才返回 数组呢?多选就是了

 String[] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组。

2.2.1 在index.jsp编写表单

在index.jsp编写表单,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>测试</title>
  </head>
  <body>
    <form action="login" method="post">
      user: <input type="text" name="user" />
      pwd: <input type="password" name="pwd" />
      <br>
      爱好:<br>
      <input type="checkbox" name="interesting" value="reading" />阅读
      <input type="checkbox" name="interesting" value="game" />游戏
      <input type="checkbox" name="interesting" value="party" />派对
      <input type="checkbox" name="interesting" value="shopping" />购物
      <input type="checkbox" name="interesting" value="sport" />体育
      <input type="checkbox" name="interesting" value="TV" />电视<br/>
      <input type="submit" style="margin-left: 390px" value="提交"/>
    </form>
  </body>
</html>

运行tomcat,自动跳出浏览器,我的是火狐,效果图如下:

2.2.2 修改Login.java代码

修改Login.java代码如下:

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    String user = servletRequest.getParameter("user");
    String pwd = servletRequest.getParameter("pwd");
    System.out.println(user+":"+pwd);

    String[] interestings =servletRequest.getParameterValues("interesting");
    for(String interest: interestings){
        System.out.println("-->"+interest);
    }
}

2.2.3 测试结果

重启tomcat,在打开浏览器输入下面内容:

点“提交”,ide显示结果为:

 

2.3 例3 请求参数返回枚举及Map对象

Enumeration getParameterNames(): 返回参数名对应的Enumeration对象,
类似于ServletConfig(或ServletContext)的getInitPar ameterNames()方法。

Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值,string数组类型.

2.3.1 在Login.java添加代码

在Login.java修改如下:

import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    String user = servletRequest.getParameter("user");
    String pwd = servletRequest.getParameter("pwd");
    System.out.println(user+":"+pwd);

    String[] interestings =servletRequest.getParameterValues("interesting");
    for(String interest: interestings){
        System.out.println("-->"+interest);
    }

    Enumeration<String> names = servletRequest.getParameterNames();
    while (names.hasMoreElements()){
        String name = names.nextElement();
        String val = servletRequest.getParameter(name);
        System.out.println("^^"+name+": "+val);
    }

    Map<String,String[]> map = servletRequest.getParameterMap();
    for (Map.Entry<String,String[]> entry : map.entrySet()) {
        System.out.println("**"+entry.getKey()+": "+ Arrays.asList(entry));
    }
}

2.3.2 测试结果

重启tomcat,在打开浏览器输入下面内容:

点“提交”,ide显示结果为:

 

三、HttpServletRequest(ServletReques子接口)

HttpServletRequest子接口更针对Http请求方面,封装了比servlet更多的http方面的方法

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

3.1 例子:获取客户端的URI

3.1.1 实现代码

在Loin.java类中的service()方法直接添加如下内容

//这个是在顶部添加的导入类
import javax.servlet.http.HttpServletRequest;


//HttpServletRequest是ServletRequest的子接口,可以强转为ServletRequest接口
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);

3.1.2 测试结果

重启tomcat,在打开浏览器输入下面内容:

点“提交”,ide显示结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值