上一篇博客《Servlet处理客户端HTTP请求》中简单介绍了如何使用Servlet处理客户端的请求,只处理请求,我们的工作其实只做了一半,请求处理完后,我们要对客户端的请求进行响应,这一篇博文将介绍Servlet如何响应。
同样的,我们在之前的工程上进行修改。
package com.gujin.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");
// 获得请求头信息
System.out.println("======HEAD INFO======");
Enumeration enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements())
{
String name = (String) enumeration.nextElement();
Enumeration headers = request.getHeaders(name);
while (headers.hasMoreElements())
{
System.out.println(name + ":" + headers.nextElement());
}
}
// 获得请求参数
System.out.println("======REQUEST PARAM======");
// 获得指定参数
// request.getParameter("userId");
// 获得所有请求参数名称
// request.getParameterNames();
// 获得请求参数集合
// request.getParameterMap();
Enumeration names = request.getParameterNames();
while (names.hasMoreElements())
{
String name = (String) names.nextElement();
System.out.println(name + ":" + request.getParameter(name));
}
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
// 想输出流写的内容就是客户端接收到的内容
writer.print("<html>");
writer.print("<head>");
writer.print("<meta charset='UTF-8'>");
writer.print("</head>");
writer.print("<body>");
writer.print("<h1>Hello!</h1>");
writer.print("</body>");
writer.print("<html>");
writer.flush();
writer.close();
}
}
这样服务端就像客户端输出了一个网页,显示效果如下:
查看页面源代码如下:
<html><head><meta charset='UTF-8'></head><body><h1>Hello!</h1></body><html>
这正是我们输出内容。
在上面的例子中,我们直接的向客户端输出了HTML,我们还可以控制跳转到指定的页面,代码如下:
response.sendRedirect("index.html");
这样可以将页面重定向到index.html
页面,除了重定向外,我们还可以实现请求转发,代码如下:
request.getRequestDispatcher("index.html").forward(request, response);
重定向和请求转发都可以控制页面的跳转,二者的区别在于重定向是由客户端重新请求,而请求转发是服务端进行跳转,在浏览器上现实的地址还是原请求地址,重定向显示新的地址。