SSH简单项目
这是我学习SSH整合时的一个测试项目,代码比较简单
整个项目实现从数据库中取数据,在页面上显示。项目的结构如下:
(1)数据库设计
数据库使用的是student数据库中的一个数据库表grade,表的内容如下:
(2)建立一个web项目—>导包。
(3)新建配置文件,新建每一层的类。代码如下:
配置文件: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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="dao.impl,service.impl,controller"></context:component-scan>
<!-- 连接数据库的配置 -->
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/student"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
<property name="maxActive" value="100"></property>
<property name="maxWait" value="10000"></property>
</bean>
<!-- 连接数据库的配置 -->
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>entity/Grade.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置sessionFactory --> <!-- 配置GradeDaoImpl的bean -->
<!-- <bean id="gradeDao" class="dao.impl.GradeDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property> 配置dao.Impl的依赖,它依赖于sessionFactory,配置注解后就不需要配置这个了
</bean>
<bean id="gradeService" class="service.impl.GradeServiceImpl">
<property name="gradeDao" ref="gradeDao"></property>
</bean>
配置GradeDaoImpl的bean 定义事务管理器
<bean name="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
定义事务管理器 配置事务增强
<tx:advice id="txAdvice" transaction-manager="txManager">
声明事务的规则——具体看我的另一篇博客SSH的整合
<tx:attributes>
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
<tx:method name="query*" read-only="true" propagation="SUPPORTS"/>
<tx:method name="get*" read-only="true" propagation="SUPPORTS"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
配置事务增强 定义切面
<aop:config>
定义切入点
<aop:pointcut expression="execution(* service.impl.*.*(..))" id="pointCut"/> <!-- execution(* 包名.类名.方法名(..)) -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/> </aop:config> --> </beans>
entity层:Grade.java
package entity; public class Grade { private int gradeId;
private String gradeName;
public int getGradeId() {
return gradeId;
}
public void setGradeId(int gradeId) {
this.gradeId = gradeId;
}
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
}
entity层:Grade.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-12-18 15:42:30 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="entity.Grade" table="GRADE">
<id name="gradeId" type="int">
<column name="GRADEID" />
<generator class="assigned" />
</id>
<property name="gradeName" type="java.lang.String">
<column name="GRADENAME" />
</property>
</class>
</hibernate-mapping>
dao层:GradeDao.java
package dao; import java.util.List; import entity.Grade; public interface GradeDao { /**
* 查询所有年级的方法
* @return
*/
List<Grade> query_Grade(); }
dao.Impl:GradeDaoImpl.java
package dao.impl; import java.util.List; import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import dao.GradeDao;
import entity.Grade; @Repository
public class GradeDaoImpl implements GradeDao { @Autowired
private SessionFactory sessionFactory; public List<Grade> query_Grade() { return sessionFactory.openSession().createQuery("from Grade").list();
} }
service:GradeService.java
package service; import java.util.List; import entity.Grade; public interface GradeService { /**
* 查询所有年级
* @return
*/
List<Grade> All_Grade();
}
service.impl:GradeServiceImpl.java
package service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import service.GradeService;
import dao.GradeDao;
import entity.Grade; @Service
public class GradeServiceImpl implements GradeService { @Autowired
private GradeDao gradeDao; public List<Grade> All_Grade() { return gradeDao.query_Grade();
} }
test:GradeTest.java(这是一个中间的测试类,可以不要)
package test; import java.util.List; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import service.GradeService;
import dao.GradeDao;
import entity.Grade; public class GradeTest { public static void main(String[] args) {
System.out.println(111);
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
GradeService gradeDao = (GradeService) act.getBean("gradeService");
List<Grade> list = gradeDao.All_Grade();
System.out.println(list.size());
}
}
controller层:MyAction.java
package controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import service.GradeService;
import entity.Grade; @Controller
public class MyAction extends ActionSupport { @Autowired //自动装配,配置这个注解后,就不用在application设置依赖,spring会自动帮你配置依赖关系,但需要在web.xml中配置,具体看web.xml
private GradeService gradeService;
private List<Grade> list; public GradeService getGradeService() {
return gradeService;
} public void setGradeService(GradeService gradeService) {
this.gradeService = gradeService;
} public String show(){
System.out.println(111);
list=gradeService.All_Grade();
for (Grade grade : list) {
System.out.println(grade.getGradeName());
}
return "success";
} public List<Grade> getList() {
return list;
} public void setList(List<Grade> list) {
this.list = list;
} }
界面显示:NewFile.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript"></script>
</head>
<body>
<c:forEach items="${list}" var="l">
<p>${l.gradeId}  ${l.gradeName}</p>
</c:forEach>
</body>
</html>
struts配置文件:struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="show" class="controller.MyAction" method="show">
<result name="success">/NewFile.jsp</result>
</action>
</package>
</struts>
web.xml配置文件
<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>SSH_Framework</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <listener> <!-- 配置监听器 -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <context-param> <!-- 配置一组键值对,与<listener>对应,当服务器启动时,服务器会读取web.xml配置,当读到<listener></listener>和<context-param></context-param>这两个节点的时候,容器会将这两个节点set到ServletContext(上下文对象)中,这样我们在程序中就能通过这个上下文对象去取得我们这个配置值。 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <filter> <!-- 配置一个过滤器 -->
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- struts给出的一个过滤器,或自动把匹配到的地址信息交由struts的配置文件处理 -->
</filter>
<filter-mapping> <!-- 配置过滤映射,当页面的访问地址为.action结尾时,调用交由filter-name为struts的过滤器处理 -->
<filter-name>struts</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
SSH简单项目的更多相关文章
- eclipse建立springMVC 简单项目
http://jinnianshilongnian.iteye.com/blog/1594806 如何通过eclipse建立springMVC的简单项目,现在简单介绍一下. 工具/原料 eclip ...
- Windows 8.1 应用再出发 (WinJS) - 创建一个简单项目
前面几篇我们介绍了如何利用 C# + XAML 完成Windows Store App 功能的实现,接下来的几篇我们来看看如何利用 Html + WinJS 来完成这些功能. 本篇我们使用WinJS ...
- SSH框架项目开发命名规范
SSH 框架项目开发命名规范 一.各层包及类命名规范 总体原则:包名所有字母小写,类名采用 "驼峰标识",具体如下: 1. Action 类 包命名规范:co ...
- asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...
- IntelliJ IDEA 创建 Maven简单项目
创建简单Maven项目 使用IDEA提供的Maven工具,根据artifact创建简单Maven项目.根据下图操作,创建Maven项目. 使用IDEA提供的Maven工具创建的Maven简单项目目录结 ...
- springboot学习之构建简单项目搭建
概述 相信对于Java开发者而言,spring和springMvc两个框架一定不陌生,这两个框架需要我们手动配置的地方非常多,各种的xml文件,properties文件,构建一个项目还是挺复杂的,在这 ...
- 在eclipse 导入简单的Android studio 简单项目
前言: 现在Android studio版本已经去到2.0(我暂时用着开发者版本)了,但是还是和以前的版本一样卡. (因为我用了很多第三方的UI控件,导致在Android studio build一个 ...
- SSH简单Demo
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3 ...
- scrapy爬虫简单项目入门练习
[写在开头] scrapy环境配置配置好了之后,开始着手简单项目入门练习.关于环境配置见上一篇博客https://www.cnblogs.com/ljxh/p/11235079.html. [正文部分 ...
随机推荐
- Robotium 框架学习之Class By
Class By定义了页面元素的定位和支持哪些页面元素(至少我是这么理解的),使用及其简单:Used in conjunction with the web methods. Examples are ...
- 用Python写一款属于自己的 简易zip压缩软件 附完成图(适合初学者)
一.软件描述 用Python tkinter模块写一款属于自己的压缩软件.zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile来操作zip文件,具有功能:zip压缩功能,zip ...
- Android Imageview 图片居左居右,自定义圆角
android:scaleType="fitStart" 图片靠左不变形显示, android:scaleType=”fitEnd” 图片靠右显示,不变形. 半透明andr ...
- Powershell 远程连接ARM Windows Server VM 并关闭 Firewall
准备环境:Azure ARM Windows Server 2008 R2 机器 1.登陆机器查看防火墙,是开着的 2.查看机器的监听端口,发现没有Powershell远程管理对应的端口5985或59 ...
- ExpandableListView使用
相关博客 ExpandableListView使用 博客内容记录 场景 有时候,使用ListView并不能满足应用程序所需要的功能.有些应用程序需要多组ListView,这时候我们就要使用一种新的控件 ...
- 利用vertical-align:middle垂直居中
以前总是以为vertical-align与text-align是同样的道理,一个是垂直居中,一个是水平居中,结果在这里一点效果也没有.事实上vertical-align与text-align完全不一样 ...
- css随笔属性
anchor伪类,用于阅读文章.a:link(没有接触过的链接),用于链接常规状态 (末访问的链接)a:hover(鼠标放在链接上的状态) 用于产生视觉效果(已访问的链接)a:visited(访问过的 ...
- 一个简单的 js 时间对象创建
JS中获取时间很常见,凑凑热闹,也获取一个时间对象试试 首先,先了解js的获取时间函数如下: var myDate = new Date(); //创建一个时间对象 myDate.g ...
- 一个PHP高性能、多并发、restful的工具库(基于multi_curl)
This is high performance curl wrapper written in pure PHP. It's compatible with PHP 5.4+ and HHVM. N ...
- Vue单页面骨架屏实践
github 地址: VV-UI/VV-UI 演示地址: vv-ui 文档地址:skeleton 关于骨架屏介绍 骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示.这样给 ...