Struts 2 - Truy cập cơ sở dữ liệu

Chương này sẽ hướng dẫn bạn cách truy cập cơ sở dữ liệu bằng Struts 2 trong các bước đơn giản. Struts là một khuôn khổ MVC và không phải là một khuôn khổ cơ sở dữ liệu nhưng nó cung cấp hỗ trợ tuyệt vời cho việc tích hợp JPA / Hibernate. Chúng ta sẽ xem xét tích hợp ngủ đông trong chương sau, nhưng trong chương này chúng ta sẽ sử dụng JDBC cũ để truy cập cơ sở dữ liệu.

Bước đầu tiên trong chương này là thiết lập và xây dựng cơ sở dữ liệu của chúng tôi. Tôi đang sử dụng MySQL làm cơ sở dữ liệu của mình cho ví dụ này. Tôi đã cài đặt MySQL trên máy của mình và tôi đã tạo một cơ sở dữ liệu mới có tên "struts_tutorial". Tôi đã tạo một bảng có tênloginvà điền vào nó một số giá trị. Dưới đây là tập lệnh tôi đã sử dụng để tạo và điền bảng.

Cơ sở dữ liệu MYSQL của tôi có tên người dùng mặc định "root" và mật khẩu "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');

Bước tiếp theo là tải xuống tệp jar MySQL Connector và đặt tệp này vào thư mục WEB-INF \ lib của dự án của bạn. Sau khi hoàn thành việc này, bây giờ chúng ta đã sẵn sàng để tạo lớp hành động.

Tạo hành động

Lớp hành động có các thuộc tính tương ứng với các cột trong bảng cơ sở dữ liệu. Chúng ta cóuser, passwordnamedưới dạng thuộc tính Chuỗi. Trong phương thức hành động, chúng tôi sử dụng các tham số người dùng và mật khẩu để kiểm tra xem người dùng có tồn tại hay không, nếu có, chúng tôi hiển thị tên người dùng trong màn hình tiếp theo.

Nếu người dùng nhập sai thông tin, chúng tôi sẽ gửi lại họ đến màn hình đăng nhập.

Sau đây là nội dung của LoginAction.java tập tin -

package com.tutorialspoint.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;
   }
}

Tạo trang chính

Bây giờ, chúng ta hãy tạo một tệp JSP index.jspđể thu thập tên người dùng và mật khẩu. Tên người dùng và mật khẩu này sẽ được kiểm tra dựa trên cơ sở dữ liệu.

<%@ 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>

Tạo chế độ xem

Bây giờ hãy để chúng tôi tạo success.jsp tệp sẽ được gọi trong trường hợp hành động trả về SUCCESS, nhưng chúng tôi sẽ có một tệp xem khác trong trường hợp LỖI được trả về từ hành động.

<%@ 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>

Sau đây sẽ là tệp xem error.jsp trong trường hợp có LỖI được trả về từ hành động.

<%@ 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>

Tệp cấu hình

Cuối cùng, chúng ta hãy tập hợp mọi thứ lại với nhau bằng cách sử dụng tệp cấu hình struts.xml như sau:

<?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.tutorialspoint.struts2.LoginAction"
         method = "execute">
         <result name = "success">/success.jsp</result>
         <result name = "error">/error.jsp</result>
      </action>
   
   </package>
</struts>

Sau đây là nội dung của web.xml tập tin -

<?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>

Bây giờ, nhấp chuột phải vào tên dự án và nhấp vào Export > WAR Fileđể tạo tệp Chiến tranh. Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat. Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Điều này sẽ tạo ra màn hình sau:

Nhập tên người dùng và mật khẩu sai. Bạn sẽ thấy trang tiếp theo.

Bây giờ nhập scott như tên người dùng và navylàm mật khẩu. Bạn sẽ thấy trang tiếp theo.