10.Struts2连接数据库
链接数据库的两种方式:
1.在Action中连接数据库
2.使用工具类连接数据库
1.在Action中连接数据库
源码文档目录如图所示:

1.建立数据库
数据库建立语句:
create database aynu;
use aynu;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `person`
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`gender` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of person
-- ----------------------------

2.加载struts2核心jar包和数据库驱动包
struts2核心jar包,加载方法略。
xwork-core-2.1.6.jar: Structs2框架的核心类库
struts2-core-2.1.8.1.jar: XWork类库,Structs2在其上构建
ognl-2.7.3.jar:对象图导航语言(Object Graph Navigation Language),Structs2框架通过其读写对象属性。
freemarker-2.3.15.jar: Structs2的UI标签的模板使用FreeMarker编写
commons-logging-1.0.4.jar: ASF出品的日志包,Structs2框架使用这个日志包来支持Log4J和JDK1.4+的日志记录。
commons-fileupload-1.2.1.jar: 文件上传组件,2.1.6版本后必须加入此文件。
数据库驱动包:
mysql-connector-java-3.1.12-bin.jar
3.index.jsp源码如下:
<%@ page pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>register page</title>
</head>
<body>
<form action="register.action" method="post">
姓名:<input type="text" name="name"/><br/>
性别:<input type="radio" name="gender" value="male" checked="checked"/>男
<input type="radio" name="gender" value="female"/>女<br/>
年龄:<input type="text" name="age"/><br/>
城市:<input type="text" name="city"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
4.show.jsp源码如下:
<%@ page pageEncoding="utf-8"%>
<html>
<head>
<title>show page</title>
</head>
<body>
插入完成!
</body>
</html>
5.RegisterAction.java源码如下:
package cn.edu.aynu.Stu_con_DataSql.actions; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class RegisterAction {
private String name;
private String gender;
private int age;
private String city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
} public String execute(){
//将数据插入到数据库 //1.加载数据库驱动
try {
String driverName="com.mysql.jdbc.Driver";
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con=null;
PreparedStatement ps=null;
try { //2.数据库链接
String url="jdbc:mysql://127.0.0.1:3306/aynu";
String user="root";
String password="toor";
con=DriverManager.getConnection(url,user,password);//这里选择import java.sql.Connection; //插入SQL语句
String sql="insert into person(name,gender,age,city)values(?,?,?,?)";
ps=con.prepareStatement(sql); //插入数据
ps.setString(1, name);
ps.setString(2, gender);
ps.setInt(3, age);
ps.setString(4,city);
//执行SQL语句插入命令
ps.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
}finally{
try {
ps.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return "success";
}
}
6.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.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
7.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> <package name="one" extends="struts-default"> <action name="register" class="cn.edu.aynu.Stu_con_DataSql.actions.RegisterAction">
<result>/show.jsp</result>
</action> </package> </struts>
8.部署发布,启动tomcat,地址输入:
http://127.0.0.1:8080/Stu_con_DataSql/
程序截图如下:


数据插入数据库成功!

2.使用工具类连接数据库
只需要修改上面的RegisterAction.java和新增加一个工具类JdbcUtil.java即可。

RegisterAction.java源码如下:
package cn.edu.aynu.Stu_con_DataSql.actions; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; import cn.edu.aynu.Stu_con_DataSql.utils.JdbcUtil; public class RegisterAction {
private String name;
private String gender;
private int age;
private String city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
} public String execute(){
//将数据插入到数据库 //1.加载数据库驱动
Connection con=JdbcUtil.getConnection();
PreparedStatement ps=null;
try { //插入SQL语句
String sql="insert into person(name,gender,age,city)values(?,?,?,?)";
ps=con.prepareStatement(sql); //插入数据
ps.setString(1, name);
ps.setString(2, gender);
ps.setInt(3, age);
ps.setString(4,city);
//执行SQL语句插入命令
ps.executeUpdate(); } catch (SQLException e) {
e.printStackTrace();
}finally{
try {
ps.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return "success";
}
}
JdbcUtil.java源码如下:
package cn.edu.aynu.Stu_con_DataSql.utils; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; //数据库工具类
public class JdbcUtil { //这里引用import java.sql.Connection;
private static Connection con; //1.加载数据库驱动
static{ try {
String driverName="com.mysql.jdbc.Driver";
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} } //2.数据库链接
public static Connection getConnection(){ String url="jdbc:mysql://127.0.0.1:3306/aynu";
String user="root";
String password="toor";
try {
con=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
} //3.数据库全部关闭
public static void close(Connection con,Statement stmt,ResultSet rs){
//引入java.sql.Satement包,import java.sql.ResultSet,import java.sql.Connection;
try {
if(con!=null)con.close();
if(stmt!=null)stmt.close();
if(rs!=null)rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//4.数据库选择关闭
public static void close(Object obj){
try {
if(obj instanceof Connection &&obj!=null)((Connection)obj).close();
if(obj instanceof Statement &&obj!=null)((Statement)obj).close();
if(obj instanceof ResultSet &&obj!=null)((ResultSet)obj).close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
重新部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/Stu_con_DataSql/



10.Struts2连接数据库的更多相关文章
- struts2学习(10)struts2国际化
一.国际化简介: 二.struts2国际化设置: struts.xml: <?xml version="1.0" encoding="UTF-8" ?&g ...
- 10.Struts2值栈
1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...
- SSH面试题(struts2+Spring+hibernate)
struts2 + Spring +hibernate Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 对struts2一些理解
1.strust2框架是什么?为解决什么问题出现? Struts2是在WebWork+xwork基础发展而来的. 2. strust2的优缺点优点: 支持Ajax 支持Ognl标签 提供了强大的拦截器 ...
- Struts2知识点小结汇总
Struts2部分 1. JavaEE软件三层结构和MVC的区别? JavaEE软件三层机构是由sun公司提供JavaEE开发规范的:Web层(表现层).业务逻辑层.数据持久层.[其中WEB层会使用前 ...
- Struts2 看1
Struts2部分 1. JavaEE软件三层结构和MVC的区别? JavaEE软件三层机构是由sun公司提供JavaEE开发规范的:Web层(表现层).业务逻辑层.数据持久层.[其中WEB层会使用前 ...
- 面试题: Struts2
1. Struts2与Struts1的联系与区别是什么?为什么要用Struts2? 答案: struts1与struts2都是mvc框架的经典实现模式. Struts2不是从Struts1升级而来,而 ...
- Struts2学习二----------访问Servlet API
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...
随机推荐
- Java环境设置
win7/win8下JDK环境变量设置方法 首先需要到官网上下载JDK这款软件,本人下载的是jdk-7u40-windows-i586版本,安装完成显示jdk1.7.0_67. 其次选择安装路径.本人 ...
- (转载)开始iOS 7中自动布局教程(一)
这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...
- [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术
[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...
- adb server is out of date. killing...
1.查看adb端口号 adb nodaemon server 打印:cannot bind 'tcp:5037' 2.查看端口被哪个进程占用 netstat -ano | findstr " ...
- Azure PowerShell (12) 通过Azure PowerShell创建SSH登录的Linux VM
<Windows Azure Platform 系列文章目录> 本章将介绍如何使用Azure PowerShell,创建SSH登录的Linux VM 前提要求: 1.安装Azure Pow ...
- python的shutil模块
shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作 1.复制文件 def copy(src, dst): """Co ...
- 【转】WPF防止界面卡死并显示加载中效果
原文地址:http://www.cnblogs.com/linyijia/archive/2013/02/06/2900609.html <Window x:Class="Loadin ...
- 效率和协作工具--OneNote
身边有很多的朋友,都是在电脑上办公.除了会计和外贸相关的工作,用到Excel,公司的ERP比较多.日常工作中,特别是事情一多,大家基本不知道从何处完成今天的任务,而已有时经常丢三落四.同事在QQ或者M ...
- C# 对象锁
现在有一种场景,服务端将一个任务派发给10个客户端执行,所有客户端执行完后,整个任务才算执行完. 每个客户端执行完后,通过http发送一个完成的消息给服务端,服务端发送邮件通知给用户. 当10个客户端 ...
- Why is HttpContext.Current null after await?
今天在对项目代码进行异步化改进的时候,遇到一个奇怪的问题(莫笑,以前没遇过),正如标题一样,HttpContext.Current 在 await 异步执行之后,就会变为 null. 演示代码: pu ...