Struts - 数据库访问

  • 简述

    本章将教您如何通过简单的步骤使用 Struts 2 访问数据库。Struts 是一个 MVC 框架而不是一个数据库框架,但它为 JPA/Hibernate 集成提供了极好的支持。我们将在后面的章节中查看 hibernate 集成,但在本章中,我们将使用普通的旧 JDBC 来访问数据库。
    本章的第一步是设置和准备我们的数据库。我在这个例子中使用 MySQL 作为我的数据库。我在我的机器上安装了 MySQL,并创建了一个名为“struts_tutorial”的新数据库。我创建了一个名为的表login并用一些值填充它。下面是我用来创建和填充表格的脚本。
    我的 MYSQL 数据库有默认用户名“root”和“root123”密码
    
    CREATE TABLE `struts_tutorial`.`login` (
       `user` VARCHAR( 10 ) NOT NULL ,
       `password` VARCHAR( 10 ) NOT NULL ,
       `name` VARCHAR( 20 ) NOT NULL ,
       PRIMARY KEY ( `user` )
    ) ENGINE = InnoDB;
    INSERT INTO `struts_tutorial`.`login` (`user`, `password`, `name`)
    VALUES ('scott', 'navy', 'Scott Burgemott');
    
    下一步是下载MySQL Connector jar 文件并将此文件放在项目的 WEB-INF\lib 文件夹中。完成此操作后,我们现在准备创建操作类。
  • 创建动作

    操作类具有与数据库表中的列对应的属性。我们有user, passwordname作为字符串属性。在 action 方法中,我们使用 user 和 password 参数来检查用户是否存在,如果存在,我们在下一个屏幕中显示用户名。
    如果用户输入了错误的信息,我们会再次将其发送到登录屏幕。
    以下是内容 LoginAction.java 文件 -
    
    package com.jc2182.struts2;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import com.opensymphony.xwork2.ActionSupport;
    public class LoginAction extends ActionSupport {
       private String user;
       private String password;
       private String name;
       public String execute() {
          String ret = ERROR;
          Connection conn = null;
          try {
             String URL = "jdbc:mysql://localhost/struts_tutorial";
             Class.forName("com.mysql.jdbc.Driver");
             conn = DriverManager.getConnection(URL, "root", "root123");
             String sql = "SELECT name FROM login WHERE";
             sql+=" user = ? AND password = ?";
             PreparedStatement ps = conn.prepareStatement(sql);
             ps.setString(1, user);
             ps.setString(2, password);
             ResultSet rs = ps.executeQuery();
             while (rs.next()) {
                name = rs.getString(1);
                ret = SUCCESS;
             }
          } catch (Exception e) {
             ret = ERROR;
          } finally {
             if (conn != null) {
                try {
                   conn.close();
                } catch (Exception e) {
                }
             }
          }
          return ret;
       }
       public String getUser() {
          return user;
       }
       public void setUser(String user) {
          this.user = user;
       }
       public String getPassword() {
          return password;
       }
       public void setPassword(String password) {
          this.password = password;
       }
       public String getName() {
          return name;
       }
       public void setName(String name) {
          this.name = name;
       }
    }
    
  • 创建主页

    现在,让我们创建一个 JSP 文件 index.jsp收集用户名和密码。将根据数据库检查此用户名和密码。
    
    <%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
       pageEncoding = "ISO-8859-1"%>
    <%@ 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>
          <title>Login</title>
       </head>
       
       <body>
          <form action = "loginaction" method = "post">
             User:<br/><input type = "text" name = "user"/><br/>
             Password:<br/><input type = "password" name = "password"/><br/>
             <input type = "submit" value = "Login"/>     
          </form>
       </body>
    </html>
    
  • 创建视图

    现在让我们创建 success.jsp 如果 action 返回 SUCCESS 将调用该文件,但如果从 action 返回 ERROR,我们将有另一个视图文件。
    
    <%@ page contentType = "text/html; charset = UTF-8" %>
    <%@ taglib prefix = "s" uri = "/struts-tags" %>
    <html>
       <head>
          <title>Successful Login</title>
       </head>
       
       <body>
          Hello World, <s:property value = "name"/>
       </body>
    </html>
    
    以下将是视图文件 error.jsp 如果从操作返回错误。
    
    <%@ page contentType = "text/html; charset = UTF-8" %>
    <%@ taglib prefix = "s" uri = "/struts-tags" %>
    <html>
       <head>
          <title>Invalid User Name or Password</title>
       </head>
       
       <body>
          Wrong user name or password provided.
       </body>
    </html>
    
  • 配置文件

    最后,让我们使用 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.devMode" value = "true" />
       <package name = "helloworld" extends = "struts-default">
       
          <action name = "loginaction" 
             class = "com.jc2182.struts2.LoginAction"
             method = "execute">
             <result name = "success">/success.jsp</result>
             <result name = "error">/error.jsp</result>
          </action>
       
       </package>
    </struts>
    
    以下是内容 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_3_0.xsd"
       id = "WebApp_ID" version = "3.0">
       
       <display-name>Struts 2</display-name>
       
       <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
       
       <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>
    </web-app>
    
    现在,右键单击项目名称并单击 Export > WAR File创建一个战争文件。然后将此 WAR 部署到 Tomcat 的 webapps 目录中。最后,启动Tomcat服务器并尝试访问URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. 这将产生以下屏幕 -
    你好世界 Struts 9
    输入错误的用户名和密码。您应该会看到下一页。
    你好世界 Struts 10
    现在输入 scott 作为用户名和 navy作为密码。您应该会看到下一页。
    你好世界 Struts 11