Java Web学习笔记——Servlet

本文详细介绍了ServletAPI中的HTTPServlet类及其在处理HTML表单方面的应用,包括如何使用HttpServletRequest和HttpServletResponse对象进行数据交互,以及在实际开发中如何通过doGet和doPost方法实现表单数据的接收与发送。
摘要由CSDN通过智能技术生成

Servlet学习笔记(二)

摘要:今天学习了Servlet API中的第二个包:java.http.servlet。该包中的许多类型覆盖了javax.servlet 中的类型。同时,该包中利用了HTTP提供的特性。

HttpServlet

Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http。 前几日刚刚学习了java.servlet 。在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类,而今天学习的javax.servlet.http,在包中定义了采用HTTP通信协议的HttpServlet类。与servlet类似,在使用HttpServlet时,还要使用HttpServletRequest和HttpServletResponse对象。它们分别继承与servle中的ServeltRequest与ServeltResponse。HttpServelt常用来接收与发送HTML表格。下面给出一个实例。

处理HTML表单

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FormServlet extends HttpServlet {

	public void destroy() {
		super.destroy(); 
	}

	private static String Title = "Form";

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html><head><title>" +
				Title +
				"</title></head>");
		out.println("<body><h1>" +
				Title +
				"</h1><form method='post'>");
		out.println("<table><tr><td>Name:</td>" +
				"<td><input name='name' /></td></tr>");
		out.println("<tr><td>Address:</td>" +
				"<td><textarea name='address' cols='40' rows='5'>" +
				"</textarea></td></tr>");
		out.println("<tr><td>Country:</td>" +
				"<td><select name='country'><option>USA</option>" +
				"<option>China</option></select></td></tr>");
		out.println("<tr><td>Delivery Method:</td>" +
				"<td><input type='radio' name='deliveryMethod'value='firstClass' />First Class"
				+ " <input type='radio'name='deliveryMethod' value='secondClass'>SecondClass</td></tr>");
		out.println("<tr><td>Shipping Instructions:</td>" +
				"<td><textarea name='shippingInstruction' cols='40' rows='5'></textarea></td></tr>");
		out.println("<tr><td> </td>" +
				"<td><textarea name='shippingInstruction' cols='40' rows='5'></textarea></td></tr>");
		out.println("<tr><td>Please send me the latest product catalog:</td>" +
				"<td><input type='checkbox' name='catalogRequest' /></td></tr>");
		out.println("<tr><td> </td>" +
				"<td><input type='reset'/><input type='submit'></td>" +
				"</tr></table></form>" +
				"</body></html>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html><head><title>" +
				Title +
				"</title></head>");
		out.println("<body><h1>" +
				Title +
				"</h1>");
		out.println("<table><tr>" +
				"<td>Name:</td><td>"
				+ request.getParameter("name") + "</td></tr>");
		out.println("<tr><td>Address:" +
				"</td><td>"
				+ request.getParameter("address") + "</td></tr>");
		out.println("<tr><td>Country:" +
				"</td><td>"
				+ request.getParameter("country") + "</td></tr>");
		out.println("<tr><td>Delivery Method:" +
				"</td><td>"
				+ request.getParameter("deliveryMethod") + "</td></tr>");
		String[] instructions = request
				.getParameterValues("shippingInstruction");
		out.println("<tr><td>Shipping Instructions:" +
				"</td><td>");
		if (instructions != null) {
			for (String instruction : instructions) {
				out.println(instruction + "<br/>");
			}
		}
		out.println("</td></tr>");
		out.println("<tr><td>Catalog Request:" +
				"</td><td>");
		if (request.getParameter("catalogRequest") != null) {
			out.println("Yes");
		} else {
			out.println("No");
		}
		out.println("</td></tr></table>" +
				"</body></html>");
		out.flush();
		out.close();
	}

	
	public void init() throws ServletException {
	}

}
在HttpServlet中,通常不需要再覆盖service方法。HttpServlet中的service方法会查看通常用来发送请求的HTTP方法(通过调用request与getMethod)。并调用一下某个方法(doGet,doPost,doTrace,doOptions,doDelete,doHead,doPut)。在这七个HTTP方法中,doGet与doPost是最常用的。因此在HttpServlet中,常常是重写doGet与doPost方法。

doGet与doPost方法

当用户通过浏览器调用该Servlet类时,通过调用doGet方法发送了一个表单给浏览器。如下图所示:


doGet方法,将显示提交客户端信息而且信息长度有限制。所以不适合处理含保密信息的数据以及传输大量数据

在程序中,有如下代码:

<form method='post'>"
说明表单的方法被设置为post,当用户提交表单时,采用的是HTTP POST方法。与doGet方法相比,doPost方法允许客户端提交没有长度限制的信息,而且不会显示的将信息显示在浏览器地址栏中。何时调用doGet和doPost方法没有具体限制,当调用get方法时,则Servlet调用doGet方法,而调用post方法时,则调用doPost方法。在上面的程序中,表单的method被设置为post,则在调用Servlet时,将调用doPost方法。

HttpServletRequest与HttpServletResponse

在上述程序中,doGet与doPost方法中均包含参数HttpServletRequest与HttpServletResponse对象。它们分别继承于ServletRequest与ServletResponse。

其中HttpServletRequest方法增加了以下几个方法:

  • String getContextPath()。返回表示请求context的请求URI部分。
  • Cookie[] getCookies()。返回一个Cookie独享数组。
  • String getHeader()。返回指定HTTP表头的值。
  • HttpSession getSession()。返回与这个请求有关的session对象。
HttpServletRequest方法增加了以下几个方法:
  • void addCookie()。给响应对象添加Cookie。
  • void addHeader()。给响应对象添加标头。
  • void sendRedirect()。将浏览器重定向到指定位置。

总结:

HttpServlet与servlet差异

  • HttpServlet中,不覆盖service方法,而是经常覆盖doGet与doPost方法。
  • 用HttpServletRequest与HttpServletResponse对象代替ServletRequest与ServletResponse对象。

doGet与doPost方法差异

  • 传输数据量,doPost方法无限制,doGet方法有限制。
  • doPost方法隐藏提交的信息,doGet方法显示提交信息。
  • doPost与doGet方法合适调用,取决于用户 发送的方法,若为post调用doPost方法,若为get调用doGet方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值