我创建了一个JSP页面来测试如何连接到Oracle,我正在使用这段代码。
String CONN_STRING = "jdbc:oracle:thin:@localhost:1521:orcl";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection(CONN_STRING,
"UMS", "d0801213177");
当oracle正在初始化或者TNS拒绝接受更多连接或者数据库的密码被更改时,如果发生了某些事情,那么当我加载页面时会收到错误报告。其中显示总连接字符串。如果在用户使用此页面时发生这种情况,那么我的安全性就会丢失。
所以,我的问题是有没有办法阻止Tomcat表单报告错误?“。如果还有更好的方法,请告诉。
跟进:如果我使用的是预处理语句,则表/视图之类的错误不存在这些类型的错误是一般的,所以我需要将每个块放在单独的try catch块中吗?
作为一个初学者,我正在努力隐藏stackTrace,因为它也显示了我的连接字符串,用户名和密码。
现在我知道我应该从未在JSP中编写过这段代码。使用Servlet执行此任务本来是一个更好的
答案 0 :(得分:2)
JSP为您提供了为每个JSP指定错误页面的选项。每当页面抛出异常时,JSP容器都会自动调用错误页面。
<%@ page language="java" errorPage="" %>
<html>
<head>
<title>Error Handling by try catch block in JSP</title>
</head>
<body>
<%
try{
String CONN_STRING = "jdbc:oracle:thin:@localhost:1521:orcl";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection(CONN_STRING,
"UMS", "d0801213177");
}
catch(Exception e)
{
e.printStackTrace();
out.print("Error caught by Catch block is : "+e.getMessage());
}
%>
</body>
</html>
最好在servlet中执行业务逻辑,并使用requestDispatcher将其重定向到jsp。
答案 1 :(得分:1)
我认为errorPage
指令的page
。例如,将它放在.jsp页面的顶部:
<%@ page errorPage="ExceptionHandler.jsp" %>
当您收到异常时,它会被ExceptionHandler.jsp
页面“抓住”,该页面将能够处理它。
那个ExceptionHandler.jsp
页面会是这样的:
<%@ page isErrorPage="true" import="java.io.*" %>
<html>
<head>
<title>Exceptional Even Occurred!</title>
<style>
body, p { font-family:Tahoma; font-size:10pt; padding-left:30; }
pre { font-size:8pt; }
</style>
</head>
<body>
<%-- Exception Handler --%>
<font color="red">
<%= exception.toString() %><br>
</font>
<%
out.println("<!--");
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
exception.printStackTrace(pw);
out.print(sw);
sw.close();
pw.close();
out.println("-->");
%>
</body>
</html>
...启用它。
有关详细信息,请查看本文中的详细信息和完整示例:Exception Handling in JSP Pages。