使用JQuery加载jsp页面

时间:2013-09-14 15:29:28

标签: jquery jsp servlets

我的页面中有一个特定的div,我想加载所有的子页面(我正在使用JQuery)。在加载它们之前我需要在服务器上做一些操作,所以我调用我的servlet并且在完成所有操作后我想加载.jsp页面......但我不知道如何。

使用responseText:

/SAJ/WebContent/WEB-INF/views/administracion/semestres/semestreIndex.jsp

(我的项目结构中需要存储.jsp的路径)

我在div中写了responseText:

<div id="content" class="testDiv" >

使用:

function load() {
    $.ajax({
        type: "POST",
        url: "/SAJ/pages/semestre",
        success: function(responseText) {
            $('#content').text(responseText); 
        }
    });
}

但我不知道如何加载整个页面。我的第一个想法是这样做:

function load() {
    $.ajax({
        type: "POST",
        url: "/SAJ/pages/semestre",
        success: function(responseText) {
            $('#content').load(responseText); 
        }
    });
}

但我在Chrome控制台中收到404错误:

GET http://localhost:8080/SAJ/WebContent/WEB-INF/views/administracion/semestres/semestreIndex.jsp 404 (Not Found)
我猜想我使用错误的路线?但是我怎样才能找到哪一个是正确的呢?我只是关注我的项目结构:

Project structure

Servlet代码:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    try {
        Action action = ((ActionFactory) getServletContext().getAttribute("actions")).getAction(request);
        String view = action.execute(request, response);
        if(view.equals("index")){
            request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
        }else{
            response.getWriter().write("/SAJ/WebContent/WEB-INF/" + view + ".jsp");
        }
    } catch (Exception e) {
        throw new ServletException("Executing action failed.", e);
    }
}

servlet调用的操作:

public class SemestreListarAction implements Action{

    public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception{
    request.setAttribute("test", "HELLO WORLD!");
    System.out.println("I'm nice so I did some stuff for you!");

        return "views/administracion/semestres/semestreIndex";
    }
}

的web.xml

<servlet>
    <servlet-name>Redirector</servlet-name>
    <servlet-class>com.saj.controller.Redirector</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Redirector</servlet-name>
    <url-pattern>/pages/*</url-pattern>
</servlet-mapping>

号码:

<a href="#" onclick="load()">Load</a>

3 个答案:

答案 0 :(得分:3)

让我们承认你有这个div:

<div id='result'></div>

尝试使用.load(),如下所示:

function load(jsp_path) {

    $("#result").load(jsp_path);

}

答案 1 :(得分:0)

好吧,在最终能够加载一些东西之后我发现了,因为如何配置所有内容,唯一需要加载的是索引。为了纠正这个问题,我改变了我的逻辑。

首先,我只使用加载功能来询问页面:

function Load() {
$.ajaxSetup({
    data: { load: '/semestre' }
});

$('#content').load("#/views/administracion/semestres/semestreIndex.jsp"); //jsp's path
}

然后更改我的servlet(所以它重定向到jsp所在的正确路径)和actionFactory使用参数load而不是request.getPathInfo()

Servlet:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        Action action = ((ActionFactory) getServletContext().getAttribute("actions")).getAction(request);
        String view = action.execute(request, response);
        request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);           
    } catch (Exception e) {
        throw new ServletException("Executing action failed.", e);
    }
}

行动工厂:

public Action getAction(HttpServletRequest request) {
    Action action = actions.get(request.getParameter("load"));

    if(action == null)
        return new DefaultAction();
    else
        return action;
}

在结论中,问题出在路径和逻辑上。在我的情况下没有必要使用$ ajax和$ load,因为$ load本身就是一个http请求所以我可以执行逻辑,然后在同一个调用中加载具有正确值的页面。路径上的问题是感谢缺少“#”。

我想知道是否有办法更改请求路径,以便我可以删除“load”参数,此外现在一切顺利。

答案 2 :(得分:0)

这里的一个关键是,确保您的jsp不在web-inf目录中,将其移动到等于web-inf的级别或与web-inf相同级别的目录。