-1

我正在jsp中创建一个jsp应用程序。如果用户未登录,我正在尝试重定向到ajax请求的登录页面。我的方法

  1. 该请求是从将一些参数传递给 url 的 javascript 发送的。服务器端代码检查用户是否登录。
  2. 服务器端代码具有构建登录 url 的功能

我被卡住的问题是我必须将此文本从服务器传递到客户端到 javascript,以便我可以使用诸如 window.location.href=url; 之类的东西。

谁能解释我如何传递这个url并在ajax成功函数的回调函数中访问它。

有没有其他方法?...

4

3 回答 3

0

有很多方法可以处理 ajax 请求。最简单的方法(不一定是最好的)是创建一个 servlet 来处理您的 ajax 请求。下面的 servlet 示例将返回 json 字符串{ status: 'not logged in'}

package mycompany;

public CheckLoginServlet extends HttpServlet {
  protected doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    res.setContentType("application/json");

    HttpSession session = req.getSession();
    // do your stuff to check if user logged in here ..

    PrintWriter writer = res.getWriter();
    writer.append("{ status: 'not logged in' }");
  }
}

在您的 web.xml 部署描述符文件中声明并映射此 servlet:

<web-app>
  <servlet>
    <servlet-class>mycompany.CheckLoginServlet</servlet-class>
    <servlet-name>CheckLoginServlet</servlet-name>
  </servlet>

  <servlet-mapping>
    <servlet-name>CheckLoginServlet</servlet-name>
    <url-pattern>/checklogin</url-pattern>
  </servlet-mapping>
</web-app>

servlet 现在映射到http://myhost/myappname/checklogin. 然后,您可以通过 jquery 向该 servlet 发送 ajax post 请求:

$.ajax('checklogin', {
  type: 'POST'
}).done(function(res) {
  console.log(res.status); // will give you 'not logged in'
});

这种方法当然是一种陈旧过时的方法,但它有助于您了解 servlet 基础知识。如果您正在构建真实的企业应用程序,请考虑使用SpringJSF等 Web 框架。

于 2013-08-29T03:02:57.747 回答
0

您可以将响应中的用户状态和登录 URL 作为 JSON 发送。让我们为您的响应创建一个模型。

    public class Result {

     private boolean status;
     private String url;

     Result() {
     }

     Result(boolean status, String url) {
       this.status = status;
       this.url = url;
     }

     // getters and setters

    }

现在,在您检查用户状态并构建登录 url 的操作中,初始化您的模型。

Result res = new Result(status, url);

现在我们需要将此模型作为 json 响应发送。有很多方法可以做到这一点,但我将使用 Google GSON 将模型序列化为 json 字符串。

private String result;

public void getResult() {
 return this.result;
}

public void setResult(Stringresult) {
this.result = result;
}

Gson gson = new Gson();
result= gson.toJson(res);
==> json is {"status": true,"url":"www.example.com"}

最后一部分是检查客户端的响应并采取适当的措施。

$.ajax({
    // ...
    success: function(response) {
        var responseJson = JSON.parse (response.responseText);
        if (!responseJson.status) {
           window.location.href = responseJson.url;
        }
    }
});

参考:https ://sites.google.com/site/gson/gson-user-guide

于 2013-09-07T17:09:54.867 回答
0

检查用户是否登录可能应该由您的 JSP 代码处理。

这样,您可以在页面呈现之前发送重定向标头,而不必在重定向用户之前等待返回 ajax 响应。使用 ajax 意味着他们会在您重定向之前看到他们无权访问的页面。

于 2013-08-29T02:47:32.873 回答