出错可能是你的datasource不可用,不知道driver是不是在classpath里?
dtd是用来定义xml文件中的标记的,tld是用来定义jsp是用到的标记库的
formbean是用来传递和处理表单中的数据的,通常一个表单都会有一个formbean与之对应,
通过request请求把前台的表单数据传递到服务器端处理。我也只是简单了解过struts,没有什么实际经验,希望能帮上点忙
dtd是用来定义xml文件中的标记的,tld是用来定义jsp是用到的标记库的
formbean是用来传递和处理表单中的数据的,通常一个表单都会有一个formbean与之对应,
通过request请求把前台的表单数据传递到服务器端处理。我也只是简单了解过struts,没有什么实际经验,希望能帮上点忙
dtd是xml文档类型定义文件
tld是struts定义的jsp标签库
formbean同意楼上的,formbean可以认为它是jsp页面信息的一个封装类
.\lib\mm.mysql-2.0.14-bin.jar;
.\lib\struts.jar;
.\lib\commons-dbcp-1.1.jar;
.\lib\commons-pool-1.1.jar;
.\lib\commons-validator.jar;
.\lib\commons-logging.jar;
.\lib\commons-fileupload.jar;
.\lib\commons-digester.jar;
.\lib\commons-collections.jar;
.\lib\commons-beanutils.jar;
出错信息仍然为
javax.servlet.UnavailableException: Initializing application data source org.apache.struts.action.DATA_SOURCE
at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:822)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:371)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:698)
at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:641)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:586)
at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:366)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:240)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;import org.apache.struts.Globals;
import org.apache.struts.action.ActionServlet;/**
* @author chentingjia
*
*/
public class CarActionServlet extends ActionServlet { private Connection conn; //数据库连接 /**
* 得到数据库连接
* @return
* @throws Exception
*/
private Connection getConnection() throws Exception {
return getConnectionMysql();
} /**
* 从JNDI得到数据库连接
* @return
* @throws NamingException
* @throws Exception
* @throws SQLException
*/
private Connection getConnectionJNDI()
throws NamingException, Exception, SQLException {
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
if (ctx == null)
throw new Exception("Car - No Context");
DataSource ds = (DataSource) ctx.lookup("jdbc/EcarDB");
if (ds == null)
throw new Exception("Car - No DataSource");
return ds.getConnection();
} /**
* 得到与Mysql的数据库连接
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection getConnectionMysql()
throws
InstantiationException,
IllegalAccessException,
ClassNotFoundException,
SQLException {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url =
"jdbc:mysql://localhost:3306/ecar?useUnicode=true&characterEncoding=GB2312";
String user = "root";
String password = "";
return DriverManager.getConnection(url, user, password);
} /**
* 使用Struts的方法得到数据库连接
* @return
* @throws SQLException
* @deprecated
*/
private Connection getConnectionStruts() throws SQLException {
try {
DataSource dataSource =
(DataSource) this.getServletContext().getAttribute(
Globals.DATA_SOURCE_KEY);
return dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* 调用对应的Action
*/
protected void process(
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
//设置客户端请求字符集为中文简体
request.setCharacterEncoding("GB2312");
//设置服务端响应字符集为中文简体
response.setContentType("text/html;charset=gb2312"); //得到当前会话
HttpSession session = request.getSession(); try {
//设置文件上传路径
setUploadPath(session);
//设置论坛路径
setBbsPath(session);
//得到数据库连接并保存在会话中
//conn = getConnection();
//session.setAttribute(SysConstant.SESSION_CONNECTION, conn);
//处理请求操作
super.process(request, response);
} catch (Exception e) {
e.printStackTrace();
response.getWriter().println(e.getMessage());
} finally {
//从会话中删除数据库连接
try {
conn =
(Connection) session.getAttribute(
SysConstant.SESSION_CONNECTION);
if (conn != null) {
conn.close();
session.removeAttribute(SysConstant.SESSION_CONNECTION);
}
} catch (Exception e) {
e.printStackTrace();
}
}
} /**
* 设置论坛路径
* @param session
*/
private void setBbsPath(HttpSession session) {
session.setAttribute(
SysConstant.SESSION_BBS_PATH,
this.getInitParameter("bbsPath"));
} /**
* 设置文件上传路径
* @param session
*/
private void setUploadPath(HttpSession session) {
//得到文件上传路径(路径是一个真实的绝对路径)
session.setAttribute(
SysConstant.SESSION_UPLOAD_PATH,
this.getServletContext().getRealPath(
this.getInitParameter("uploadPath") + File.separator));
}
}
你可以看看我的Struts-config。xml文件里的DataSource配置:<data-source>
<set-property value="false" property="autoCommit"/>
<set-property value="Datasource for debug helper" property="description"/>
<set-property value="org.gjt.mm.mysql.Driver" property="driverClass"/>
<set-property value="4" property="maxCount"/>
<set-property value="2" property="minCount"/>
<set-property value="root" property="user"/>
<set-property value="" property="password"/>
<set-property value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GB2312" property="url"/>
</data-source>
既然你是在调用
^@^
你可以看看我的Struts-config。xml文件里的DataSource配置: <data-source>
<set-property value="false" property="autoCommit"/>
<set-property value="Datasource for debug helper" property="description"/>
<set-property value="org.gjt.mm.mysql.Driver" property="driverClass"/>
<set-property value="4" property="maxCount"/>
<set-property value="2" property="minCount"/>
<set-property value="root" property="user"/>
<set-property value="" property="password"/>
<set-property value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GB2312" property="url"/>
</data-source>
既然你是在调用
index。html时,出现异常,那说明你的Struts没有配置成功,你可以不用去找你其他类的麻烦。^@^
你只需
在你的Action里的execute/perform方法里执行:
DataSource ds = this.getDataSource(request);就能得到数据源了,似乎不用你那么麻烦。
不知道你上面那么写是因为什么?^@^
该servlet并不是我写的,只是要由我来维护,由于以前没有接触过struts架构的java模式,所以被struts相关的一些文件搞得头晕不止。
Leemaasn(我给大家拜早年啦!新春快乐!!!) ,你的意思是说在Action类里可以写execute方法和perform么?
上,我不知道原作者指定datasource的这个属性的目的,但既然这里出错,我刚才直接删除了type=org.apache.commons.dbcp.BasicDataSource,<data-sources>
<data-source>
<set-property property="driverClass" value="org.gjt.mm.mysql.Driver" />
<set-property property="url" value="jdbc:mysql://localhost:3306/ecar?useUnicode=true&characterEncoding=gb2312" />
<set-property property="username" value="ecar" />
<set-property property="password" value="ecar" />
<set-property property="maxActive" value="10" />
<set-property property="maxWait" value="5000" />
</data-source>
</data-sources>可是运行结果还是:
javax.servlet.UnavailableException: Initializing application data source org.apache.struts.action.DATA_SOURCE
at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:822)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:371)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:698)
at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:641)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:586)
at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:366)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:240)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
>%$--@#&*......受不了了,到底哪里出问题了,都1天多了还是不行
问题终于找到了!!!!!!!!!!!!!!!!!!!!
神秘,你的想法是好的,可是不大实际,我试过了,如果拷贝源代码到我这里扩展的servlet中,有许多的关联变量和类找不到,不能编译,如果再去考其它相关的就太麻烦了。
错误原因:(在唉声叹气中无意发现)
<data-sources>
<data-source>
<set-property property="driverClass" value="org.gjt.mm.mysql.Driver" />
<set-property property="url" value="jdbc:mysql://localhost:3306/ecar?useUnicode=true&characterEncoding=gb2312" />
<set-property property="username" value="ecar" />
<set-property property="password" value="ecar" />
<set-property property="maxActive" value="10" />
<set-property property="maxWait" value="5000" />
</data-source>
</data-sources>请注意:这里的data-source的xml格式--原作者在这里的data-source是嵌套的
<data-sources>
<data-source>
。。
</data-source>
</data-sources>
这个语法似乎有问题,而各位DX也都没有注意到这个细节,当然可能这样的语法和作者原来
的type=org.apache.commons.dbcp.BasicDataSource有关,不过我到现在为止还不知道这个type有什么用
现在去掉嵌套的data-source,顺利进入servlet
谢谢大家,稍后结贴^_^
DataSource ds = getDateSource(request);//默认的数据库配置
不用自己写java类。
当然要注意检查你的:
1,驱动程序,是否争取,看你的驱动程序版本
2,放到你的lib包
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws
IOException, ServletException {
。
return mapping.findForward("---------------------------back-----------------------");
}
}
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<form-beans>
<form-bean name="loginActionForm" type="com.lanxin.test.web.LoginActionForm" />
</form-beans>
<action-mappings>
<action name="loginActionForm" type="com.netcobol.test.web.LoginAction" input="/jsp/test1.jsp" scope="session" path="/jsp/loginAction">
<forward name="show" path="/jsp/test1.jsp" />
<forward name="Login" path="/jsp/test1.jsp" />
</action>
<action name="loginActionForm" type="com.netcobol.test.web.TestAction" input="/jsp/test3.jsp" scope="session" path="/jsp/testAction">
<forward name="show" path="/jsp/test1.jsp" />
<forward name="Login" path="/jsp/test2.jsp" />
</action>
</action-mappings>
</struts-config>