我在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()
,它将会话变量返回到该页面。
如果某个用户直接访问该页面,则会话变量将返回null。
为避免这种情况,我尝试在JSP页面中添加以下行:
<%@page errorPage="error.jsp"%>
JSP文件位于该页面所在的目录中,但没有运气。我得到以下例外: - &gt; 404
我也试过一个组合,所以errorPage指向如下:
<%@page errorPage="../error.jsp"%>
仍无效
然后,我在Controller中添加了一个条目,如下所示:
@RequestMapping("/xyz/result/error")
public ModelAndView showErrorPageEng() {
return new ModelAndView("errorpage", "command", null);
}
更新了部分问题:
我为errorpage提供了以下tile条目:
<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
但是没有发生同样的情况,但有以下例外:
以
开头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
)
答案 0 :(得分:2)
我们发现可能的解决方法如下,我们可以把它放在jsp页面中,我不知道但是放回工作,
String myObject= (String)session.getAttribute("finalList");
if(myObject==null)
{
out.println("<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>");
return;
}
让我们说你喜欢的jsp页面
x - 平铺 y - 平铺 z - 在jsp页面中平铺 如果空指针异常出现在tile y中,
然后上面的代码将页面显示为,
x -tile y - 平铺
所以回去的时候,我们只是做了out.println('一些html代码')
这只是解决方法,而不是标准解决方案
答案 1 :(得分:2)
基于@ pradeep现有解决方案构建的另一种可能的解决方案是使用HttpServletResponse对象重定向到静态HTML页面。
虽然静态HTML页面无法在JSP scriplet页面声明中使用,但浏览器可访问的现有路径是服务器可以将用户重定向到的位置。
这种解决方案的优点是HTML保留在HTML文件中的所在位置,而不是Java字符串。这创建了一个更易维护的环境,其中代码可由Java工程师读取并可由Web开发人员访问,但仍然建立在提议的解决方法之上。
<强>爪哇:强>
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>