我正在尝试将我的静态网站更新为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模型。关于这类问题的任何想法??
非常感谢任何帮助。
答案 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。那是下一个问题。