前面一篇文章讲了一些servlet基础中的基础。今天我来写一些我关于输入方面的体会。
从流程上来说,外面的信息是首先进入service这个方法,然后再在service中,用户端使用get或者post方法,来决定把下面由doGet或者doPost来决定哪个方法处理传进来的数据。
无论是doGet还是doPost方法,负责处理传入的参数都是HttpServletRequest的对象,变量名为request。
如果查一下API文档,你会发觉HttpServletRequest只是一个接口,其实继承了ServletRequest这个接口。其中定义了很多获得参数的方法。几乎清一色get方法。下面来讲讲几个常用的。
首先介绍的getParameter(String name),这是最简单的一个。获取的是表单中的数据。没什么太复杂的东西在这里面。
其次,是比较复杂一点的一段代码。
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.util.*;
- /** Shows all the parameters sent to the servlet via either
- * GET or POST. Specially marks parameters that have
- * no values or multiple values.
- * <P>
- * Taken from Core Servlets and JavaServer Pages 2nd Edition
- * from Prentice Hall and Sun Microsystems Press,
- * http://www.coreservlets.com/.
- * © 2003 Marty Hall; may be freely used or adapted.
- */
- public class ShowParameters extends HttpServlet {
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- String docType =
- "<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 " +
- "Transitional//EN/">/n";
- String title = "Reading All Request Parameters";
- out.println(docType +
- "<HTML>/n" +
- "<HEAD><TITLE>" + title + "</TITLE></HEAD>/n" +
- "<BODY BGCOLOR=/"#FDF5E6/">/n" +
- "<H1 ALIGN=CENTER>" + title + "</H1>/n" +
- "<TABLE BORDER=1 ALIGN=CENTER>/n" +
- "<TR BGCOLOR=/"#FFAD00/">/n" +
- "<TH>Parameter Name<TH>Parameter Value(s)");
- Enumeration paramNames = request.getParameterNames();
- while(paramNames.hasMoreElements()) {
- String paramName = (String)paramNames.nextElement();
- out.print("<TR><TD>" + paramName + "/n<TD>");
- String[] paramValues =
- request.getParameterValues(paramName);
- if (paramValues.length == 1) {
- String paramValue = paramValues[0];
- if (paramValue.length() == 0)
- out.println("<I>No Value</I>");
- else
- out.println(paramValue);
- } else {
- out.println("<UL>");
- for(int i=0; i<paramValues.length; i++) {
- out.println("<LI>" + paramValues[i]);
- }
- out.println("</UL>");
- }
- }
- out.println("</TABLE>/n</BODY></HTML>");
- }
- public void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
在我加粗和加下划线的地方。是读取上一个页面菜单的重点。从流程上来说,只是用了request.getParameterNames()获得了上个页面表单输入框的名字的数组。
然后通过String[] paramValues =request.getParameterValues(paramName);这句话,把对应的值给去了出来。getParameterValues和getParameter的区别只是前者返回的是一个数组(为了上一个页面有相同的名字的输入框)。而后者只是一个单一的值。
首先想说的是解决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语句。当然,如果要输出中文的话,最好在调用response的setCharacterEncoding,来防止出现乱码。