Hibernate+Spring+Struts扩展Struts

本文将为大家介绍如何在一个Web应用中使用Hibernate、Spring和Struts三个框架,并扩展Struts框架,以实现一个完整的MVC架构。下面我们将一步步讲解如何搭建这个Web应用。

环境准备

在开始之前,请确保已经安装了以下环境:

  • JDK 1.8
  • Tomcat 8.5
  • MySQL 5.x

创建工程

  1. 在Eclipse中创建一个动态Web工程,命名为"spring-struts-hibernate"。
  2. 将hibernate-validator、mysql-connector-java、spring和struts2的jar包放到工程的WEB-INF/lib目录下。
  3. 在WEB-INF目录下创建一个classes目录,以便于存放Java类。
  4. 在WEB-INF目录下创建一个lib目录,以便于存放项目依赖的jar包。
  5. 创建以下文件:
-src
--main
---java
----com.example.dao
-----UserDao.java
----com.example.entity
-----User.java
---resources
----spring
-----applicationContext.xml
---webapp
----WEB-INF
-----web.xml    

创建数据表

在MySQL中创建以下表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

编写Java类

  1. 创建用户实体类User.java
package com.example.entity;

public class User {
    private int id;
    private String username;
    private String password;
    private int age;

    //getter和setter方法...
}
  1. 创建用户DAO类UserDao.java,用于操作用户实体类
package com.example.dao;

import java.util.List;
import com.example.entity.User;

public interface UserDao {
    public void save(User user);
    public void update(User user);
    public void delete(int id);
    public User findById(int id);
    public List<User> findAll();
}
  1. 在DAO类中创建Hibernate实现
package com.example.dao.impl;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.example.dao.UserDao;
import com.example.entity.User;

@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private SessionFactory sessionFactory;

    private Session getSession(){
        return sessionFactory.getCurrentSession();
    }

    public void save(User user) {
        this.getSession().save(user);
    }

    public void update(User user) {
        this.getSession().update(user);
    }

    public void delete(int id) {
        User user = findById(id);
        if(user != null){
            this.getSession().delete(user);
        }
    }

    public User findById(int id) {
        return (User) this.getSession().get(User.class, id);
    }

    @SuppressWarnings("unchecked")
    public List<User> findAll() {
        String hql = "from User";
        return this.getSession().createQuery(hql).list();
    }
}

配置Spring

  1. 在classpath中创建Spring配置文件applicationContext.xml,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/demo"></property>
        <property name="username" value="root"></property>
        <property name="password" value=""></property>
    </bean>

    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mappingResources">
            <list>
                <value>com/example/entity/User.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 配置事务注解支持 -->
    <context:annotation-config></context:annotation-config>
    <tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven>

    <!-- 配置DAO层 -->
    <bean id="userDao" class="com.example.dao.impl.UserDaoImpl"></bean>
</beans>
  1. 在Web.xml配置文件中添加以下内容,以便于加载Spring:
<!-- spring配置 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/spring/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

配置Struts

  1. 在classpath中创建Struts配置文件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.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.excludePattern" value="/favicon.ico" />
    <package name="default" extends="struts-default">
        <action name="user" class="com.example.action.UserAction">
            <result name="list">/WEB-INF/jsp/user/list.jsp</result>
            <result name="input">/WEB-INF/jsp/user/input.jsp</result>
            <result name="add">/WEB-INF/jsp/user/list.jsp</result>
            <result name="edit">/WEB-INF/jsp/user/input.jsp</result>
            <result name="delete">/WEB-INF/jsp/user/list.jsp</result>
        </action>
    </package>
</struts>
  1. 创建用户Action类UserAction.java,用于处理用户操作
package com.example.action;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.dao.UserDao;
import com.example.entity.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    @Autowired
    private UserDao userDao;

    private List<User> list;
    private User user;
    private int id;

    //getter和setter方法...

    public String list(){
        list = userDao.findAll();
        return "list";
    }

    public String add(){
        userDao.save(user);
        return "add";
    }

    public String edit(){
        user = userDao.findById(id);
        return "edit";
    }

    public String update(){
        userDao.update(user);
        return "add";
    }

    public String delete(){
        userDao.delete(id);
        return "delete";
    }
}

编写JSP页面

  1. 在Webapp目录下创建以下文件:
-webapp
--WEB-INF
---jsp
----user
-----list.jsp
-----input.jsp
  1. 编写用户列表页list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户管理</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>用户名</th>
                <th>密码</th>
                <th>年龄</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <s:forEach var="user" items="list">
                <tr>
                    <td><s:property value="id"/></td>
                    <td><s:property value="username"/></td>
                    <td><s:property value="password"/></td>
                    <td><s:property value="age"/></td>
                    <td>
                        <s:a href="user_edit.action?id=${user.id}">编辑</s:a> 
                        <s:a href="user_delete.action?id=${user.id}">删除</s:a>
                    </td>
                </tr>
            </s:forEach>
        </tbody>
    </table>
    <p><a href="user_input.action">添加用户</a></p>
