请大家容许我跟帖把代码的格式修改一下,谢谢
LoginAction.java package struts.action; import java.io.IOException;
import java.util.Vector; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import myclass.pro.MesProperty;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import myclass.pro.UserProperty;
import myclass.user.UserLoad;
import myclass.common.ChangeBean;
import myclass.common.MD5;
import myclass.common.UsedBean; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import extDao.ExtTmsYhbDAO;
import struts.form.LoginForm; public class LoginAction extends Action { private ChangeBean CB = new ChangeBean(); private UserLoad uload = new UserLoad(); public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
LoginForm loginForm = (LoginForm) form;
HttpSession httpSession = request.getSession();
MesProperty mpro = new MesProperty();
MD5 md5 = new MD5();
String sDlm = CB.clearNull(loginForm.getDlm());// 登陆帐号
String sMm = md5.getMD5ofStr(CB.clearNull(loginForm.getMm()));// 登陆密码
String sLx = CB.clearNull(loginForm.getLx());// 身份类型
String sYzm = CB.clearNull(loginForm.getYzm());// 验证码
String sReturnUrl = CB.clearNull(request.getParameter("retUrl"));// 返回地址
String sErrorUrl = CB.clearNull(request.getParameter("errorUrl"));// 失败返回地址 // 最开始的是判断验证码 开始 ===========================================
String sessionYzm = (String) httpSession.getAttribute("sessionYzm");
if (sessionYzm == null ¦ ¦ !sessionYzm.equals(sYzm)) {
mpro.setMessage("对不起,验证码不正确");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
} else {
// 以下是准备条件 开始 =======================================
ParProperty ppproUser = new ParProperty();//
ppproUser.setBh(sDlm);// 帐号 RetProperty prproUser = new RetProperty();
prproUser = uload.getOne(ppproUser);
if (prproUser == null) {
mpro.setMessage("对不起,您的帐号不存在或者已被禁用");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
}
String sOldMmUser = CB.clearNull(prproUser.getMm());// 用户表密码
String sUserLx = CB.clearNull(prproUser.getLx()); if (!sMm.equals(sOldMmUser)) {
mpro.setMessage("对不起,密码不正确");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
} else {
// 以下是将需要的数据写入session,已供页面使用
UserProperty sessionInfo = new UserProperty(); if(sUserLx.equals("2")){
sessionInfo.setYhlx("js");
}else{
sessionInfo.setYhlx("xs");
}
sessionInfo.setDlm(CB.clearNull(prproUser.getXm()));
sessionInfo.setUserbh(CB.clearNull(prproUser.getBh()));// 内部用户编号
httpSession.setAttribute("sessionLoginInfo", sessionInfo);
// 以上步骤都正确,则登陆成功
mpro.setFlag(true);
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sReturnUrl);
//System.out.println("=========end====================");
return null;
} }
} public UserLoad getUload() {
return uload;
} public void setUload(UserLoad uload) {
this.uload = uload;
} public ChangeBean getCB() {
return CB;
} public void setCB(ChangeBean cb) {
CB = cb;
}
UserLoad.java package myclass.user; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector; import myclass.common.ChangeBean;
import myclass.common.UsedBean;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import extDao.ExtJkxtTxxxbDAO;
import extDao.ExtTmsYhbDAO;; public class UserLoad {
private ExtTmsYhbDAO extTmsYhbDAO;
private UsedBean ub = new UsedBean();
private ChangeBean cb = new ChangeBean(); public RetProperty getOne(ParProperty ppro) {
extTmsYhbDAO = (ExtTmsYhbDAO) ub.getBean("ExtTmsYhbDAO");
return extTmsYhbDAO.getOneInfoByCondition(ppro);
} public ChangeBean getCb() {
return cb;
} public void setCb(ChangeBean cb) {
this.cb = cb;
}
public UsedBean getUb() {
return ub;
} public void setUb(UsedBean ub) {
this.ub = ub;
} public ExtTmsYhbDAO getExtTmsYhbDAO() {
return extTmsYhbDAO;
} public void setExtTmsYhbDAO(ExtTmsYhbDAO extTmsYhbDAO) {
this.extTmsYhbDAO = extTmsYhbDAO;
} } ExtTmsYhbDAO.java package extDao; import java.util.List;
import java.util.Vector; import myclass.common.SpringPageBean;
import myclass.common.UsedBean;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import tablemapping.TmsYhb;
import tablemapping.TmsYhbDAO; public class ExtTmsYhbDAO extends TmsYhbDAO {
private UsedBean ub = new UsedBean(); public RetProperty getOneInfoByCondition(ParProperty ppro) {
RetProperty rpro = new RetProperty();
String hql_query = "from TmsYhb where 1=1 ";
if (ppro.getBh() != null && !ppro.getBh().equals("")) {
hql_query += "and bh='" + ppro.getBh() + "'";
}
if (ppro.getBj() != null && !ppro.getBj().equals("")) {
hql_query += "and bj='" + ppro.getBj() + "'";
}
if (ppro.getLx() != null && !ppro.getLx().equals("")) {
hql_query += "and lx='" + ppro.getLx() + "'";
}
System.out.println("hql_query=="+hql_query);
List list = getHibernateTemplate().find(hql_query);
// System.out.println("list="+list.size());
if (list.size() > 0) {
TmsYhb tmsyhb = (TmsYhb) list.get(0);
ub.copyPropertise(rpro, tmsyhb, "管理权限单条数据查询");
} else {
rpro = null;
}
return rpro;
} public UsedBean getUb() {
return ub;
} public void setUb(UsedBean ub) {
this.ub = ub;
} }
UsedBean.java package myclass.common; import java.net.URL;
import java.util.List;
import java.util.Date;
import java.util.Vector;
import java.text.SimpleDateFormat;
import java.util.Calendar; import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import myclass.user.UserLoad; import org.apache.commons.beanutils.BeanUtils;
import org.hibernate.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; import extDao.ExtTmsYhbDAO; public class UsedBean {
private static String url; private static ApplicationContext ctx; static {
URL classurl = ApplicationContext.class.getResource("/");
setCtx(classurl.toString());
} public Object getBean(String beanName) {
return getCtx().getBean(beanName);
} public ApplicationContext getCtx() {
return ctx;
} public static void setCtx(String classpath) {
if (ctx == null) {
ctx = new FileSystemXmlApplicationContext(classpath + "config.xml");
System.out.println("初始化:载入 " + classpath + "config.xml 成功!");
}
}
public static void setCtx(ApplicationContext ctx) {
UsedBean.ctx = ctx;
} }
LoginAction.java package struts.action; import java.io.IOException;
import java.util.Vector; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import myclass.pro.MesProperty;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import myclass.pro.UserProperty;
import myclass.user.UserLoad;
import myclass.common.ChangeBean;
import myclass.common.MD5;
import myclass.common.UsedBean; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import extDao.ExtTmsYhbDAO;
import struts.form.LoginForm; public class LoginAction extends Action { private ChangeBean CB = new ChangeBean(); private UserLoad uload = new UserLoad(); public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
LoginForm loginForm = (LoginForm) form;
HttpSession httpSession = request.getSession();
MesProperty mpro = new MesProperty();
MD5 md5 = new MD5();
String sDlm = CB.clearNull(loginForm.getDlm());// 登陆帐号
String sMm = md5.getMD5ofStr(CB.clearNull(loginForm.getMm()));// 登陆密码
String sLx = CB.clearNull(loginForm.getLx());// 身份类型
String sYzm = CB.clearNull(loginForm.getYzm());// 验证码
String sReturnUrl = CB.clearNull(request.getParameter("retUrl"));// 返回地址
String sErrorUrl = CB.clearNull(request.getParameter("errorUrl"));// 失败返回地址 // 最开始的是判断验证码 开始 ===========================================
String sessionYzm = (String) httpSession.getAttribute("sessionYzm");
if (sessionYzm == null ¦ ¦ !sessionYzm.equals(sYzm)) {
mpro.setMessage("对不起,验证码不正确");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
} else {
// 以下是准备条件 开始 =======================================
ParProperty ppproUser = new ParProperty();//
ppproUser.setBh(sDlm);// 帐号 RetProperty prproUser = new RetProperty();
prproUser = uload.getOne(ppproUser);
if (prproUser == null) {
mpro.setMessage("对不起,您的帐号不存在或者已被禁用");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
}
String sOldMmUser = CB.clearNull(prproUser.getMm());// 用户表密码
String sUserLx = CB.clearNull(prproUser.getLx()); if (!sMm.equals(sOldMmUser)) {
mpro.setMessage("对不起,密码不正确");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
} else {
// 以下是将需要的数据写入session,已供页面使用
UserProperty sessionInfo = new UserProperty(); if(sUserLx.equals("2")){
sessionInfo.setYhlx("js");
}else{
sessionInfo.setYhlx("xs");
}
sessionInfo.setDlm(CB.clearNull(prproUser.getXm()));
sessionInfo.setUserbh(CB.clearNull(prproUser.getBh()));// 内部用户编号
httpSession.setAttribute("sessionLoginInfo", sessionInfo);
// 以上步骤都正确,则登陆成功
mpro.setFlag(true);
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sReturnUrl);
//System.out.println("=========end====================");
return null;
} }
} public UserLoad getUload() {
return uload;
} public void setUload(UserLoad uload) {
this.uload = uload;
} public ChangeBean getCB() {
return CB;
} public void setCB(ChangeBean cb) {
CB = cb;
}
UserLoad.java package myclass.user; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector; import myclass.common.ChangeBean;
import myclass.common.UsedBean;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import extDao.ExtJkxtTxxxbDAO;
import extDao.ExtTmsYhbDAO;; public class UserLoad {
private ExtTmsYhbDAO extTmsYhbDAO;
private UsedBean ub = new UsedBean();
private ChangeBean cb = new ChangeBean(); public RetProperty getOne(ParProperty ppro) {
extTmsYhbDAO = (ExtTmsYhbDAO) ub.getBean("ExtTmsYhbDAO");
return extTmsYhbDAO.getOneInfoByCondition(ppro);
} public ChangeBean getCb() {
return cb;
} public void setCb(ChangeBean cb) {
this.cb = cb;
}
public UsedBean getUb() {
return ub;
} public void setUb(UsedBean ub) {
this.ub = ub;
} public ExtTmsYhbDAO getExtTmsYhbDAO() {
return extTmsYhbDAO;
} public void setExtTmsYhbDAO(ExtTmsYhbDAO extTmsYhbDAO) {
this.extTmsYhbDAO = extTmsYhbDAO;
} } ExtTmsYhbDAO.java package extDao; import java.util.List;
import java.util.Vector; import myclass.common.SpringPageBean;
import myclass.common.UsedBean;
import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import tablemapping.TmsYhb;
import tablemapping.TmsYhbDAO; public class ExtTmsYhbDAO extends TmsYhbDAO {
private UsedBean ub = new UsedBean(); public RetProperty getOneInfoByCondition(ParProperty ppro) {
RetProperty rpro = new RetProperty();
String hql_query = "from TmsYhb where 1=1 ";
if (ppro.getBh() != null && !ppro.getBh().equals("")) {
hql_query += "and bh='" + ppro.getBh() + "'";
}
if (ppro.getBj() != null && !ppro.getBj().equals("")) {
hql_query += "and bj='" + ppro.getBj() + "'";
}
if (ppro.getLx() != null && !ppro.getLx().equals("")) {
hql_query += "and lx='" + ppro.getLx() + "'";
}
System.out.println("hql_query=="+hql_query);
List list = getHibernateTemplate().find(hql_query);
// System.out.println("list="+list.size());
if (list.size() > 0) {
TmsYhb tmsyhb = (TmsYhb) list.get(0);
ub.copyPropertise(rpro, tmsyhb, "管理权限单条数据查询");
} else {
rpro = null;
}
return rpro;
} public UsedBean getUb() {
return ub;
} public void setUb(UsedBean ub) {
this.ub = ub;
} }
UsedBean.java package myclass.common; import java.net.URL;
import java.util.List;
import java.util.Date;
import java.util.Vector;
import java.text.SimpleDateFormat;
import java.util.Calendar; import myclass.pro.ParProperty;
import myclass.pro.RetProperty;
import myclass.user.UserLoad; import org.apache.commons.beanutils.BeanUtils;
import org.hibernate.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; import extDao.ExtTmsYhbDAO; public class UsedBean {
private static String url; private static ApplicationContext ctx; static {
URL classurl = ApplicationContext.class.getResource("/");
setCtx(classurl.toString());
} public Object getBean(String beanName) {
return getCtx().getBean(beanName);
} public ApplicationContext getCtx() {
return ctx;
} public static void setCtx(String classpath) {
if (ctx == null) {
ctx = new FileSystemXmlApplicationContext(classpath + "config.xml");
System.out.println("初始化:载入 " + classpath + "config.xml 成功!");
}
}
public static void setCtx(ApplicationContext ctx) {
UsedBean.ctx = ctx;
} }
<bean id="extTmsYhbDAO" class="extDao.ExtTmsYhbDAO"/>
<bean id="userLoad" class="myclass.user.UserLoad">
<property name="extTmsYhbDAO"><ref bean="extTmsYhbDAO"/></property>
</bean>
这样就将extTmsYhbDAO注入到userLoad中了,在userLoad中只要这样用:
public RetProperty getOne(ParProperty ppro) {
return extTmsYhbDAO.getOneInfoByCondition(ppro); //在userLoad中已经有一个初始化了的extTmsYhbDAO
}如果按照你的用法,UsedBean应该是一个单例类
=======================
那些import之类的东西贴它干嘛
这里是我的配置文件:config.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-lazy-init="true">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost:3306/tms</value>
</property>
<property name="user">
<value>tms</value>
</property>
<property name="password">
<value>0000</value>
</property>
<property name="minPoolSize">
<value>15</value>
</property>
<property name="acquireIncrement">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>200</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<<value>tablemapping/TmsYhb.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 这是自定义的DAO -->
<import resource="/config-extdao.xml" />
<!-- 这是自定义的struts -->
<import resource="/config-struts.xml" /> <bean id="TmsYhbDAO" class="tablemapping.TmsYhbDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</bean>config-struts.xml <bean name="/home/login" class="struts.action.LoginAction">
<property name="uload">
<ref bean="UserLoad" />
</property>
</bean>
<bean id="UserLoad" class="myclass.user.UserLoad">
<property name="extTmsYhbDAO">
<ref bean="ExtTmsYhbDAO" />
</property>
</bean>
config-extdao.xml <bean id="ExtTmsZxbDAO" class="extDao.ExtTmsZxbDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
再贴一次LoginAction.java的代码public class LoginAction extends Action {
private ChangeBean CB = new ChangeBean();
private UsedBean ub = new UsedBean();
private UserLoad uload;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
LoginForm loginForm = (LoginForm) form;
HttpSession httpSession = request.getSession();
MesProperty mpro = new MesProperty();
MD5 md5 = new MD5();
String sDlm = CB.clearNull(loginForm.getDlm());// 登陆帐号
String sMm = md5.getMD5ofStr(CB.clearNull(loginForm.getMm()));// 登陆密码
// 以下是准备条件 开始 =======================================
ParProperty ppproUser = new ParProperty();//
ppproUser.setBh(sDlm);// 帐号
RetProperty prproUser = new RetProperty();
prproUser = uload.getOne(ppproUser);//执行到这步就停住了,tomcat没有报错
String sOldMmUser = CB.clearNull(prproUser.getMm());// 用户表密码
if (!sMm.equals(sOldMmUser)) {
mpro.setMessage("对不起,密码不正确");
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sErrorUrl);
return null;
} else {
// 以下是将需要的数据写入session,已供页面使用
UserProperty sessionInfo = new UserProperty();
sessionInfo.setDlm(CB.clearNull(prproUser.getXm()));
httpSession.setAttribute("sessionLoginInfo", sessionInfo);
mpro.setFlag(true);
httpSession.setAttribute("ReturnMpro", mpro);
response.sendRedirect(sReturnUrl);
return null;
}
}
public UserLoad getUload() {
return uload;
}
public void setUload(UserLoad uload) {
this.uload = uload;
}
}
我跟踪了代码LoginAction执行后,在UserLoad里面 public RetProperty getOne(ParProperty ppro) {
ExtTmsYhbDAO extTmsYhbDAO = new ExtTmsYhbDAO();
extTmsYhbDAO = (ExtTmsYhbDAO) ub.getBean("ExtTmsYhbDAO");//在这一句停住了,还是没有报错 RetProperty rpro = extTmsYhbDAO.getOneInfoByCondition(ppro);
return rpro;
}我在UserLoad里面测试用getOne()读取数据时成功了,也就是说在LoginAction调用getOne()时就不能getBean了。
而且当出现上面描述的卡住的情况后,用windows的任务管理器会发现tomcat占用的cpu和内存会不断增加,过了比较长的一段时间后,tomcat会报错说out of memory内存不足。补充一下,原来工程的开发环境是tomcat和apache整合的,现在的运行环境是单纯用tomcat,请问环境的不同会导致上面的问题吗?
我试过跳过初始化,但是action运行时tomcat会报错javax.servlet.ServletException: Error creating bean with name '/home/login' defined in ServletContext resource [/WEB-INF/classes/config-struts.xml]: Can't resolve reference to bean 'UserLoad' while setting property 'uload'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserLoad' defined in ServletContext resource [/WEB-INF/classes/config-struts.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.FatalBeanException: Could not instantiate class [myclass.user.UserLoad]; constructor threw exception; nested exception is java.lang.ExceptionInInitializerError: null
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)