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

目录

一、知识点

二、例子

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显示结果为:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章