Struts/Spring/Hibernate框架技术

一、主流技术框架

1. Struts框架

Struts是最早的Java开源框架之一,也是现在Java Web框架的事实标准,现在的绝大多数Java Web应用程序都是基于Struts框架构建的。Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简单编码工具。Struts使开发大型Java Web项目成为可能。

2. Spring框架

Spring的出现改变了Java世界。它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在。还提供了声明事务、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成。

3. Hibernate框架

Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据库操作的方式代表了当前的趋势。

大名鼎鼎的SSH集成框架指的就是Struts+Sping+Hibernate的技术框架。使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅。这也是当前最流行的Java技术框架。

 

二、构建Struts/Sping/Hibernate框架

1. 导入SSH框架包

通过MyEclipse逐一导入SSH的相关框架包。

 

2. 编写SSH的配置文件

(1) hibernate.cfg.xml配置文件

(记得先导入数据库的驱动类)

示例:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd>

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>
<session-factory>
 <property name="connection.driver_class">
  com.microsoft.sqlserver.jdbc.SQLServerDriver
 </property>
 <property name="connection.url">
  jdbc:sqlserver://localhost:1433;Databasename=SSH_DB
 </property>
 <property name="connection.username">sa</property>
 <property name="connection.password">sa</property>
 <property name="show_sql">true</property>
 <property name="dialect">
  org.hibernate.dialect.SQLServerDialect
 </property>
 <property name="hbm2ddl.auto">update</property>
 
 <mapping resource="com/ssh/entity/User.hbm.xml"/>
</session-factory>

</hibernate-configuration>

 

(2) 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:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

 
 <!-- SessionFactory config begin -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation"
   value="classpath:hibernate.cfg.xml">
  </property>
 </bean>
 <!-- SessionFactory config end -->
 
 <!-- dao config begin -->
 <bean id="userDao" class="com.ssh.dao.impl.UserDaoImpl" >
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean> 
 <!-- dao config end -->
  
 <!-- biz config begin -->
 <bean id="userBiz" class="com.ssh.biz.impl.UserBizImpl">
  <property name="userDao" ref="userDao"></property>
 </bean> 
 <!-- biz config end -->

 <!-- action config begin -->
 <bean name="/user" class="com.ssh.struts.action.UserAction">
  <property name="userBiz" ref="userBiz"></property>
 </bean> 
 <!-- action config end -->
  
 
 <!-- transaction begin -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
 </bean>
        
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
      <tx:method name="save*" propagation="REQUIRED"/>
      <tx:method name="delete*" propagation="REQUIRED"/>
      <tx:method name="update*" propagation="REQUIRED"/>
      <tx:method name="all*" propagation="REQUIRED"/>
      <tx:method name="*" read-only="true"/>
     </tx:attributes>
    </tx:advice>
   
    <aop:config>
     <aop:pointcut id="allManagerMethod" expression="execution (* com.ssh.biz.impl.*.*(..))"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
    </aop:config>
   
    <!-- transaction end -->
   
</beans> 

 

(3) struts-config.xml配置文件

 示例:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
 <form-beans>
  <form-bean name="userForm" type="ssh.ch9.struts.form.UserForm"></form-bean>
 </form-beans>
 
  <action-mappings >
  <action
   name="userForm"
   path="/user"
   type="org.springframework.web.struts.DelegatingActionProxy"
   attribute="userForm"
   scope="request"
   input="/MyJSP/index.jsp"
   parameter="type"
   >
  <forward name="find" path="/user.do?type=find"></forward>
  <forward name="update" path="/MyJSP/updateUser.jsp"></forward>
  </action>

</action-mappings>

  <message-resources parameter="com.ssh.struts.ApplicationResources" />
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="classpath:applicationContext.xml"/>
 </plug-in>
</struts-config>

 

3 构建三层结构

构建三层结构:数据访问层、业务逻辑层和表示层。

(1)创建包

com.ssh.hibernate       (类:HibernateSessionFactory.java  加载Hibernate框架包时,系统自动创建)

com.ssh.biz                  (接口:UserBiz.java)           

com.ssh.biz.impl          (类:UserBizImpl.java)

com.ssh.dao                (接口:UserDao.java)

com.ssh.dao.impl         (类:UserDaoImpl.java) 

com.ssh.entity              (类:User.java    映射文件:User.hbm.xml)

com.ssh.struts              (ApplicationResources.properties  加载struts框架包时,系统自动创建)

com.ssh.struts.action    (类:UserAction.java)

