【问题标题】:jsp can't redirect page using responsejsp无法使用响应重定向页面
【发布时间】:2014-03-25 06:21:35
【问题描述】:

我无法使用 response.sendRedirect(url); 重定向到页面

我可以重定向到普通 jsp 页面中的链接,但是我未能在我在 jsp 页面中定义的函数中发送它。所以在我的情况下,在一个函数中重定向,如何解决这个问题?

仅供参考,错误是“无法解决响应”。

以下是我的部分源代码:

<%@ page language="java" contentType="text/html; charset=utf-8" 
                         pageEncoding="utf-8" %>
<%@ page import="javax.mail.*"%>
<%@ page import="javax.mail.internet.*"%>
<%@ page import="javax.activation.*"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>   


<%!
public void sendSMS(String nickName, String setAname, String currAname, 
                                                      String toPhone){
String acctInfo="xxx";
String acctPwd="xxx";
String contents="Message from Miss U:( \n Please be reminded that your friend:"+nickName+" is OUT of your setting area: "+setAname+". The current area is "+currAname+".";

String smsURL="http://api.accessyou.com/sms/sendsms-utf8.php?msg="+contents+"&phone="+toPhone+"&pwd="+acctPwd+"&accountno="+acctInfo;
response.sendRedirect(smsURL);
}
%>

【问题讨论】:

  • response 应该指的是什么,你为什么这么认为?
  • @SotiriosDelimanolis 它将引用一个 url。但是,我可以再回答你的问题吗?..
  • 方法错误!你为什么期望 java 在 &lt;%! %&gt; 之间执行你的代码。
  • response 变量从何而来?

标签: java jsp redirect


【解决方案1】:

当你调用你的辅助函数时,你必须传入response 对象。原因是 JSP 被翻译成 Java 代码,然后被编译以便它可以在 JVM 上运行。 &lt;%!...%&gt; 之间的内容将被转换为与 &lt;%...%&gt; 中的代码具有不同上下文的辅助方法。

你的jsp会被翻译成这样的:

public class MyJsp {

    public void doPost(HttpServletRrequest request, HttpServletResponse response) {
      /* tons of code compiled off JSP */
      sendSMS(...)
    }

    private void sendSMS(String nickName, String setAnmae...) {

        String acctInfo="xxx";

        response.sendRedirect(...); // error, there is no response object in the local context
    }

}

这样的事情会起作用

%@ page language="java" contentType="text/html; charset=utf-8" 
                         pageEncoding="utf-8" %>
<%@ page import="javax.mail.*"%>
<%@ page import="javax.mail.internet.*"%>
<%@ page import="javax.activation.*"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>   

<%
 sendSMS(arg1, arg2, arg3, ar4, response)
%>

<%!
public void sendSMS(String nickName, 
                    String setAname, 
                    String currAname,                                                         
                    String toPhone,
                    ServletResponse response){
    String acctInfo="xxx";
    String acctPwd="xxx";
    String contents="Message from Miss U:( \n Please be reminded that your friend:"+nickName+" is OUT of your setting area: "+setAname+". The current area is "+currAname+".";

    String smsURL="http://api.accessyou.com/sms/sendsms-utf8.php?msg="+contents+"&phone="+toPhone+"&pwd="+acctPwd+"&accountno="+acctInfo;
    response.sendRedirect(smsURL);
}
%>

请注意,在 sendSMS 中,您无法直接访问 requestresponse 对象。

【讨论】:

  • 谢谢,但它不起作用:(,应该在函数声明中添加响应吗?->public void sendSMS(String nickName, String setAname, String currAname,String toPhone)?
  • :P 是的.. 复制和粘贴错误。刷新,你会看到我的编辑。
【解决方案2】:

你可以这样做

 <%@ page import="java.io.*,java.util.*" %>
    <html>
     <head>
      <title>Page Redirection</title>
     </head>
    <body>
     <center>
      <h1>Page Redirection</h1>
     </center>
    <%
     // New location to be redirected
     String site = new String("http://www.xyz.com");
     response.setStatus(response.SC_MOVED_TEMPORARILY);
     response.setHeader("Location", site); 
    %>
   </body>
   </html>

【讨论】:

  • 我可以做到,但我现在想要的是在一个函数中做到这一点。
  • @Shy Leng :那么您可能必须使用 HttpServletResponse 响应作为参数,然后使用 response.sendRedirect(smsURL);
【解决方案3】:

示例代码:

<%! public void sendSMS(HttpServletResponse response){
try{
response.sendRedirect("th.jsp");}
catch(Exception e){
    e.printStackTrace();
}
} %>
<%sendSMS(response); %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2015-05-22
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多