我是servlet开发的新手,正在阅读一本电子书,发现我可以使用重定向到另一个网页
setHeader("Location", "http://www.google.com")
但这不起作用,因为我将这段代码编写为:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ModHelloWorld extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{ // response.addHeader("Location", "http://www.google.com"); response.setHeader("Location", "http://www.google.com"); response.setContentType("text/html"); PrintWriter pw = response.getWriter(); pw.println("<html><head><title>Modified Hello World</title></head><body>"); pw.println("<h1>"); //getInitParameter function reads the contents ot init-param elements. pw.println(getInitParameter("message")); pw.println("</h1>"); pw.println("</body></html>"); pw.close(); } }
我已经使用程序检查了标头,以获取网页的标头,如下所示:
import java.net.*; import java.io.*; class getHeaders{ public static void main(String args[]){ URL url = null; URLConnection urc = null; try { url = new URL(args[0]); urc = url.openConnection(); for(int i=0 ; ; i++) { String name = urc.getHeaderFieldKey(i); String value = urc.getHeaderField(i); if(name == null && value == null)//both null so end of header break; else if(name == null){//first line of header{ System.out.println("Server HTTP version, Response code: "); System.out.println(value); System.out.println("ENd of first header field"); } else { System.out.println("name of header is: " + name + " and its value is : " + value); } } } catch(MalformedURLException e){ System.out.println("Malformed URL " + e.getMessage()); } catch(IOException e){ e.printStackTrace(); } } }
我得到的输出为:
Server HTTP version, Response code: HTTP/1.1 200 OK ENd of first header field name of header is: Server and its value is : Apache-Coyote/1.1 name of header is: Location and its value is : http://www.google.com name of header is: Content-Type and its value is : text/html name of header is: Content-Length and its value is : 101 name of header is: Date and its value is : Sat, 05 Mar 2011 15:27:29 GMT
但是我没有从浏览器重定向到google的页面。
提前致谢:)
如您所见,响应仍然是HTTP/1.1 200 OK。要指示重定向,您需要发送回302状态代码:
HTTP/1.1 200 OK
response.setStatus(HttpServletResponse.SC_FOUND); // SC_FOUND = 302