一个完整Structs2例子(JNDI创建数据源)

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目录下。

通过这三步,一个基本的数据源就配置成功了! 


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值