Struts2注解+JDBC+MySQL小项目应用
来源:互联网 发布:mfc读取access数据库 编辑:程序博客网 时间:2024/06/05 08:26
很简易的Struts2,用JDBC连接MySQL数据库。用于学习Struts2注解和JDBC基础。
一、创建数据库。小哆安装的MySQL数据库
/*Navicat MySQL Data TransferSource Server : myStrutsSource Server Version : 50142Source Host : localhost:3308Source Database : myStrutsDBTarget Server Type : MYSQLTarget Server Version : 50142File Encoding : 65001Date: 2012-01-01 10:30:30*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `user`-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `userName` varchar(20) NOT NULL, `passWord` varchar(20) NOT NULL, `registeredTime` char(12) NOT NULL, PRIMARY KEY (`userName`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('111111', '111111', '201112311022');INSERT INTO `user` VALUES ('admin', 'admin', '201112311026');
二、创建Struts2 Project
New – Dynamic Web Project<myStruts2>
导入jar包1、项目中各部分介绍
1.1 WEBContent包含:
1.1.1 login.jsp(可根据url直接登录)
1.1.2 WEB-INF中: 1.1.2.1 web.xml
1.1.2.2 success.jsp
1.1.2.3 failure.jsp
PS:一般web应用将jsp放在WEB-INF文件夹下的用意:WEB-INF下面的文件会受到保护,通过浏览器无法直接访问,必须通过servlet,action跳转访问
1.2. src包含:
1.2.1 action包:所有Action类,必须实现getter/setter,与jsp直接交互
1.2.2 dao包:连接数据库的类
1.2.3 dmo包:实体类,与数据表字段对应
1.2.4 impl包:业务操作的实现类
2、编写web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>myStruts2</display-name><!-- 用户键入的URL不包含action名称、JSP页面或其他资源,依次寻找文件 --><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><filter><!--过滤器名字 --><filter-name>struts2</filter-name><!-- struts2过滤器支持的StrutsPrepareFilter类 --><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 添加使用注解必须的参数,指定查找Action类的路径 --><!-- <init-param><param-name>actionPackages</param-name><param-value>action</param-value></init-param> --></filter><filter-mapping><!--过滤器拦截名字 --><filter-name>struts2</filter-name><!--过滤器拦截文件路径名字 --><!-- 通配符/*表示拦截所有HTTP请求 --><url-pattern>/*</url-pattern></filter-mapping></web-app>
3、编写login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>login</title></head><body><form action="register!register.action"><table><tr><td>用户名:</td><td colspan=2><input type="text" name="userName" /></td></tr><tr><td>密码:</td><td colspan=2><input type="password" name="passWord" /></td></tr><tr><td><input type="reset" name="reset" value="重置" /></td><td colspan=2><input type="submit" name="register" value="注册" /></td></tr></table></form><form action="login!login.action"><table><tr><td>用户名:</td><td colspan=2><input type="text" name="userName" /></td></tr><tr><td>密码:</td><td colspan=2><input type="password" name="passWord" /></td></tr><tr><td><input type="reset" name="reset" value="重置" /></td><td colspan=2><input type="submit" name="login" value="登录" /></td></tr></table></form></body></html>
4、创建操作结果提示JSP<success.jsp/failure.jsp>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!-- Struts2标签taglib --><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset= UTF-8"><title> success </title></head><body><!-- 用session传输数据 -->${sessionScope.userName}<!-- 先声明taglib,value即对应传输数据,对应字段名;为接收到数据时,显示默认default -->success<h1><s:property value="resultMsg" default="未接收到信息"/></h1></body></html>failure.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!-- Struts2标签taglib --><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset= UTF-8"><title>failure</title></head><body>failure<h1><s:property value="resultMsg" default="未接收到信息"/></h1></body></html>
5、创建JDBC连接<dao.DBConn.java>
package dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/** * * 数据库操作 * * @author 莫小哆_ly 2011-12-31 */public class DBConn { private Connection conn; /** * 连接数据库 * @return */ public Connection getConn(){ String url = "jdbc:mysql://localhost:3308/myStrutsDB"; // 数据库地址[jdbc:mysql://<IP>:<db-port>/<db-name>] String user = "root"; // 数据库用户名 String pwd = ""; // 数据库密码 try { Class.forName("com.mysql.jdbc.Driver"); // 加载驱动 conn = DriverManager.getConnection(url, user, pwd);// 注册驱动程序 if (!conn.isClosed()) { System.out.println("连接成功"); } if (conn == null) { System.out.println("连接数据库失败,从检查后重新启动!"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 关闭数据库连接 */ public void closeConn(){ if(conn!=null) { try{ conn.close(); }catch(Exception e){ e.printStackTrace(); } } }}6、创建实体类<dmo.User.java>package dmo;/** * * 用户信息 * * @author 莫小哆_ly 2012-1-1 */public class User { /** * 用户名 */ private String userName; /** * 密码 */ private String passWord; /** * 注册时间yyMMddHHmmss */ private String registeredTime; public User() { } public User(String userName,String passWord,String registeredTime) { this.userName = userName; this.passWord = passWord; this.registeredTime = registeredTime; } 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 getRegisteredTime() { return registeredTime; } public void setRegisteredTime(String registeredTime) { this.registeredTime = registeredTime; }}
7、创建业务实现类,包括登录、注册、数据库操作<impl>7.1 impl. InsertConOpera.java(实现insert操作)package impl;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import java.text.SimpleDateFormat;import java.util.Date;import dao.DBConn;/** * * 本页代码包含 【insert】功能 * * @author 莫小哆_ly 2011-12-31 */public class InsertConOpera { //注册时间yyMMddHHmmss private String registeredTime; /** * 用户注册功能 * @param userName * @param passWord */ public int save(String userName, String passWord) { int count = 0; try { DBConn db = new DBConn(); Connection conn = db.getConn(); // 执行静态SQL语句 Statement stmt = conn.createStatement(); //生成注册时间 Date now = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss"); registeredTime = format.format(now); String sql0 = "INSERT INTO user(userName,passWord,registeredTime) " + " VALUES (" + "'" + userName + "','" + passWord + "','" + registeredTime + "')"; count = stmt.executeUpdate(sql0); if (stmt != null) { // 关闭声明 try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { // 关闭连接对象 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } db.closeConn(); } catch (SQLException e) { e.printStackTrace(); } return count; }}
7.2 impl. SelectConOper.java (实现select操作)package impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import dao.DBConn;/** * * 本页代码包含 【select】功能 * * @author 莫小哆_ly 2012-1-1 */public class SelectConOper { /** * 注册时检测功能 * @param userName * @return */ public int select(String userName) { int count=0; try { DBConn db = new DBConn(); Connection conn = db.getConn(); Statement stmt = conn.createStatement() ; String sq20 = "SELECT count(*) FROM user WHERE userName = " + "'" + userName + "'"; //执行给定的 SQL 语句,该语句返回单个 ResultSet对象 ResultSet rs = stmt.executeQuery(sq20) ; while(rs.next()){ count = rs.getInt(1); } if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 关闭声明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } db.closeConn(); } catch (SQLException e) { e.printStackTrace(); } return count; } /** * 静态SQL语句 * @param userName * @param passWord * @return */ public int selectStatement(String userName,String passWord) { int count=0; try { DBConn db = new DBConn(); Connection conn = db.getConn(); Statement stmt = conn.createStatement() ; String sq20 = "SELECT count(*) FROM user WHERE userName = " + "'" + userName + "' and userName = '" + passWord + "'"; ResultSet rs = stmt.executeQuery(sq20) ; while(rs.next()){ count = rs.getInt(1); } if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 关闭声明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } db.closeConn(); } catch (SQLException e) { e.printStackTrace(); } return count; } /** * 动态SQL语句 * @param userName * @param passWord * @return */ public int selectPreparedStatement(String userName,String passWord) { int count=0; try { DBConn db = new DBConn(); Connection conn = db.getConn(); String sq30 = "SELECT count(*) FROM user WHERE userName = ? and passWord = ?"; PreparedStatement pstmt = conn.prepareStatement(sq30); pstmt.setString(1,userName); pstmt.setString(2,passWord); ResultSet rs = pstmt.executeQuery() ; while(rs.next()){ count = rs.getInt(1); } if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(pstmt != null){ // 关闭声明 try{ pstmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } } catch (SQLException e) { e.printStackTrace(); } return count; }}
此处动态SQL和静态SQL二选其一即可。7.3 impl.RegisterImpl.java (实现注册相关业务操作)
package impl;/** * * 实现注册相关业务 * * @author 莫小哆_ly 2012-1-1 */public class RegisterImpl { SelectConOper selectConn = new SelectConOper(); InsertConOpera insertConn = new InsertConOpera(); //校验业务,select public int findByUserName(String userName) { int count = selectConn.select(userName); return count; } //注册业务,insert public int register(String userName, String passWord) { int count = insertConn.save(userName,passWord); return count; }}
7.4 impl. LoginImpl.java (实现insert操作)package impl;import dmo.User;/** * * 实现登录相关业务 * * @author 莫小哆_ly 2012-1-1 */public class LoginImpl { SelectConOper selectConn = new SelectConOper(); //登录业务,select public int login(User user) { int count = selectConn.selectStatement(user.getUserName(), user.getPassWord()); return count; }}
8、编写Action类,与jsp交互<action.LoginAction.ava>package action;import java.util.Map;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import impl.RegisterImpl;import impl.SelectConOper;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;@Namespace("")@Results({ @Result(name = "loginSuccess", location = "/WEB-INF/success.jsp"), @Result(name = "loginFailure", location = "/WEB-INF/failure.jsp"), @Result(name = "checkSuccess", location = "/WEB-INF/success.jsp"), @Result(name = "checkFailure", location = "/WEB-INF/failure.jsp") })public class LoginAction extends ActionSupport { private static final long serialVersionUID = 1L; private String userName; private String passWord; private String resultMsg; private int resultInt; RegisterImpl regImpl = new RegisterImpl(); // 对应的jsp: // Namespace/类名!方法名.action // <form action="action/login!login.action"> // Action!方法名.action // <form action="login!login.action"> // 提交注册 @Action("register") public String register() { // 验证用户名是否重复 resultInt = regImpl.findByUserName(userName); if (resultInt != 0) { resultMsg = "用户名已被使用,请重新输入"; return "registerFailure"; } else { resultInt = regImpl.register(userName, passWord); if (1 == resultInt) { // 1. 将用户信息保存到Session中。 Map<String, Object> session = ActionContext.getContext().getSession(); session.put("userName", userName); session.put("passWord", passWord); // 2. taglib标识传递 resultMsg = "注册成功"; return "registerSuccess"; } else { resultMsg = "注册失败"; return "registerFailure"; } } } // 登录 @Action("login") public String login() { resultMsg = null; // 对用户的输入格式进行验证//应定义在jsp页面javScript if ("".equals(userName) || userName == null) { resultMsg = "用户名不能为空"; return "checkFailure"; } else if ("".equals(passWord) || passWord == null) { resultMsg = "密码不能为空"; return "checkFailure"; } else { if (passWord.length() < 4 || passWord.length() > 10) { resultMsg = "密码必须在4到10之间"; return "checkFailure"; } } // 数据库查询,根据用户输入与数据库中数据匹配情况 SelectConOper selectConOpe = new SelectConOper(); int resultInt = selectConOpe.selectStatement(userName, passWord); // int resultInt = // selectConOpe.selectPreparedStatement(userName,passWord); if (1 == resultInt) { resultMsg = "登录成功"; return "loginSuccess"; } else { resultMsg = "登录失败"; return "loginFailure"; } } 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 getResultMsg() { return resultMsg; } public void setResultMsg(String resultMsg) { this.resultMsg = resultMsg; }}
这样,一个很简单的Struts2注解的WEB项目,就完成了。
另外,小哆在安装MySQL时,遇到了不大不小的麻烦,安装总是异常,当时就选了一个文档看了看。
百度文库M
Y S Q L 详 细 安 装 图 解 链接http://wenku.baidu.com/view/b7dbf904e87101f69e3195a4.html
我还特意追了下文档源头
百度文库m
y s q l 5 . 1 安 装 图 解 ( 整 理 ) 链接如下: http://wenku.baidu.com/view/4de81840be1e650e52ea99ef.html
源码下载:http://download.csdn.net/detail/sdsky1987/4024192
- Struts2注解+JDBC+MySQL小项目应用
- Struts2注解+JDBC+MySQL小项目应用
- struts2+JDBC项目小试验
- JavaWeb JDBC连接MySql数据库小项目
- struts2注解小谈
- struts2中的注解应用
- Struts2应用流程注解
- Struts2应用流程注解 .
- struts2注解&struts404错误---【小白系列】0基础到熟练应用struts2框架(七)
- JDBC应用小案例
- mysql struts2 应用
- struts2使用注解--ACTION中的应用
- struts2使用注解--ACTION中的应用
- MySql jdbc autoReconnect 的应用
- struts2 + hibernate整合小项目
- Struts2写一个小项目
- struts2、JDBC、MySQL的中文乱码解决
- Struts2+JDBC 连接MySql验证登陆用户
- 【最大流】北大 poj 1273 Drainage Ditches
- hbase修复.META.表与HDFS文件不一致问题
- ubuntu 下 无线连网
- 转】1602液晶的引脚定义
- [QT] libQGLViewer
- Struts2注解+JDBC+MySQL小项目应用
- 网络及多任务
- bcg 简明使用教程
- 如何预测用户query意图
- 模式识别和机器学习简介
- socks5代理服务器dante(sockd)--使用心得
- 黑马程序员——第十天(Java面向对象-异常-包)
- junit:could not find the main class Program will exit
- 相对定位于绝对定位