Struts 2 - Acceso a la base de datos

Este capítulo le enseñará cómo acceder a una base de datos usando Struts 2 en sencillos pasos. Struts es un marco MVC y no un marco de base de datos, pero proporciona un excelente soporte para la integración JPA / Hibernate. Veremos la integración de hibernación en un capítulo posterior, pero en este capítulo usaremos JDBC antiguo para acceder a la base de datos.

El primer paso de este capítulo es configurar y preparar nuestra base de datos. Estoy usando MySQL como mi base de datos para este ejemplo. Tengo MySQL instalado en mi máquina y he creado una nueva base de datos llamada "struts_tutorial". He creado una tabla llamadaloginy lo pobló con algunos valores. A continuación se muestra el script que utilicé para crear y completar la tabla.

Mi base de datos MYSQL tiene el nombre de usuario "root" y la contraseña "root123" predeterminados

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');

El siguiente paso es descargar el archivo jar de MySQL Connector y colocar este archivo en la carpeta WEB-INF \ lib de su proyecto. Después de haber hecho esto, ahora estamos listos para crear la clase de acción.

Crear acción

La clase de acción tiene las propiedades correspondientes a las columnas de la tabla de la base de datos. Tenemosuser, password y namecomo atributos de cadena. En el método de acción, usamos los parámetros de usuario y contraseña para verificar si el usuario existe, si es así, mostramos el nombre de usuario en la siguiente pantalla.

Si el usuario ha ingresado información incorrecta, lo enviamos nuevamente a la pantalla de inicio de sesión.

A continuación se muestra el contenido de LoginAction.java archivo -

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;
   }
}

Crear página principal

Ahora, creemos un archivo JSP index.jsppara recopilar el nombre de usuario y la contraseña. Este nombre de usuario y contraseña se compararán con la base de datos.

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

Crear vistas

Ahora vamos a crear success.jsp archivo que se invocará en caso de que la acción devuelva SUCCESS, pero tendremos otro archivo de vista en caso de que se devuelva un ERROR de la acción.

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

Lo siguiente será el archivo de vista error.jsp en caso de que se devuelva un ERROR de la acción.

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

Archivos de configuración

Finalmente, juntemos todo usando el archivo de configuración struts.xml de la siguiente manera:

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

A continuación se muestra el contenido de web.xml archivo -

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

Ahora, haga clic derecho en el nombre del proyecto y haga clic en Export > WAR Filepara crear un archivo War. Luego implemente este WAR en el directorio de aplicaciones web de Tomcat. Finalmente, inicie el servidor Tomcat e intente acceder a la URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Esto producirá la siguiente pantalla:

Ingrese un nombre de usuario y contraseña incorrectos. Debería ver la página siguiente.

Ahora entra scott como nombre de usuario y navycomo contraseña. Debería ver la página siguiente.