SSH框架搭建 笔记 (含spring注解驱动)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:   分类: web 开发2014-04-27 12:33 354人阅读 评论(0) 收藏 举报 框架springinterface注解 好久没有搭建框架了,今天整理下以前的知识,整合下SSH,没想到手生了,一时半会各种异常出来,经过一番挣扎后,终于搞出来了雏形, 下面是我做整...

 

分类: web 开发

好久没有搭建框架了,今天整理下以前的知识,整合下SSH,没想到手生了,一时半会各种异常出来,经过一番挣扎后,终于搞出来了雏形,

下面是我做整合框架的笔记,如果大家开发过程中又遇到的情况,可以参考下

 

首先是包的结构,(命名不算正规哈~,临时写的仓促了点)

 

框架是基于JAR包的基础上构建的,所以必须必备的jar包必须先下好,

如图:

 

没有的可以在本文源代码里下:

 

 

搭建框架: 

修改web.xml, 加入 struts配置

 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

index.jsp

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

 

 

创建struts .xml

 

 

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

        

            index.jsp

            login.jsp

            login.jsp

        

    

 

 接下来我们创建一个 测试用的ACTION类,loginAction

 

package test.action;

 

import com.opensymphony.xwork2.ActionSupport;

 public class LoginAction extends ActionSupport {

public String username;

public String password;

public String execute(){

if(!username.equals("admin")){

super.addFieldError("username", "用户名错误!");

return ERROR;

}

if(!password.equals("001")){

super.addFieldError("password", "密码错误!");

return ERROR;

}

return SUCCESS;

}

public void validate(){

if(username==null||username.length()==0){

super.addActionError("用户名不能为空");

}

if(password==null||password.length()==0){

super.addActionError("密码不能为空");

}

}

}

 

 

为了方便我们调试strut是否有效,我们创建一个login.jsp  用于测试

 

  

    

    

    

        

  

  

   

       

       

       

   

   

  

 

 

修改下index.jsp 页面 登陆成功则友好提示一下

 

 

  

    ">

    

    

    

  

  

  

    login success. 

  

 

使用tomcat加载项目,如果启动时候不爆出异常,说明strust 基本配置完成,我们进入页面

 

 

如果登陆成功则转到

Index.jsp

 

 

 

 

接下配置spring 和hibernate  

 

重新回归到  web.xml

 

 

我们在其中添加,spring的相关配置

 

contextConfigLocation

            classpath:spring/applicationContext*.xml

        

     

         org.springframework.web.context.ContextLoaderListener

     

 

 

 

创建applicationContext.xml 文件 我们在此使用注解驱动(其实说真的,spring到后面不用注解去写,也就失去它本身的意义,精髓就在于注解的简洁和易用)

 

xmlns:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

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.5.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 

 

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

classpath:spring/hibernate.cfg.xml

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

 

 

 

 

创建hibernate.cfg.xml  (用户名密码,可以自己修改一下)

 

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

    

        com.mysql.jdbc.Driver

        jdbc:mysql://localhost/test?characterEncoding=utf-8

        com.mysql.jdbc.Driver

        root

        123456

        org.hibernate.dialect.MySQLDialect

        true

        

    

 

 

创建相关DTO类,以及hbm.xml 配置文件

 

TUser.java

package test.hibernate;

 public class TUser implements java.io.Serializable {

 private int userid ;

 

   

private String username;

   private String allname;

    private String address;

 

    public String getUsername() {

        return this.username;

    }

     public void setUsername(String username) {

       this.username = username;

   }

    public String getAllname() {

        return this.allname;

    }

     public void setAllname(String allname) {

       this.allname = allname;

    }

     public String getAddress() {

        return this.address;

    }

    public void setAddress(String address) {

        this.address = address;

    }

    public int getUserid() {

return userid;

}

public void setUserid(int userid) {

this.userid = userid;

}

 }

 

TUser.hbm.xml

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

 

由于测试关系,我们在这里就省略了DAO层,直接写service层类去测试 ,采用注解标记

 

