一. 实验预习内容
1.Web页面中都可以使用哪些方式来发送HTTP请求?
答:(1)用户在浏览器的地址栏中输入URL并按回车键;
(2)用户点击了HTML页面中的超链接;
(3)用户在HTML页面中添写一个表单并提交.
2.GET与POST两种请求方式有什么区别?分别适用于什么情况?
答:(1)GET方法用来检索资源.它的含义是”获得由该URI标识的资源”.GET方法请求的资源通常是静态资源.使用GET也可以请求动态资源,但一般要提供少量的请求参数.
(2)POST方法用来向服务器发送需要处理的数据,它的含义是”将数据发送到由该URI标识的动态资源”.
3.HTTP响应内容的类型都有哪些?如何设置HTTP响应内容的类型?
答:(1)类型有:
1)public PrintWriter getWriter():返回一个PrintWriter对象用于向客户发送文本数据.
2)public ServletOutStream getOutputStream() throws IOException:返回一个输出流对象,它用来向客户发送二进制数据.
3)public void setContentType(String type):设置发送到客户端响应的MIME内容类型.
(2)设置方法:
设置响应数据内容类型应该使用相应对象的setContentType(),如果没有调用该方法,内容类型将使用默认值text/html,即HTML文档.
可以调用响应对象response的setCharacterEncoding()设置响应的字符编码.如果没有指定响应的字符编码,PrintWriter将使用ISO-8859-1编码.
如果不使用默认的响应的内容类型和字符编码,应该先调用响应的setContentType(),然后再调用getWriter()或getOutputStream()获得输出流对象.
4.什么是ServletContext对象,它的生存周期如何?
答:Web容器在启动时会加载每个Web应用程序,并为每个Web应用程序创建一个唯一的ServletContext实例对象,该对象称为Servlet上下文对象。
ServletContext是一个作用域对象,使用它可以存储数据,它的作用域是整个应用程序。
5.ServletContext与ServletRequest的getRequestDispatcher()方法有什么区别?
答:区别是:对ServletContext的getRequestDispatcher()只能传递以”/”开头的路径,而对ServletRequest的getRequestDispatcher(),可以传递一个相对路径.
二.实验内容和步骤
1. 简单的综合应用,掌握Servlet将请求转发给另一个Servlet的方法。
【步骤1】创建一个名为input.html的HTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body style="text-align:center;">
<form action="FirstServlet" method="post">
<p> 学号:<input type="text" name="sno" size="20"></p>
<p>姓名:<input type="text" name="name" size="20"></p>
<input type="submit" value="登录"/>
<input type="reset" value="取消"/>
</form>
</body>
</html>
【步骤2】 定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改sno和name的方法。
package com.demo;
package com.demo;
public class Student {
private String sno;
private String name;
public void setSno(String sno) {
this.sno = sno;
}
public String getSno() {
return sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String sno,String name) {
this.sno = sno;
this.name = name;
}
}
【步骤3】编写名为FirstServlet的Servlet,要求当用户在input.html中输入信息后点击“提交”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单提交的请求参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求作用域中,然后通过请求对象的getRequestDispatcher()方法获得RequestDispatcher()对象,将请求转发到SecondServlet。
package com.demo;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 FirstServlet
*/
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public FirstServlet() {
// 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
String sno=request.getParameter("sno");
String name=request.getParameter("name");
Student student = new Student(sno,name);
request.setAttribute("student", student);
RequestDispatcher rd = request.getRequestDispatcher("/SecondServlet");
rd.forward(request, response);
}
/**
* @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);
}
}
package com.demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax