在上面的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>

解决方案 »

  1.   

    第三步错误:
       errors.add("name",new ActionMessage("用户名不能为空!"));
       <html:errors property="name"/>
       这里使用了Struts错误处理机制,但是用法不对.Struts错误处理应该要建立错误资源文件,所有的错误信息写在资源文件里,比如:error.properties里
       name.null=用户名不能为空!
       
       那么在代码里这样使用:
       errors.add("name",new ActionMessage("name.null"));
      

  2.   

    上面的资源文件要在struts-config.xml文件里注册进去
       <message-resources key="error" parameter="properties.error" />
    第四步错误:
       空指针异常,也就是说对象ds为空,数据源没有得到...还有提醒楼主,JAVA编码规范,类名以大写字母开头,这是一个程序员的良好习惯
      

  3.   

    谢谢lip009兄,你说的对象ds为空,但是我在jb里面看到了连接成功(代码如下:package listener;import javax.servlet.*;
    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里面.
    当然希望能给我另外的比较好的连接池方法更好.
    谢谢
      

  4.   

    运行 ds = (DataSource)servlet.getServletContext().getAttribute("ds");这句后面的System.out.println("000");成功打印了,报错是在这句:ds.getConnection();真不知道是ds没有获取到还是什么原因呢?
      

  5.   

    高人们,来了就告诉我那个ds的问题啊,我真不知道在struts里面怎么弄哦
    谢谢
      

  6.   

    把DbLinkListener类里的ds修饰成public static
    直接DbLinkListener.ds
      

  7.   

    我改成了这样://ds = (DataSource)servlet.getServletContext().getAttribute("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)
    这种错
    谢谢你再次指点,谢谢
      

  8.   

    高手们,在jb2005中怎么配置Resource Bundle资源?
      

  9.   

    Jsp页面里好像没Form呢,你怎么提交的啊