原理
对客户的请求,容器根据请求调用Servlet的相应doXxx()方法,该方法带有两个参数,一个是HttpServletRequest,一个是HttpServletResponse,它们分别表示请求对象和响应对象,它们是容器自动创建的两个对象。可以使用这两个接口定义的若干方法完成有关操作。
对Servlet的请求目的是要获得响应消息。Servlet要向用户发送响应数据首先要获得输出流对象。另外,通过响应对象还可向客户端发送状态码,也可以设置有关响应头,还可以对响应重定向。
1. 编程实现通过表单传递请求参数,使用HttpServletRequest对象获得请求参数。
【步骤1】编写CourseSelect.html页面,存放在ch02项目的目录中。该页面在屏幕上显示一个表单,其中包括姓名输入框和选择课程的下拉列表,点击“确定”按钮后,将表单提交给CourseServlet处理并显示选课结果。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="CourseSelect" method="POST" >
姓名:
<input type="text" name="names"/>
课程选择框:
<select name="option1">
<option >数学</option>
<option >语文</option>
<option >英语</option>
</select>
<input type="submit" value="提交"/>
</form>
</body>
</html>
【步骤2】编写CourseServlet.java,读取表单请求参数的值并显示选课人姓名和选择的课程。
package edu.exp.no_1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CourseSelect
*/
@WebServlet("/CourseSelect")
public class CourseSelect extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CourseSelect() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
String title="读取数据表单";
String docType="<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType+
"<html>\n" +
"<head><meta charset=\"utf-8\"><title>"+title+"</title></head>\n"+
"<body><table width=\"200\" border=\"1\">\n"+
"<tr><td>姓名</td><td>所选课程</td></tr>\n"
);
String paraName=request.getParameter("names");
out.println("<tr><td>"+paraName+"</td>\n");
String paraName1=request.getParameter("option1");
out.println("<td>"+paraName1+"</td>\n");
out.print("</tr>");
out.println("\n</table>\n</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
【步骤3】在web.xml文件中部署CourseServlet。
<servlet>
<servlet-name>CourseSelect</servlet-name>
<servlet-class>edu.exp.no_1.CourseSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CourseSelect</servlet-name>
<url-pattern>/CourseSelect</url-pattern>
</servlet-mapping>
【步骤4】在浏览器的地址栏中输入:http://localhost:8080//CourseSelect, 然后在表单中输入数据,点击“确定”按钮,体会表单参数的传递与访问方法。
2. 编写一个Servlet,显示所有请求头
【步骤1】在exp02项目下编写一个名为ShowHeadersServlet.java的Servlet程序,使其能够检索所有的请求头,并且能够以表格的形式将请求头的参数名和参数值显示出来。
【步骤2】在web.xml文件中部署该Servlet,具体内容如下:
<servlet>
<servlet-name>ShowHeadersServlet</servlet-name>
<servlet-class>edu.exp.no_2.ShowHeadersServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowHeadersServlet</servlet-name>
<url-pattern>/showheaders</url-pattern>
</servlet-mapping>
【步骤3】在浏览器地址栏中输入正确的URL,访问并测试该Servlet。
package edu.exp.no_2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation