Java 数据源在struts中不工作
我试图使用struts中的datasource从表中获取一些值,但它给出了一个例外: 类型异常报告 信息 说明服务器遇到内部错误(),无法完成此请求 例外情况Java 数据源在struts中不工作,java,struts,Java,Struts,我试图使用struts中的datasource从表中获取一些值,但它给出了一个例外: 类型异常报告 信息 说明服务器遇到内部错误(),无法完成此请求 例外情况 javax.servlet.ServletException: java.lang.NullPointerException org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520) org.apache.struts.a
javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:427)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause
java.lang.NullPointerException
login.LoginAction.execute(LoginAction.java:31)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
注意,Apache Tomcat/6.0.26日志中提供了根本原因的完整堆栈跟踪
我的struts-config.xml包含数据源连接属性:
请任何人帮助运行上述程序
问候
Mouli V您的
数据源
为空
,这会导致空点异常
。它是null
,因为您试图获取一个不存在的属性:
DataSource ds = (DataSource) servlet.getServletContext().getAttribute("");
在Struts中,您似乎通过调用
另一件事-您已经标记了struts2,但正在使用struts1。是否确实使用了正确的库?使用Struts-1.X内置的“数据源”功能时,Struts-config.xml包含所有与数据库相关的详细信息。 因为您可以使用“validationQuery”属性来验证有关db连接的所有内容
<data-sources>
<data-source key="datasource" type="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<set-property property="password" value="pass" />
<set-property property="username" value="uname" />
<set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<set-property property="url" value="jdbc:oracle:thin:@localhost:1521:abc" />
<set-property property="validationQuery" value="select sysdate from dual" />
</data-source>
</data-sources>
如何在Action类中调用getDataSource(request)方法
DataSource ds = (DataSource) servlet.getServletContext().getAttribute("");
<data-sources>
<data-source key="datasource" type="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<set-property property="password" value="pass" />
<set-property property="username" value="uname" />
<set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<set-property property="url" value="jdbc:oracle:thin:@localhost:1521:abc" />
<set-property property="validationQuery" value="select sysdate from dual" />
</data-source>
</data-sources>
public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
LoginForm loginForm = (LoginForm) form;
if (loginForm.getUsername() != null && loginForm.getPassword() != null)
{
DataSource dataSource = getDataSource(request, "datasource");
Connection myConnection = dataSource.getConnection();
PreparedStatement stmt = null;
String select = "SELECT USERNAME,PASSWORD from USER where USERNAME=?";
stmt = myConnection.prepareStatement(select);
stmt.setString(1, username);
rst = stmt.executeQuery();
................
}
}