您的位置:首页 > 编程语言 > Java开发

一个简单的Struts例子

2006-05-30 21:46 651 查看
在“一个简单的Struts例子”(http://blog.csdn.net/dickwinters/archive/2004/09/27/118676.aspx)的基础上修改

首先,struts-config.xml中加入如下配置,注意几个主要项目的配置的顺序(http://blog.csdn.net/dickwinters/archive/2004/09/27/118685.aspx)。

<data-sources>
<data-source key="A" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="org.gjt.mm.mysql.Driver" />
<set-property property="url"
value="jdbc:mysql://localhost/dick?useUnicode=true&characterEncoding=GB18030" />
<set-property property="username" value="root" />
<set-property property="password" value="" />
<set-property property="maxActive" value="10" />
<set-property property="maxWait" value="5000" />
<set-property property="defaultAutoCommit" value="false" />
<set-property property="defaultReadOnly" value="false" />
</data-source>
</data-sources>
几个主要文件改动如下:


LoginAction.java

package dick;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public final class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
UserInfoForm userInfoForm = (UserInfoForm) form;
//从web层获得用户名和口令
String username = userInfoForm.getUsername().trim();
String password = userInfoForm.getPassword().trim();
//声明错误集对象
ActionErrors errors = new ActionErrors();
//声明数据源和连接对象
DataSource dataSource;
Connection cnn=null;

//校验输入
if(username.equals("")){
ActionError error=new ActionError("error.missing.username");
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
if(password.equals("")){
ActionError error=new ActionError("error.missing.password");
errors.add(ActionErrors.GLOBAL_ERROR,error);
}

//调用业务逻辑
if(errors.size()==0){
String validated = "";
try{
//取得数据库连接
dataSource = getDataSource(request,"A");
cnn = dataSource.getConnection();

UserInfoBo userInfoBo=new UserInfoBo(cnn);
validated =userInfoBo.validatePwd(username,password);
if(validated.equals("match")){
//一切正常就保存用户信息并转向成功的页面
HttpSession session = request.getSession();
session.setAttribute("userInfoForm", form);
return mapping.findForward("success");
}
}

catch(Throwable e){
//处理可能出现的错误
e.printStackTrace();
ActionError error=new ActionError(e.getMessage());
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
}
//如出错就转向输入页面,并显示相应的错误信息
saveErrors(request, errors);
return new ActionForward(mapping.getInput());
}
}


UserInfoBo.java

package dick;

import java.sql.Connection;
import java.sql.SQLException;
import java.lang.Exception;

public class UserInfoBo {
private Connection cnn=null;

public UserInfoBo(Connection cnn){
this.cnn=cnn;
}

public String validatePwd(String username,String password){

String validateResult="";

try{
UserInfoDao userInfoDao = new UserInfoDao(cnn);
validateResult=userInfoDao.validatePwd(username,password);
if(validateResult.equals("error.logon.invalid")){
//如果用户名与口令不匹配则报此错
throw new RuntimeException("error.logon.invalid");
}
else if(validateResult.equals("error.removed.user")){
//如果找不到用户则报此错,这样用户看到的出错信息会更详细
throw new RuntimeException("error.removed.user");
}
}
catch(Exception e){
throw new RuntimeException(e.getMessage());
}
finally{
try{
if(cnn!=null){
cnn.close();
}
}
catch(SQLException sqle){
sqle.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
return validateResult;
}
}

添加下面的文件:


UserInfoDao.java

package dick;

import java.sql.*;

public class UserInfoDao {
private Connection con;

public UserInfoDao(Connection con) {
this.con=con;
}

public String validatePwd(String username,String password){
PreparedStatement ps=null;
ResultSet rs=null;
String validated="error.logon.invalid";
UserInfoForm userInfoForm=null;
String sql="select * from userInfo where username=?";
try{
if(con.isClosed()){
throw new IllegalStateException("error.unexpected");

}
ps=con.prepareStatement(sql);
ps.setString(1,username);
rs=ps.executeQuery();
if(rs.next()){
if(!rs.getString("password").trim().equals(password)){
return validated;//口令不正确返回口令不匹配信息

}
else{

validated = "match";//口令正确返回口令匹配信息
return validated;
}
}else{

validated="error.removed.user";//没有找到该用户
return validated;

}

}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}finally{
try{
if(ps!=null)
ps.close();
if(rs!=null)
rs.close();
}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
}
}

web.xml, index.jsp, main.jsp, UserInfoForm.java代码不变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: