java - 如何从 servlet 将重定向发送到位于 WEB-INF 目录下的错误页面?
问题描述
我有 ServletContextListener,我在其中初始化数据库 JNDI 轮询,如果发生异常,我发现我将属性设置为 Servlet 上下文。
听众:
@WebListener
public class ApplicationListener implements ServletContextListener {
private static final Logger LOGGER = LogManager.getLogger(ApplicationListener.class);
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext ctx = sce.getServletContext();
DAOFactory dao = DAOFactory.getDAOFactory(1);
try {
MySQLDAOFactory.dataSourceInit();
QueriesUtil.getQueries();
} catch (SQLException | NamingException throwables) {
LOGGER.error(throwables);
ctx.setAttribute("Error",throwables.getMessage());
}
ctx.setAttribute("MySQLFactory",dao);
Locale.setDefault(new Locale("ua"));
}
}
前端控制器:
@WebServlet(name = "FrontController", value = "/pages/*")
public class FrontController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext();
String error = (String)context.getAttribute("Error");
if(error!=null){
resp.sendRedirect(req.getContextPath()+"/WEB-INF/view/error.jsp?errorMessage="+error);
}
try {
View view = new View(req, resp);
Action action = ActionFactory.getInstance().getAction(req);
action.execute(view);
view.navigate();
} catch (Exception e) {
resp.sendRedirect(req.getContextPath()+"/WEB-INF/view/error.jsp?errorMessage="+e.getMessage());
}
}
}
FrontController 检查 servlet 上下文以找到此属性,如果它存在,我应该将重定向发送到 errorPage,但我无法访问它。我该如何解决?
解决方案
我认为您只需使用forward
of getRequestDispatcher
:
示例:
this.getServletContext().getRequestDispatcher("/WEB-INF/view/error.jsp?errorMessage="+e.getMessage()).forward( request, response );
推荐阅读
- asp.net-core - 在 .NET Core 2.1 中动态包含预编译 (Razor) 视图
- mysql - 两个不同主键的相同外键
- javascript - WordPress 中 load-scripts.php 的 PageSpeed 问题“删除渲染阻止 JavaScript:”
- python - “HTMLParser”对象没有属性“save_bgn”
- spring - 如何在基于 gradle 的项目中使用前端 maven 插件服务前端?
- node.js - 我想在 Windows 10 中安装并需要“fs”、“path”和“js-yaml”,但只有“js-yaml”导致“错误找不到模块”
- excel - 为什么一次定义多个变量会导致空变量,而不是空字符串?
- sql - 使用游标循环更新多个表(SQL Server)
- python-3.x - 了解 lambda 函数排序
- c++ - 由并发无序映射查找线程调用的函数是否安全?