</body>
</html>
  1. 编写用户操作页面input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户信息</title>
</head>
<body>
    <s:form action="user_${action}.action">
        <s:hidden name="user.id" value="%{id}" />
        <s:textfield name="user.username" label="用户名" value="%{user.username}" />
        <s:textfield name="user.password" label="密码" value="%{user.password}" />
        <s:textfield name="user.age" label="年龄" value="%{user.age}" />
        <s:submit value="提交" />
    </s:form>
</body>
</html>

运行

  1. 启动Tomcat服务。
  2. 在浏览器中输入"http://localhost:8080/spring-struts-hibernate/user_list.action",即可查看用户列表页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Hibernate+Spring+Struts扩展Struts - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java 按照字节来截取字符串的代码(不会出现半个汉字)

    下面是Java按照字节来截取字符串的代码攻略: 1. 背景介绍 在Java中,字符串常常需要截取一部分进行处理,而其中有一种情况是按照字节来截取字符串。这主要是因为在多字节字符集中,一个汉字可能由2个以上的字节表示,如果对一个汉字进行简单的截取,可能会导致截取到半个汉字,出现乱码等问题。因此,我们需要了解如何按照字节来截取字符串。 2. 方案分析 实现按照字…

    Java 2023年5月27日
    00
  • Java模拟实现HTTP服务器项目实战

    Java模拟实现HTTP服务器项目实战攻略 简介 本攻略旨在帮助Java初学者或者对于Web开发有基础认识的人,利用Java模拟实现一个HTTP服务器。本攻略将涵盖以下内容:- HTTP协议简介- 建立Java Socket Server服务端- 解析HTTP请求报文- 构建HTTP响应报文 HTTP协议简介 HTTP(Hyper Text Transfer…

    Java 2023年5月19日
    00
  • Java线程中sleep和wait的区别详细介绍

    下面详细讲解Java线程中sleep和wait的区别。 sleep和wait的区别 等待方式不同 sleep()方法是线程的静态方法,通过该方法可以使当前线程暂停指定的时间,但不会释放已经持有的锁。wait()方法是Object类中的方法,通过该方法可以使线程等待其它线程通知其被唤醒,同时会释放当前持有的锁。 调用位置不同 sleep()方法可以在任何位置调…

    Java 2023年5月19日
    00
  • Java指令重排序在多线程环境下的处理方法

    Java指令重排序在多线程环境下的处理方法是非常重要的,因为指令重排序可能导致程序出现难以预测的结果,尤其是在多线程环境下。下面,我将详细讲解Java指令重排序在多线程环境下的处理方法,包括原理、处理方法和示例。 原理 Java指令重排序是指JVM在执行指令时,为了优化程序执行效率,可能会调整指令的执行顺序。这种优化不会影响单线程程序的执行,但是在多线程环境…

    Java 2023年5月26日
    00
  • Java前后端分离的在线点餐系统实现详解

    让我来为您详细讲解“Java前后端分离的在线点餐系统实现详解”的完整攻略。 一、实现方案 该在线点餐系统基于前后端分离架构实现,前端使用Vue.js框架,后端使用Spring Boot框架进行开发。 前端主要包含登录注册、菜单展示、下单、支付等功能,使用Vue.js作为开发框架,采用Vue Router进行页面路由控制,使用Vuex进行状态管理。 后端主要包…

    Java 2023年5月24日
    00
  • java web请求和响应中出现中文乱码问题的解析

    当Java Web应用程序处理中文字符时,有可能会出现中文乱码的问题。这通常是由于应用程序中的默认字符编码与请求参数实际所用的字符集不一致导致的。为了解决这个问题,我们需要在以下三个阶段分别设置字符编码格式: 1.浏览器端设置编码格式2.服务器端设置编码格式3.在网页动态生成内容时设置编码格式 1. 浏览器端设置编码格式 在HTML中,浏览器会默认使用UTF…

    Java 2023年5月20日
    00
  • 详解Spring mvc的web.xml配置说明

    在Spring MVC中,web.xml文件是配置Spring MVC的重要文件之一。本文将详细讲解web.xml文件的配置说明,并提供两个示例说明。 web.xml配置说明 1. DispatcherServlet 在web.xml文件中,我们需要配置DispatcherServlet来处理Web请求和响应。下面是一个示例: <servlet>…

    Java 2023年5月18日
    00
  • Java8新特性之Base64详解_动力节点Java学院整理

    Java8新特性之Base64详解 介绍 Base64是用来将二进制数据编码为可打印ASCII字符的一种方法。Java8在java.util下新增了Base64类,提供了Base64编解码的实现。 Base64的编码与解码 Base64可以将任意二进制数据编码为ASCII字符,编码后的长度会比原始数据大1/3。编码方式如下: 将要编码的数据划分成每6个比特为…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部