我的页面中有一个特定的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)
我猜想我使用错误的路线?但是我怎样才能找到哪一个是正确的呢?我只是关注我的项目结构:
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>
答案 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相同级别的目录。