如何通过ajax调用将JSP加载到div中

时间:2014-04-25 05:40:05

标签: ajax spring jsp spring-mvc html

我正在尝试将我的静态网站更新为Spring MVC应用程序。我已经将Spring MVC后端集成到了运行良好的应用程序中。

我现在被困在将一个JSP页面注入div中。

逻辑是:我按下head部分的一个按钮(top_frame.html - 嵌入一个Ajax调用)让我的控制器检查用户登录状态,如果用户不在系统中,控制器返回一个JSP页面( url格式)将Ajax调用为响应体,工作正常。然后,Ajax执行成功函数调用以将JSP输出加载到div中。这个JSP会生成一个用户信息注册表单,让用户填写它,从这里,应用程序将转到MVC工作模型。我的问题是:似乎Ajax从未正确加载JSP并且错误消息为:

GET http://localhost:8080/htss/customers/testController.jsp  404 Not Found 18ms

我尝试在浏览器中从url访问JSP,我看到相同的结果,这意味着我的JSP无法访问。

有我的系统配置:

在web.xml中显示:

<servlet>
    <description>generated-servlet</description>
    <servlet-name>htss Servlet</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:htss-web-context.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>htss Servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我的htss-web-context.xml显示:

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp" /> 
</bean>

我的JSP页面填充在文件夹中:

WebContent/WEB-INF/pages/customers/

我的top_frame.html中的Ajax函数为:

<script type="text/javascript"> <!-- get login information from controller -->
function createCustomer() {
var contextPath=window.location.pathname;
console.log("Context Path: "+contextPath);
console.log("createCustomer called.");
$.ajax({
    contentType: "application/json; charset=utf-8",
    url: 'testControllerURL',
    data: ({name : "me"}),
    success: function(data) {
        var elem = document.getElementById('sign_in');
        console.log(elem.ATTRIBUTE_NODE);
        console.log(data);
      <!-- $('#sign_in').load($(data).attr('href')); -->
        $('#sign_in').load(data);
    }
  });
}
</script>

sign_in是同一top_frame.html中的div

我的控制器显示:

/*Added for ajax call response function*/
@RequestMapping(value="/testControllerURL") 
public @ResponseBody String testControllerURL(ModelMap model) {
    String custSequence=getCustomerIdSequence(thsssequenceDAO);
    model.addAttribute("CustSequence",custSequence);
    /*model.addAttribute("commandObjectName", commandObject);*/
    System.out.println("ajax text controller url called.");
    return "customers/testController.jsp";
}

Ajax函数调用工作,控制器工作,但JSP找不到,非常烦我。

请帮助!!

更新:正如我想的那样,也许spring mvc不能真正识别我的JSP,我在web.xml中添加了一些JSP servlet:

<servlet>
    <description>jsp-servlet</description>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
            <servlet-name>jsp</servlet-name>
            <url-pattern>/WEB-INF/pages/</url-pattern>
</servlet-mapping>

但这没什么变化,JSP仍未找到。

由于这个JSP是一个普通的JSP,它不链接到任何相关的servlet,它不适合MVC模型。关于这类问题的任何想法??

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

试试这个:

$(&#39;#sign_in&#39)的负载。(&#34; Pagename.jsp&#34);

答案 1 :(得分:0)

首先,

WEB.XML:

<servlet-mapping>
    <servlet-name>htss Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

将所有传入请求映射到spring servlet

答案 2 :(得分:0)

我发现了为什么?

由于Spring必须保护源不能直接从URL访问,所以WEB-INF下的所有JSP都不可公开访问。

要从URL启用单个JSP,我需要在htss-web-context.xml中添加一行:

<mvc:view-controller path="/jsp/testController" view-name="jsp/testController"/>

这行代码将让/ jsp / testController的URL请求指向WEB-INF / pages / jsp / textController.jsp

所以我可以从ajax调用或URL访问这个JSP。但是出现了新问题,Spring MVC容器用源代码而不是执行JSP结果来提供这个JSP。那是下一个问题。