gpt4 book ai didi

spring - jsp errorPage 无法与 spring dispatcher 一起正常工作

转载 作者:行者123 更新时间:2023-12-01 12:53:51 24 4
gpt4 key购买 nike

我在我的 JSP 项目中使用 Spring:

我对所有 HTML 请求都有以下映射:

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

因此每个请求都会转到调度程序。

我有一个 JSP 页面,其中有 session.getAttribute() ,它将 session 变量返回到该页面。

如果某些用户直接访问该页面,则 session 变量返回为 null。

为了避免这种情况,我尝试在 JSP 页面中添加以下行:

<%@page errorPage="error.jsp"%>

JSP 文件位于该页面所在的同一目录中,但没有成功。我收到以下异常:--> 404

我也尝试了组合,这样errorPage会指向如下:

<%@page errorPage="../error.jsp"%>还是不行

然后,我在 Controller 中添加了一个条目,如下所示:

 @RequestMapping("/xyz/result/error")
public ModelAndView showErrorPageEng() {
return new ModelAndView("errorpage", "command", null);
}

问题的更新部分:

我有以下用于错误页面的图 block 条目:

<definition name="errorpage" extends="basic"
template="/error/error_layout.jsp">
<put-attribute name="error" value="/error/error.jsp"/>
</definition>

并将 JSP 中的代码修改为:

<%@page errorPage="error.html"%>

上面路径/xyz/result/error如下:

ROOT/xyz/result/error

我可以访问文件 mydomain/xyz/result/error.html但同样的事情并没有发生,除了以下异常(exception):

开始于

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:745)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
at org.apache.jsp.error_jsp._jspService(error_jsp.java:63)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:745)


**and ends as**

at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:220)
at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44)
at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322)
at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:124)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549

)

最佳答案

另一个基于@pradeep 现有解决方案的可能解决方案是使用 HttpServletResponse 对象重定向到静态 HTML 页面。

虽然在 JSP scriplet 页面声明中不能使用静态 HTML 页面,但浏览器可访问的现有路径是服务器可以将用户重定向到的路径。

这种解决方案的优点是 HTML 保留在它所属的位置,在 HTML 文件中,而不是在 Java 字符串中。这创建了一个更易于维护的环境,其中的代码可供 Java 工程师阅读和 Web 开发人员访问,但仍建立在建议的解决方法之上。

Java:

String  myObject= (String)session.getAttribute("finalList");

if(myObject==null)
{

// redirect to the error page, using static HTML
response.sendRedirect("/errorPage.html");
return;

}

errorPage.html:

<html>
<head></head>
<body>
<div class="content">
<div class="mainbarWH">
<div class="article">
<h2 class="style1">Sorry !</h2>
<div class="clr style1"></div>
<p class="style1">
<strong>Your session has been expired </strong>
</p>
<p class="style1">Please go to <a href="engineering.html">Home</a></p>
</div>
</div>
<div class="clr"></div> </div>
</body>
</html>

关于spring - jsp errorPage 无法与 spring dispatcher 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com