创建相关service 接口以及实现类

IUserService.java

package test.service.imp;

import java.util.List;

import test.hibernate.TUser;

 

public interface IUserService {

public void saveTuser(TUser user);

public List getUserById( String id);

 }

 

 

UserServiceImpl.java

package test.service.impl;

 

import java.sql.SQLException;

import java.util.List;

 

import javax.annotation.Resource;

 

import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.orm.hibernate3.HibernateCallback;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

 

import test.hibernate.TUser;

import test.service.imp.IUserService;

@Service("userServiceImpl")

public class UserServiceImpl implements IUserService {

@Resource(name = "hibernateTemplate")

private HibernateTemplate hibernateTemplate;

public void saveTuser(TUser user) {

hibernateTemplate.save(user);

hibernateTemplate.flush();

}

@SuppressWarnings("unchecked")

    @Transactional(propagation=Propagation.REQUIRED) 

public List getUserById(String id) {

final String ids = id;

//List list = hibernateTemplate.find("from TUser where userid = ?");

List list =hibernateTemplate.executeFind(new HibernateCallback() {

public List doInHibernate(Session session) throws HibernateException,

SQLException {

  Query query =  (Query) session.createQuery("from TUser where userid = ? ");

  query.setString(0, ids);

return  query.list() ;

}

});

return list;

}

 

}

 

 

 

 

接下来我们写一个main 主类来测试我们的spring 和hibernate

SpringTest.java

package test.spring;

  import java.util.List;

 

import javax.annotation.Resource;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.stereotype.Component;

 

import test.hibernate.TUser;

import test.service.imp.IUserService;

 

@Component("springTest")

 public class SpringTest {

@Resource(name = "userServiceImpl")

private IUserService userService ;

public static void main( String[] args ) {

        //加载spring配置文件,初始化IoC容器

         ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

        //从容器 接管Bean

//        TUser user = (TUser) ac.getBean("TUser");

       //输出欢迎信息

//        System.out.println( "Hello:" + user.getUsername() + ";u is in " + user.getAddress() + " ; and b is  " + user.getAllname() );

        

//        SessionFactory ss = (SessionFactory) ac.getBean("sessionFactory");

//        HibernateTemplate ht = new HibernateTemplate(ss);

//        HibernateTemplate ht = (HibernateTemplate) ac.getBean("hibernateTemplate");

//        

//        List list =    ht.find("from TUser ");

        

         SpringTest st =(SpringTest) ac.getBean("springTest");

//        TUser tu = new TUser();

//        tu.setAddress("河西");

//        tu.setAllname("河西走廊");

//        tu.setUserid(45);

//        tu.setUsername("故乡");

//        

//        st.userService.saveTuser(tu);

        List list = st.userService.getUserById("4");//ID在数据库内找到相应的

        for(TUser xx : list){

 

        System.out.println(xx.getAddress()+"||"+xx.getAllname()+"||"+xx.getUsername());

        }

   }

 }

 

如果出现下面提示,说明你的配置已经完成

 

 

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
2月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
232 2
|
2月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
462 128
|
2月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
383 0
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
Java 测试技术 API
将 Spring 的 @Embedded 和 @Embeddable 注解与 JPA 结合使用的指南
Spring的@Embedded和@Embeddable注解简化了JPA中复杂对象的管理,允许将对象直接嵌入实体,减少冗余表与连接操作,提升数据库设计效率。本文详解其用法、优势及适用场景。
278 126
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
113 8
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
320 2
|
2月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
276 12
|
2月前
|
Java 测试技术 数据库
使用Spring的@Retryable注解进行自动重试
在现代软件开发中,容错性和弹性至关重要。Spring框架提供的`@Retryable`注解为处理瞬时故障提供了一种声明式、可配置的重试机制,使开发者能够以简洁的方式增强应用的自我恢复能力。本文深入解析了`@Retryable`的使用方法及其参数配置,并结合`@Recover`实现失败回退策略,帮助构建更健壮、可靠的应用程序。
278 1
使用Spring的@Retryable注解进行自动重试