com.ssh.struts.form      (类:UserForm.java)

com.ssh.test                 (类:UserTest.java)

 

(2) 创建包中的相关文件

1. com.ssh.biz

示例:

UserBiz.java 接口

package com.ssh.biz;

public interface UserBiz  {
         public void save(Object o);
         public void delete(Object o);
         public void update(Object o);
         public Object get(Class clz,int id);
         public List find(String sql);

}

 

2. com.ssh.biz.impl

示例:

UserBizImpl.java 类

package com.ssh.biz.impl;

import java.util.List;

import com.ssh.biz.UserBiz;
import com.ssh.dao.UserDao;

public class UserBizImpl implements UserBiz {
 
 private UserDao userDao;
 
 public void delete(Object o) {
  userDao.delete(o);
 }

 public List find(String sql) {
  return userDao.find(sql);
 }

 public Object get(Class clz, int id) {
  return userDao.get(clz, id);
 }

 public void save(Object o) {
  userDao.save(o);
 }

 public void update(Object o) {
  userDao.update(o);
 }


 public UserDao getUserDao() {
  return userDao;
 }

 public void setUserDao(UserDao userDao) {
  this.userDao = userDao;
 }

}

 

3. com.ssh.dao

 示例:

UserDao.java 接口

package com.ssh.dao;

public interface UserDao  {

       public void save(Object o);
       public void delete(Object o);
       public void update(Object o);
       public Object get(Class clz,int id);
       public List find(String sql);

}

 

4. com.ssh.dao.impl

示例:

UserDaoImpl.java 类

package com.ssh.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.ssh.dao.UserDao;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

 public void delete(Object o) {
   super.getHibernateTemplate().delete(o);
 }

 public Object get(Class clz, int id) {  
  return super.getHibernateTemplate().get(clz, id);
 }

 public void save(Object o) {
   super.getHibernateTemplate().save(o);
 }

 public List find(String sql) {
    return super.getHibernateTemplate().find(sql);
 }

 public void update(Object o) {
    super.getHibernateTemplate().update(o);
 }


}

 

5.  com.ssh.entity

 示例:

 User.java  类

 package com.ssh.entity;

 public class User {
 private int userId;
 private String userName;
 private String userPwd;
 
 public int getUserId() {
  return userId;
 }
 public void setUserId(int userId) {
  this.userId = userId;
 }
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public String getUserPwd() {
  return userPwd;
 }
 public void setUserPwd(String userPwd) {
  this.userPwd = userPwd;
 }
  
}


User.hbm.xml  映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.ssh.entity.User" table="UserInfo">
  <id name="userId">
   <column name="UID"></column>
   <generator class="increment"></generator>
  </id>

 <property name="userName">
  <column name="UNAME"></column>
 </property>
 
 <property name="userPwd">
  <column name="UPWD"></column>
 </property>

</class>

</hibernate-mapping>

 

6. com.ssh.struts.action 

示例:

UserAction.java  类
package com.ssh.struts.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.ssh.biz.UserBiz;
import com.ssh.entity.User;
import com.ssh.struts.form.UserForm;
 
private UserBiz userBiz;
 
 public ActionForward find(ActionMapping mapping,ActionForm form,
   HttpServletRequest request,HttpServletResponse response)
 {
  String sql = "from com.ssh.entity.User order by UID asc";
  List userList = userBiz.find(sql);
  request.getSession().setAttribute("userList", userList);
  return mapping.getInputForward();
 }

 

 public ActionForward get(ActionMapping mapping,ActionForm form,
   HttpServletRequest request,HttpServletResponse response)
 {
  int id = Integer.parseInt(request.getParameter("userId"));
  System.out.println(id);
  User user = (User)userBiz.get(User.class,id);
  request.getSession().setAttribute("user", user);
  return mapping.findForward("update");
 }
 
 public ActionForward save(ActionMapping mapping,ActionForm form,
   HttpServletRequest request,HttpServletResponse response)
 {
  UserForm registerForm = (UserForm)form;
  User user = new User();
  user.setUserName(registerForm.getUserName());
  user.setUserPwd(registerForm.getUserPwd());
  userBiz.save(user);
  String msg = "增加用户成功!";
  request.setAttribute("msg", msg);
  return mapping.findForward("find");
 }
 
 public ActionForward update(ActionMapping mapping,ActionForm form,
   HttpServletRequest request,HttpServletResponse response)
 {
  UserForm userForm = (UserForm)form;
  int id = Integer.parseInt(request.getParameter("userId"));
  String newName = userForm.getUserName();
  String newPwd = userForm.getUserPwd();
  User user = (User)userBiz.get(User.class, id);
  user.setUserName(newName);
  user.setUserPwd(newPwd);
  userBiz.update(user);
  String msg = "修改用户成功!";
  request.setAttribute("msg", msg);
  return mapping.findForward("find");
 }
 
 public ActionForward delete(ActionMapping mapping,ActionForm form,
   HttpServletRequest request,HttpServletResponse response)
 {
  int id = Integer.parseInt(request.getParameter("userId"));
  User user = (User)userBiz.get(User.class, id);
  userBiz.delete(user);
  String msg = "删除用户成功!";
  request.setAttribute("msg", msg);
  return mapping.findForward("find");
 }
 
 public UserBiz getUserBiz() {
  return userBiz;
 }

 public void setUserBiz(UserBiz userBiz) {
  this.userBiz = userBiz;
 }
 

 

