在上面的secondTestAction.java中的此句:ds = (DataSource)servlet.getServletContext().getAttribute("ds");是连接数据库连接池的
在这里我把我的数据库连接池发出来:
<?xml version="1.0" encoding="UTF-8"?>
<Server debug="0" port="8084" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector acceptCount="10" connectionTimeout="60000" debug="0" maxThreads="75" minSpareThreads="5" port="8083"/>
<Engine debug="0" defaultHost="localhost" name="Catalina">
<Host appBase="E:\java\secondTestStruts\Tomcat\webapps" autoDeploy="false" debug="0" deployXML="false" name="localhost" unpackWARs="false">
<Context debug="0" docBase="E:\java\secondTestStruts\secondTestStruts" path="/secondTestStruts" reloadable="true" workDir="E:\java\secondTestStruts\Tomcat\work\secondTestStruts">
<Resource name="jdbc/oracle/system" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/oracle/system">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>1000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@localhost:1521:system</value>
</parameter>
<parameter>
<name>username</name>
<value>system</value>
</parameter>
<parameter>
<name>password</name>
<value>sql</value>
</parameter>
</ResourceParams>
</Context>
</Host>
</Engine>
</Service>
</Server>
我的数据库连接池配的server8083.xml + web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>secondTestStruts</display-name>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/oracle/system</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<listener>
<listener-class>listener.DbLinkListener</listener-class>
</listener>
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
</jsp-config>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
五.我的struts-config.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="secondTestActionForm" type="secondteststruts.secondTestActionForm" />
</form-beans>
<action-mappings>
<action name="secondTestActionForm" path="/secondTestAction" scope="request" type="secondteststruts.secondTestAction" >
</action>
</action-mappings>
</struts-config>
在这里我把我的数据库连接池发出来:
<?xml version="1.0" encoding="UTF-8"?>
<Server debug="0" port="8084" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector acceptCount="10" connectionTimeout="60000" debug="0" maxThreads="75" minSpareThreads="5" port="8083"/>
<Engine debug="0" defaultHost="localhost" name="Catalina">
<Host appBase="E:\java\secondTestStruts\Tomcat\webapps" autoDeploy="false" debug="0" deployXML="false" name="localhost" unpackWARs="false">
<Context debug="0" docBase="E:\java\secondTestStruts\secondTestStruts" path="/secondTestStruts" reloadable="true" workDir="E:\java\secondTestStruts\Tomcat\work\secondTestStruts">
<Resource name="jdbc/oracle/system" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/oracle/system">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>1000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@localhost:1521:system</value>
</parameter>
<parameter>
<name>username</name>
<value>system</value>
</parameter>
<parameter>
<name>password</name>
<value>sql</value>
</parameter>
</ResourceParams>
</Context>
</Host>
</Engine>
</Service>
</Server>
我的数据库连接池配的server8083.xml + web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>secondTestStruts</display-name>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/oracle/system</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<listener>
<listener-class>listener.DbLinkListener</listener-class>
</listener>
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
</jsp-config>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
五.我的struts-config.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="secondTestActionForm" type="secondteststruts.secondTestActionForm" />
</form-beans>
<action-mappings>
<action name="secondTestActionForm" path="/secondTestAction" scope="request" type="secondteststruts.secondTestAction" >
</action>
</action-mappings>
</struts-config>
errors.add("name",new ActionMessage("用户名不能为空!"));
<html:errors property="name"/>
这里使用了Struts错误处理机制,但是用法不对.Struts错误处理应该要建立错误资源文件,所有的错误信息写在资源文件里,比如:error.properties里
name.null=用户名不能为空!
那么在代码里这样使用:
errors.add("name",new ActionMessage("name.null"));
<message-resources key="error" parameter="properties.error" />
第四步错误:
空指针异常,也就是说对象ds为空,数据源没有得到...还有提醒楼主,JAVA编码规范,类名以大写字母开头,这是一个程序员的良好习惯
import javax.servlet.http.*;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;public class DbLinkListener extends HttpServlet implements ServletContextListener
{
private DataSource ds; public void contextInitialized(ServletContextEvent sce)
{
ServletContext application = sce.getServletContext();
Context env = null; /**
* Get the JNDI and set pool to a atrribute
* Which we can use it in everywhere.
*/ try
{
env = (Context)new InitialContext().lookup("java:comp/env");
ds = (DataSource) env.lookup("jdbc/oracle/system");
System.out.println("连接成功!");
if (ds == null)
{
application.log("Can not find jdbc/oracle/system JNDI");
System.out.println("连接失败!");
}
}
catch (NamingException ne)
{
application.log("Can not get jdbc/oracle/system JNDI");
}
application.setAttribute("ds", ds);
}
.....
}
)当然这个是当程序编译时,它就会编译server8083.xml就会只动编译上面代码而打印出"连接成功"(我想DbLinkListener .java这种连接池应该还是可以用吧).如果真像你说的是ds没有获取到的话,我想就是这句出了问题: ds = (DataSource)servlet.getServletContext().getAttribute("ds");(secondTestAction.java里面的),那么我该怎么样去获得我上面的DbLinkListener .java里面的ds呢在secondTestAction.java里面.
当然希望能给我另外的比较好的连接池方法更好.
谢谢
谢谢
直接DbLinkListener.ds
ds = dl.ds;
System.out.println("000");
con = ds.getConnection();
mlb.setConnection(con);
但是还是报userName=camelpassword=camel0002006-9-14 17:39:44 org.apache.struts.action.RequestProcessor processException警告: Unhandled Exception thrown: class java.lang.NullPointerExceptionStandardWrapperValve[action]: Servlet.service() for servlet action threw exceptionjava.lang.NullPointerExceptionjava.lang.NullPointerException at secondteststruts.secondTestAction.execute(secondTestAction.java:72) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534)
这种错
谢谢你再次指点,谢谢