在本章你将学习如何使用struts2连接MySQL数据库.
按照如下步骤连接MySQL数据库 :
第一步 : 创建struts.xml并向其中添加如下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>
- <!-- Rose India Struts 2 Tutorials -->
- <constant name="struts.enable.DynamicMethodInvocation"
- value="false" />
- <constant name="struts.devMode" value="true" />
- <include file="struts-default.xml"/>
- <!-- Add packages here -->
- <package name="roseindia" namespace="/roseindia"
- extends="struts-default">
- <!-- inserting data into data base through JDBC -->
- <action name="insert">
- <result>/pages/insertData.jsp</result>
- </action>
- <action name="insertData" class="net.roseindia.insert">
- <result name="error">/pages/insertData.jsp</result>
- <result>/pages/insertSuccess.jsp</result>
- </action>
- </package>
- </struts>
<?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> <!-- Rose India Struts 2 Tutorials --> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <include file="struts-default.xml"/> <!-- Add packages here --> <package name="roseindia" namespace="/roseindia" extends="struts-default"> <!-- inserting data into data base through JDBC --> <action name="insert"> <result>/pages/insertData.jsp</result> </action> <action name="insertData" class="net.roseindia.insert"> <result name="error">/pages/insertData.jsp</result> <result>/pages/insertSuccess.jsp</result> </action> </package> </struts>
第二步 : 创建一个JSP输入表单 :
insertData.jsp
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <html>
- <head>
- <title>Struts 2 Insert Data Application!</title>
- <link href="<s:url value="/css/main.css"/>" rel="stylesheet"
- type="text/css"/>
- </head>
- <body>
- <s:form action="insertData" method="POST" validate="true">
- <tr>
- <td colspan="2">
- Please enter
- </td>
- </tr>
- <s:actionerror />
- <s:fielderror />
- <s:textfield name="username" label="User Name"/>
- <s:password name="password" label="Password"/>
- <s:submit value="Save" align="center"/>
- </s:form>
- </body>
- </html>
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Struts 2 Insert Data Application!</title> <link href="<s:url value="/css/main.css"/>" rel="stylesheet" type="text/css"/> </head> <body> <s:form action="insertData" method="POST" validate="true"> <tr> <td colspan="2"> Please enter </td> </tr> <s:actionerror /> <s:fielderror /> <s:textfield name="username" label="User Name"/> <s:password name="password" label="Password"/> <s:submit value="Save" align="center"/> </s:form> </body> </html>
第三步 : 创建一个Action类.
首先通过MySQL驱动的帮助("org.gjt.mm.mysql.Driver")建立一个MySQL数据库连接.现在,在MySQL数据库中创建一个账户以连接数据库.创建连接后,你可以向MySQL数据库的表中检索,添加,更新数据.
下面的Action类通过方法适当的类型的帮助和API接口建立了与MySQL数据库的连接.如果建立了连接输入的数据会添加到MySQL数据库表中否则显示错误信息.
insert.java
- package net.roseindia;
- import com.opensymphony.xwork2.ActionSupport;
- import java.util.Date;
- import java.sql.*;
- /**
- * <p> Validate a user login. </p>
- */
- public class insert extends ActionSupport {
- public String execute() throws Exception {
- String url = "jdbc:mysql://localhost:3306/";
- String dbName = "taskproject";
- String driverName = "org.gjt.mm.mysql.Driver";
- String userName = "root";
- String password = "root";
- Connection con=null;
- Statement stmt=null;
- try{
- Class.forName(driverName).newInstance();
- con=DriverManager.getConnection(url+dbName, userName,
- password);
- stmt=con.createStatement();
- }
- catch(Exception e){
- System.out.println(e.getMessage());
- }
- String uname=getUsername();
- String pws=getPassword();
- stmt = con.createStatement();
- int val = stmt.executeUpdate("INSERT employee VALUES
- ('"+uname+"','"+pws+"')");
- if(val == 0){
- return ERROR;
- }
- else{
- return SUCCESS;
- }
- }
- // ---- Username property ----
- /**
- * <p>Field to store User username.</p>
- * <p/>
- */
- private String username = null;
- /**
- * <p>Provide User username.</p>
- *
- * @return Returns the User username.
- */
- public String getUsername() {
- return username;
- }
- /**
- * <p>Store new User username</p>
- *
- * @param value The username to set.
- */
- public void setUsername(String value) {
- username = value;
- }
- // ---- Username property ----
- /**
- * <p>Field to store User password.</p>
- * <p/>
- */
- private String password = null;
- /**
- * <p>Provide User password.</p>
- *
- * @return Returns the User password.
- */
- public String getPassword() {
- return password;
- }
- /**
- * <p>Store new User password</p>
- *
- * @param value The password to set.
- */
- public void setPassword(String value) {
- password = value;
- }
- }
package net.roseindia; import com.opensymphony.xwork2.ActionSupport; import java.util.Date; import java.sql.*; /** * <p> Validate a user login. </p> */ public class insert extends ActionSupport { public String execute() throws Exception { String url = "jdbc:mysql://localhost:3306/"; String dbName = "taskproject"; String driverName = "org.gjt.mm.mysql.Driver"; String userName = "root"; String password = "root"; Connection con=null; Statement stmt=null; try{ Class.forName(driverName).newInstance(); con=DriverManager.getConnection(url+dbName, userName, password); stmt=con.createStatement(); } catch(Exception e){ System.out.println(e.getMessage()); } String uname=getUsername(); String pws=getPassword(); stmt = con.createStatement(); int val = stmt.executeUpdate("INSERT employee VALUES ('"+uname+"','"+pws+"')"); if(val == 0){ return ERROR; } else{ return SUCCESS; } } // ---- Username property ---- /** * <p>Field to store User username.</p> * <p/> */ private String username = null; /** * <p>Provide User username.</p> * * @return Returns the User username. */ public String getUsername() { return username; } /** * <p>Store new User username</p> * * @param value The username to set. */ public void setUsername(String value) { username = value; } // ---- Username property ---- /** * <p>Field to store User password.</p> * <p/> */ private String password = null; /** * <p>Provide User password.</p> * * @return Returns the User password. */ public String getPassword() { return password; } /** * <p>Store new User password</p> * * @param value The password to set. */ public void setPassword(String value) { password = value; } }
代码的描述 :
Connection :
这是java.sql包中的一个接口,通过指定的数据库像MySQL, Ms-Access, Oracle等和java文件建立连接.SQL语句执行于Connection接口的上下文中.
Class.forName(String driver):
该方法是static的.它试图动态加载类并返回类实例.当它匹配类的指定string时,它获得String类型值(driver).
DriverManager:
它是java.sql包中的一个类,管理一系列JDBC的驱动.每个驱动都通过该类注册.
getConnection(String url, String userName, String password):
该方法通过指定的数据库url建立数据库连接.它需要三个String类型的参数如 :
url: - 需要连接的数据库url
userName: - 数据库用户名
password: - 数据库密码
con.close():
该方法用来断开连接.它释放了数据库占用的所有资源.
第四步 : 创建验证器.
验证文件的格式应该是<ActionClassName>-validation.xml或<ActionClassName>-<ActionAliasName>-validation.xml.
insert-validation.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
- <validators>
- <field name="username">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>User name is required</message>
- </field-validator>
- </field>
- <field name="password">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>Password is required</message>
- </field-validator>
- </field>
- </validators>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>User name is required</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Password is required</message> </field-validator> </field> </validators>
当在文本域中输入正确的数据后,用户将在insertSuccess.jsp页面得到输入的数据.
insertSuccess.jsp
- <html>
- <head>
- <title>Inserted Data List</title>
- </head>
- <body>
- <b> Inserted Data: </b>
- <b>User name = </b><%=request.getParameter("username") %>!
- <b>Password = </b><%=request.getParameter("password") %>!
- </body>
- </html>
<html> <head> <title>Inserted Data List</title> </head> <body> <b> Inserted Data: </b> <b>User name = </b><%=request.getParameter("username") %>! <b>Password = </b><%=request.getParameter("password") %>! </body> </html>
输出 :
当程序执行时用户得到如下页面 :
不填写任何字段并点击"Save"按钮,你将得到如下输出页面 :
如果你只输入"Password"并不输入其它字段并点击"Save"按钮,你将得到该输出页面 :
如果你只输入"User Name"并不输入其它字段并点击"Save"按钮,你将得到该输出页面 :
当两个字段都填写 :
你将得到 :