servlet学习心得(二)

本文深入讲解Servlet中的输入处理过程,包括如何使用HttpServletRequest对象获取不同类型的请求参数,解决中文乱码问题,以及展示所有请求参数的方法。

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

     前面一篇文章讲了一些servlet基础中的基础。今天我来写一些我关于输入方面的体会。

     从流程上来说,外面的信息是首先进入service这个方法,然后再在service中,用户端使用get或者post方法,来决定把下面由doGet或者doPost来决定哪个方法处理传进来的数据。

无论是doGet还是doPost方法,负责处理传入的参数都是HttpServletRequest的对象,变量名为request

如果查一下API文档,你会发觉HttpServletRequest只是一个接口,其实继承了ServletRequest这个接口。其中定义了很多获得参数的方法。几乎清一色get方法。下面来讲讲几个常用的。

首先介绍的getParameterString name),这是最简单的一个。获取的是表单中的数据。没什么太复杂的东西在这里面。

其次,是比较复杂一点的一段代码。

    

  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.util.*;
  5.  
  6. /** Shows all the parameters sent to the servlet via either
  7.  *  GET or POST. Specially marks parameters that have
  8.  *  no values or multiple values.
  9.  *  <P>
  10.  *  Taken from Core Servlets and JavaServer Pages 2nd Edition
  11.  *  from Prentice Hall and Sun Microsystems Press,
  12.  *  http://www.coreservlets.com/.
  13.  *  © 2003 Marty Hall; may be freely used or adapted.
  14.  */
  15.  
  16. public class ShowParameters extends HttpServlet {
  17.   public void doGet(HttpServletRequest request,
  18.                     HttpServletResponse response)
  19.       throws ServletException, IOException {
  20.     response.setContentType("text/html");
  21.     PrintWriter out = response.getWriter();
  22.     String docType =
  23.       "<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 " +
  24.       "Transitional//EN/">/n";
  25.     String title = "Reading All Request Parameters";
  26.     out.println(docType +
  27.                 "<HTML>/n" +
  28.                 "<HEAD><TITLE>" + title + "</TITLE></HEAD>/n" +
  29.                 "<BODY BGCOLOR=/"#FDF5E6/">/n" +
  30.                 "<H1 ALIGN=CENTER>" + title + "</H1>/n" +
  31.                 "<TABLE BORDER=1 ALIGN=CENTER>/n" +
  32.                 "<TR BGCOLOR=/"#FFAD00/">/n" +
  33. "<TH>Parameter Name<TH>Parameter Value(s)");
  34.     Enumeration paramNames = request.getParameterNames();
  35.     while(paramNames.hasMoreElements()) {
  36.       String paramName = (String)paramNames.nextElement();
  37.       out.print("<TR><TD>" + paramName + "/n<TD>");
  38.       String[] paramValues =
  39.         request.getParameterValues(paramName);
  40.       if (paramValues.length == 1) {
  41.         String paramValue = paramValues[0];
  42.         if (paramValue.length() == 0)
  43.           out.println("<I>No Value</I>");
  44.         else
  45.           out.println(paramValue);
  46.       } else {
  47.         out.println("<UL>");
  48.         for(int i=0; i<paramValues.length; i++) {
  49.           out.println("<LI>" + paramValues[i]);
  50.         }
  51.         out.println("</UL>");
  52.       }
  53.     }
  54.     out.println("</TABLE>/n</BODY></HTML>");
  55.   }
  56.  
  57.   public void doPost(HttpServletRequest request,
  58.                      HttpServletResponse response)
  59.       throws ServletException, IOException {
  60.     doGet(request, response);
  61.   }
  62. }
        

在我加粗和加下划线的地方。是读取上一个页面菜单的重点。从流程上来说,只是用了request.getParameterNames()获得了上个页面表单输入框的名字的数组。

然后通过String[] paramValues =request.getParameterValues(paramName);这句话,把对应的值给去了出来。getParameterValuesgetParameter的区别只是前者返回的是一个数组(为了上一个页面有相同的名字的输入框)。而后者只是一个单一的值。

首先想说的是解决Tomcat中的中文乱码问题。做起来很简单,就是调试web.xml里面。

<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

    enableLookups="false" redirectPort="8443" acceptCount="100"

    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />

 

下面来谈谈我对与输出的心得。

Servlet说道底是一个普普通通的类,只是由服务器会在用户访问的时候,把其实例化,并且调用其中的方法。然后经过一系列的处理之后,Servlet在通过服务器给的管道回馈到web页面,然后打印出来。管道就是response.getWriter()。其会返回一个PrintWriter的对象,最后,最简单的就是通过其println()方法来进行输出。一般情况下就是输出html语句。当然,如果要输出中文的话,最好在调用responsesetCharacterEncoding,来防止出现乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值