原文: https://beginnersbook.com/2013/05/servlet-request-interface/

当客户端向 Web 服务器发送请求时,servlet 容器会创建ServletRequestServletResponse对象并将它们作为参数传递给 servlet 的service()方法。请求对象提供对请求信息的访问,例如请求数据的头和主体信息。

首先,我们将看到一个示例,然后我们将看到ServletRequest接口中可用的方法列表:

示例 1:ServletRequest getParameter()方法显示用户输入

在这个例子中,我演示了使用getParameter()方法返回给定参数的值。

在这个 html 表单中,我们将用户输入(名称和年龄)分别存储在参数unameuage中。

index.html

  1. <form action="details" method="get">
  2. User Name: <input type="text" name="uname"><br>
  3. User Age: <input type="text" name="uage"><br>
  4. <input type="submit" value="submit">
  5. </form>

MyServletDemo.java

在这个 servlet 类中,我们通过使用getParameter()方法获取参数的值,此方法属于ServletRequest接口。在这个例子中,我们将HttpServletRequest作为doGet()方法的参数,HttpServletRequest扩展了ServletRequest接口,这就是为什么getParameter()方法可用于req对象。

获取值后,我们将在网页上编写它们。

  1. import javax.servlet.http.*;
  2. import javax.servlet.*;
  3. import java.io.*;
  4. public class MyServletDemo extends HttpServlet{
  5. public void doGet(HttpServletRequest req,HttpServletResponse res)
  6. throws ServletException,IOException
  7. {
  8. res.setContentType("text/html");
  9. PrintWriter pwriter=res.getWriter();
  10. String name = req.getParameter("uname");
  11. String age = req.getParameter("uage");
  12. pwriter.println("Name: "+name);
  13. pwriter.println("Age: "+age);
  14. pwriter.close();
  15. }
  16. }

Web.xml

这是将 servlet 映射到 url 的部署描述符文件。由于我们的表单将详细信息页面作为操作,因此我们将 servlet 类映射到详细信息页面。

  1. <web-app>
  2. <display-name>BeginnersBookDemo</display-name>
  3. <welcome-file-list>
  4. <welcome-file>index.html</welcome-file>
  5. <welcome-file>index.htm</welcome-file>
  6. <welcome-file>index.jsp</welcome-file>
  7. <welcome-file>default.html</welcome-file>
  8. <welcome-file>default.htm</welcome-file>
  9. <welcome-file>default.jsp</welcome-file>
  10. </welcome-file-list>
  11. <servlet>
  12. <servlet-name>BeginnersBook</servlet-name>
  13. <servlet-class>MyServletDemo</servlet-class>
  14. </servlet>
  1. <servlet-mapping>
  2. <servlet-name>BeginnersBook</servlet-name>
  3. <url-pattern>/details</url-pattern>
  4. </servlet-mapping>
  5. </web-app>

输出:

屏幕 1:

`ServletRequest`接口 - 图1

点击提交时出现的屏幕 2:

`ServletRequest`接口 - 图2

示例 2:获取参数名称和值

在此示例中,我们将使用getParameterNames()getParameter()方法来获取参数名称和值。

getParameterNames():返回一个String对象的枚举,其中包含此请求中包含的参数的名称。如果请求没有参数,则该方法返回一个空的枚举。

getParameter():如上所述,这将返回给定参数的值。

index.html

  1. <form action="details" method="get">
  2. User Name: <input type="text" name="uname"><br>
  3. User Age: <input type="text" name="uage"><br>
  4. <input type="submit" value="submit">
  5. </form>

MyServletDemo.class

  1. import java.io.IOException;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Enumeration;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class MyServletDemo extends HttpServlet{
  10. public void doGet(HttpServletRequest req,HttpServletResponse res)
  11. throws ServletException,IOException
  12. {
  13. PrintWriter pwriter=res.getWriter(); res.setContentType("text/html");
  14. Enumeration en=req.getParameterNames();
  15. while(en.hasMoreElements())
  16. {
  17. Object obj=en.nextElement();
  18. String param=(String)obj;
  19. String pvalue=req.getParameter(param);
  20. pwriter.print("Parameter Name: "+param+
  21. " Parameter Value: "+pvalue);
  22. }
  23. pwriter.close();
  24. }
  25. }

web.xml

  1. <web-app>
  2. <servlet>
  3. <servlet-name>BeginnersBook</servlet-name>
  4. <servlet-class>MyServletDemo</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>BeginnersBook</servlet-name>
  8. <url-pattern>/details</url-pattern>
  9. </servlet-mapping>
  10. </web-app>

输出:

`ServletRequest`接口 - 图3

`ServletRequest`接口 - 图4

示例 3:显示标题信息

index.html

  1. <h1>Servlet Request Demo</h1>
  2. <body>
  3. <a href="headinfo">Click Here</a>
  4. </body>

HeaderDetails.java

  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import java.util.Enumeration;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class HeaderDetails extends HttpServlet {
  9. public void doGet(HttpServletRequest request,
  10. HttpServletResponse response)
  11. throws IOException, ServletException
  12. {
  13. response.setContentType("text/html");
  14. PrintWriter pwriter = response.getWriter();
  15. pwriter.println("HTTP header Information:<br>");
  16. Enumeration en = request.getHeaderNames();
  17. while (en.hasMoreElements()) {
  18. String hName = (String) en.nextElement();
  19. String hValue = request.getHeader(hName);
  20. pwriter.println("<b>"+hName+": </b>"
  21. +hValue + "<br>");
  22. }
  23. }
  24. }

web.xml

  1. <web-app>
  2. <welcome-file-list>
  3. <welcome-file>index.html</welcome-file>
  4. <welcome-file>index.htm</welcome-file>
  5. <welcome-file>index.jsp</welcome-file>
  6. <welcome-file>default.html</welcome-file>
  7. <welcome-file>default.htm</welcome-file>
  8. <welcome-file>default.jsp</welcome-file>
  9. </welcome-file-list>
  10. <servlet>
  11. <servlet-name>BeginnersBook</servlet-name>
  12. <servlet-class>HeaderDetails</servlet-class>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>BeginnersBook</servlet-name>
  16. <url-pattern>/headinfo</url-pattern>
  17. </servlet-mapping>
  18. </web-app>

输出:

`ServletRequest`接口 - 图5

`ServletRequest`接口 - 图6

ServletRequest接口的方法

String getParameter(String name):它将给定参数的值作为String返回,如果给定的参数不存在,则返回null

Enumeration getParameterNames():它返回一个包含请求中参数名称的字符串Enumeration对象。

String [] getParameterValues(String name):它返回一个包含参数具有的所有值的字符串数组,如果参数没有任何值,则返回null

String getCharacterEncoding():返回此请求正文中使用的字符编码的名称。如果请求未指定字符编码,则此方法返回null

void setCharacterEncoding(String env):覆盖请求正文中的字符编码。

int getContentLength():以字节为单位返回请求内容的长度。

String getContentType():返回请求正文的 MIME 类型,如果类型未知,则返回null

注意:我刚刚提到了一些方法。如果您需要完整的方法列表,请参阅官方文档