UserDao.java
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import model.ex01.User;
public class UserDao {
private DataSource dataSource;
/**
* 在构造方法中初始化数据源对象。
*/
public UserDao() {
Context ctx;
try {
ctx = new InitialContext();
dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/CH11");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* dataSource的访问器方法。
*
* @return 数据源对象
*/
public DataSource getDataSource() {
return dataSource;
}
/**
* 实现用户注册功能,将用户信息保存到数据库表reg_user中。
*
* @param user
* User对象,保存了用户提交的注册信息
* @return 注册成功后的User对象
*/
public User register(User user) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getDataSource().getConnection();
String sql = "insert into reg_user(username,password,sex,email,pwd_question,pwd_answer,reg_date) values(?,?,?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);
int index = 0;
pstmt.setString(++index, user.getUsername());
pstmt.setString(++index, user.getPassword());
pstmt.setString(++index, user.getSex());
pstmt.setString(++index, user.getEmail());
pstmt.setString(++index, user.getPwdQuestion());
pstmt.setString(++index, user.getPwdAnswer());
pstmt.setString(++index, user.getRegDate());
pstmt.execute();
pstmt.close();
sql = "select @@identity";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next())
user.setId(rs.getInt(1));
else {
return null;
}
} catch (SQLException e) {
throw e;
} finally {
closeResultSet(rs);
closePreparedStatement(pstmt);
closeConnection(conn);
}
return user;
}
/**
* 关闭ResultSet对象
*
* @param rs
*/
private void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
}
/**
* 关闭PreparedStatement对象
*
* @param pstmt
*/
private void closePreparedStatement(PreparedStatement pstmt) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
pstmt = null;
}
}
/**
* 关闭数据库链接
*
* @param conn
*/
private void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}
User.java
package model.ex01;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String password;
private String sex;
private String email;
private String pwdQuestion;
private String pwdAnswer;
private String regDate;
private String lastLoginDate;
private String lastLoginIp;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPwdQuestion() {
return pwdQuestion;
}
public void setPwdQuestion(String pwdQuestion) {
this.pwdQuestion = pwdQuestion;
}
public String getPwdAnswer() {
return pwdAnswer;
}
public void setPwdAnswer(String pwdAnswer) {
this.pwdAnswer = pwdAnswer;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
public String getLastLoginDate() {
return lastLoginDate;
}
public void setLastLoginDate(String lastLoginDate) {
this.lastLoginDate = lastLoginDate;
}
public String getLastLoginIp() {
return lastLoginIp;
}
public void setLastLoginIp(String lastLoginIp) {
this.lastLoginIp = lastLoginIp;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
RegisterAction.java
package action.ex01;
import java.text.SimpleDateFormat;
import java.util.Date;
import dao.UserDao;
import model.ex01.User;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user;
private UserDao userDao;
/**
* 在构造方法中初始化UserDao对象
*/
public RegisterAction() {
userDao = new UserDao();
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
/**
* 请求register!default.action,调用doDefault方法
*/
public String doDefault() throws Exception {
return INPUT;
}
/**
* 调用UserDao的register方法注册用户
*/
public String execute() throws Exception {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
user.setRegDate(sdf.format(dt));
userDao.register(user);
return SUCCESS;
}
/**
* 为user对象提供getter方法
*
* @return
*/
public User getUser() {
return user;
}
/**
* 为user对象提供setter方法
*
* @param user
*/
public void setUser(User user) {
this.user = user;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="default" extends="struts-default">
<action name="register" class="action.ex01.RegisterAction">
<!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->
<exception-mapping result="error" exception="java.lang.Exception" />
<result name="input">/WEB-INF/pages/register.jsp</result>
<result name="success">/WEB-INF/pages/success.jsp</result>
<result name="error">/WEB-INF/pages/error.jsp</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/pages/register.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>SQL DataSource</description>
<res-ref-name>jdbc/CH11</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户注册</title>
</head>
<body>
<form action="register.action" method="post">
<table border="0">
<tr>
<td>用户名:</td>
<td><input type="text" name="user.username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="user.password" /></td>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" name="user.sex" value="男" checked/>男
<input type="radio" name="user.sex" value="女" />女
</td>
</tr>
<tr>
<td>邮件地址:</td>
<td><input type="text" name="user.email"/></td>
</tr>
<tr>
<td>密码问题:</td>
<td><input type="text" name="user.pwdQuestion"/></td>
</tr>
<tr>
<td>密码答案:</td>
<td><input type="text" name="user.pwdAnswer"/></td>
</tr>
<tr>
<td><input type="submit" value="注册"/></td>
<td><input type="reset" value="重填"/></td>
</tr>
</table>
</form>
</body>
</html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册成功</title>
</head>
<body>
<s:property value="user.username"/>,恭喜你注册成功!
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
//得到Web应用程序的上下文路径
String path = request.getContextPath();
//构建Web应用程序上下文路径的完整URL
String basePath = request.getScheme() + "://" + request.getServerName() +
":" + request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册失败</title>
</head>
<body>
注册失败,原因是:<s:property value="exception"/>。<br>
请<a href="<%=basePath%>register!default.action">重新注册</a>
</body>
</html>
配置JNDI数据源
步骤一、在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context> 中加入如下代码(要根据自己的情况稍加修改):
<Resource name="jdbc/CH11" auth="Container"
type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://localhost:1433/CH11"
username="sa" password="" maxActive="200" maxIdle="30"
maxWait="-1"/>
步骤二、在工程应用中/WEB-INF/下的web.xml中加入如下代码(要根据自己的情况稍加修改):
<resource-ref>
<description>SQL DataSource</description>
<res-ref-name>jdbc/CH11</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
步骤三、把jar包(可换更高版本)加到Tomcat安装目录中的lib目录下和工程中的lib目录下。
通过这三步,一个基本的数据源就配置成功了!