Java web 四

一.HttpServletResponse对象
在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResonse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分。因此在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
(1) 发送状态相关的方法
当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码。为此,在HttpServletResponse接口中,定义了两个发送状态码的方法,具体如下。

setStatus(int status)方法
该方 法用于设置HTTP响应消息的状态码,并生成响应状态行。由于响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定,因此,只要通过setStatus(int status)方法设置了状态码,即可实现状态行的发送。需要注意的是,正常情况下,Web服务器会默认产生一个状态码为200的状态行。

sendError(int sc)方法
该方法用于发送表示错误信息的状态码,例如,404状态码表示找不到客户端请求的资源。在response对象中,提供了两个重载的sendError(int sc)方法,具体如下。

public void sendError(int code) throws java.io.IOException
public void sendError(int cide, String mess

(2)发送响应消息头相关的方法
需要注意的是,addHeader()、selHeader()、addiIntHeader()、setlnHeader()方法都是用于设置各种头字段的,而setContentType()、setLocale()和selCharacterEncoding()方法用于设置字符编码,这些设置字符编码的方法可以有效解决乱码。
(3)发送响应消息体相关的方法
由于在HTTP响应消息中,大量的数据都是通过响应消息体传递的,因此, ServletResponse遵循以10流传递大量数据的设计理念。在发送响应消息体时,定义了两个与输出流相关的方法,具体如下。
1.getOutputStream()
该方法所获取的字节输出流对象为ServletOutputStream 类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节数组中的二进制数据。因此,要想输出二进制格式的响应正文,就需要使用getOutputStream()方法。
2. getWriter()方法
该方法所获取的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容, 因此,要想输出内容全为字符文本的网页文档, 需要使用getWriter()方法。
了解了response对象发送响应消息体的两个方法后,接下来,通过一个案例来学习这两个方法的使用。

二.HttpServletResponse 应用
1:解决中文乱码

创建ChineseServlet
配置映射信息,查看运行结果
方式一:

//设置HttpServletResponse使用utf-8编码
  response. setCharacterEncoding ("utf-8") ;
//通知浏览器使用utf-8解码
  response . setHeader ("Content-Type", "text/html; charset=utf-8") ;

Java web 四

方式二:

//包含第一种方式的两个功能
   response. setContentType (" text/html;charset=utf-8");

通常情况下,为了使代码更加简洁,会采用第2种方式。使用HttpServletResponse对象的第2种方式来解决乱码问题,修改后的代码。
2.二:实现网页定时刷新并跳转

创建Servlet
配置映射信息,查看运行结果
在实际开发中,有时需要当前页面具有自动刷新的功能,使当前页面每隔3秒自动刷新。也可以显示当前时间。

启动Tomcal服务器,在浏览器的地批栏中输入地址"http://localhost:8080/chapter04/fresh"访问fresh。

三:实现重定向
在某些情况下,针对客户端的请求,一个Servlet类可能无法完成全部工作。这时,可以使用请求重定向来完成。所谓请求重定向,指的是Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求。

为了实现请求重定向,在HttpServletResponse接口中,定义了一个sendRedirect()方法,该方法用于生成302响应码和Location响应头,从而通知客户端重新访问Location响应头中指定的URL, sendRedirect()方法的完整语法如下所示。

public void sendRedirect (java. lang.String location)

 throws java. io. IOException

3.HttpServletRequest 对象
在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息,由于HTTP请求消息分为请求行、请求头和请求消息体3个部分,HttpServletRequest接口定义了请求行、请求头和请求消息体的相关方法;
1.在chapter04项目的src目录下,新建一个名称为cn.itcast.chapter04.request的包,在包里新建一个名叫RequestLineServlet的类,编写一下程序:
Java web 四
运行结果:
Java web 四
3.2获取请求消息头的相关方法:
当请求Servlet时,需要通过请求头向服务器传递附加信息,比如,客户端可以接收的数据类型、压缩方式、语言等.为此,在HttpServletRequest接口中,定义了一系列用于获取HTTP请求文字头字段的方法;
在cn.itcast.chapter04.request的包,在包里新建一个名叫RequestHeaderServlet的类,编写一下程序:
Java web 四

Java web 四
4.1获取请求参数
在实际开发中,经常需要获取用户提交的表单数据,例如,用户名,密码,电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口的父类ServletRequest中,定义了一系列获取请求参数的方法;
其中getParameter()方法用于获取某个指定的参数,而getParameter()方法用于获取多个同名的参数;
(1)在chapter04项目下的WebContent目录下编写一个表单文件form.html;
Java web 四

(2) 在cn.itcast.chapter04.request的包,在包里新建一个名叫RequestParamServlet的类,编写一下程序:

package cn.itcast.chapter04.requset;
 
import java.io.IOException;
import java.util.Arrays;
 
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 RequestParamServlet
 */
@WebServlet("/RequestParamServlet")
public class RequestParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RequestParamServlet() {
        // 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 username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("username:"+username);
		System.out.println("password:"+password);
		
		String[] hobbys = request.getParameterValues("hobby");
		response.getWriter().print("hobby:"+Arrays.toString(hobbys));
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("username:"+username);
		System.out.println("password:"+password);
	}
 
}

运行结果如下:
Java web 四

上一篇:ServletContext


下一篇:11.Java SE IO流