7. com.ssh.struts.form

示例:

UserForm.java  类

package com.ssh.struts.form;

import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm {

 private String userName;
 private String userPwd;
 
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public String getUserPwd() {
  return userPwd;
 }
 public void setUserPwd(String userPwd) {
  this.userPwd = userPwd;
 }
  
}

8.  com.ssh.test 

示例:

UserTest.java 类

package com.ssh.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ssh.biz.UserBiz;
import com.ssh.entity.User;


public class UserTest {
 @Test
 public void getUser()
 {
  ApplicationContext a = new ClassPathXmlApplicationContext("applicationContext.xml");
  UserBiz userBiz = (UserBiz)a.getBean("userBiz");
  User user = (User)userBiz.get(User.class, 1);
  if(user!=null)
  {
   System.out.println("用户名: " + user.getUserName());
  }
 }

 
 public void saveUser()
 {
  ApplicationContext a = new ClassPathXmlApplicationContext("applicationContext.xml");
  UserBiz userBiz = (UserBiz)a.getBean("userBiz");
  User user = new User();
  user.setUserName("Peter");
  user.setUserPwd("123");
  userBiz.save(user);
  System.out.println("增加用户成功");
 }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我听到您的要求了。您的第一个问题是要我描述关于StrutsSpring Boot、Hibernate、PostgreSQL、Redis和Tomcat技术框架选型的内容,需要写15000字。 首先,让我们先了解一下这些技术框架的基本概念。 - Struts是一个基于MVC模式的Java Web应用程序框架,它使用了丰富的标签库和AJAX技术实现动态Web页面的构建。 - Spring Boot是一个基于Spring框架的开源Java应用程序框架,它提供了一些自带的默认设置,使得Java应用程序更易于构建和部署。 - Hibernate是一个流行的开源Java持久性框架,可以直接将Java对象映射到数据库表中,从而简化了开发人员的工作。 - PostgreSQL是一个开源的关系型数据库管理系统,在性能和可扩展性方面颇有优势。 - Redis是一个基于内存的数据结构存储系统,可以作为高效的缓存解决方案。 - Tomcat是一个流行的开源Java Web服务器软件,支持JSP和Servlet技术。 在选择这些技术框架时,需要考虑以下几个方面的因素: 1. 功能和性能要求:根据您的应用程序功能需求及性能要求,选择适合的技术框架。 2. 开发人员技能:根据您的开发团队的技能和经验,选择易于学习和掌握的技术框架。 3. 维护和支持:选择一个活跃的社区和可靠的技术供应商。 4. 安全性:选择拥有安全性建议和认证的技术框架。 5. 成本:开发和维护的成本也是选择技术框架的因素之一。 在这些技术框架中,Struts已经很长时间没有更新了,在性能、安全性和响应时间方面逊于Spring Boot。 因此,建议使用Spring Boot作为Web应用程序框架,并与Hibernate进行数据持久化。同时,选择PostgreSQL作为后端数据库,因为它具有性能和可扩展性优势。 对于系统中需要进行缓存的数据,Redis是一个高效的解决方案。最后,Tomcat作为Java Web服务器Runtim就可以满足要求。 在整个过程中,保证代码的质量和可维护性是非常重要的。使用这些现代化的技术框架,我们可以轻松构建高质量、高性能的应用程序。 以上是关于StrutsSpring Boot、Hibernate、PostgreSQL、Redis和Tomcat技术选型的详细介绍。希望对您有所帮助。如果您还有任何疑问,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值