使用servlet和“setHeader”重定向请求方法不起作用 [英] Redirecting a request using servlets and the "setHeader" method not working

查看:408
本文介绍了使用servlet和“setHeader”重定向请求方法不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是servlet开发的新手,并且正在阅读电子书,并发现可以使用

 <$ c重定向到其他网页$ c> setHeader(Location,http://www.google.com)

但是,这是行不通的,因为我已经写了这段代码:

  import java.io. *; 
import javax.servlet。*;
import javax.servlet.http。*;

public class ModHelloWorld extends HttpServlet {$ b $ 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>修改后的Hello World< / title>< / head>< body>);
pw.println(< h1>);
// getInitParameter函数读取init-param元素的内容。
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;
尝试{
url = new URL(args [0]);
urc = url.openConnection();
for(int i = 0;; i ++){
String name = urc.getHeaderFieldKey(i);
字符串值= urc.getHeaderField(i);
if(name == null&& value == null)//两个null如此结尾的头部
break;
else if(name == null){//标题的第一行{
System.out.println(Server HTTP version,Response code:);
System.out.println(value);
System.out.println(第一个标题字段的ENd);
} else {
System.out.println(header的名称是:+ name +,其值是:+ value);
}
}
} catch(MalformedURLException e){
System.out.println(格式错误的URL+ e.getMessage());
} catch(IOException e){
e.printStackTrace();
}
}
}

as:

 服务器HTTP版本,响应代码:
HTTP / 1.1 200 OK
第一个标头的ENd字段
header的名称是:Server和它的值是:Apache-Coyote / 1.1
header的名称是:位置和它的值是:http://www.google.com
名称的头是:Content-Type,它的值是:text / html
头的名字是:Content-Length,它的值是:101
头的名字是:Date和它的值是:Sat, 05三月2011 15:27:29 GMT

但我没有从浏览器重定向到Google的页面。



在此先感谢:)

正如你所看到的,响应仍然是 HTTP / 1.1 200 OK 。要指示重定向,您需要发回302状态码:

  response.setStatus(HttpServletResponse.SC_FOUND); // SC_FOUND = 302 


I am new to servlet development, and I was reading an ebook, and found that I can redirect to a different web page using

setHeader("Location", "http://www.google.com")

But this is not working, as I have written this code as:

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();
        }
}

i have checked the headers using my program to get the headers of the webpage which is as under:

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();
        }
    }
}

And i am getting the output as:

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

But I was not redirected to google's page from my browser.

Thanks in advance:)

解决方案

As you can see, the response is still HTTP/1.1 200 OK. To indicate a redirect, you need to send back a 302 status code:

response.setStatus(HttpServletResponse.SC_FOUND); // SC_FOUND = 302

这篇关于使用servlet和“setHeader”重定向请求方法不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