SSH框架用法,及作用(在一位菜鸟使用半年之后归纳的总结)
SSH框架从接触以来改变了我对代码的编写方式,从最初开始学习到勉强掌握可以说得到不少心得,以下内容出自java初学者对SSH的理解,如有不对的地方还请谅解,希望可以提出来与我交流,谢谢!
SSH顾名思义,struts2,spring,hibernate三大框架组成的从服务端接收请求到数据库调用并返回的一种流程(个人观点,词汇也并不准确)
那么如何去使用,又有那些有点缺点呢?
在使用这个框架之前我一直都是使用servlet ,那么servlet是什么呢?(下面是我从百度上拷贝过来的servlet生命周期解释)
- 客户端请求该 Servlet;
- 加载 Servlet 类到内存;
- 实例化并调用init()方法初始化该 Servlet;
- service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
- 加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet。
package com.dazhi.core; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired; import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List; public abstract class AbstractBaseDao<T> implements BaseDao<T> { Class<T> tClass;
String className; public SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public AbstractBaseDao(){
ParameterizedType parameterizedType = (ParameterizedType)this.getClass().getGenericSuperclass();
tClass = (Class<T>)parameterizedType.getActualTypeArguments()[0];
this.className = tClass.getSimpleName();
}
@Override
public Serializable save(T model) {
Session session = sessionFactory.getCurrentSession();
Serializable serializable = session.save(model);
return serializable;
} @Override
public int save(List<T> lists) {
return 0;
} @Override
public int saveOrUpdate(List<T> lists) {
for(T l:lists){
sessionFactory.getCurrentSession().saveOrUpdate(l);
}
return 0;
} @Override
public void delete(T model) {
sessionFactory.getCurrentSession().delete(model);
} /**
* 批量删除
* @param ids
*/
@Override
public void deleteList(String ids) {
String hql = "DELETE FROM " + className + " AS A WHERE A.id IN ("+ids+")";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.executeUpdate();
} @Override
public void update(T model) {
sessionFactory.getCurrentSession().update(model);
} // @Transactional
@Override
public List<T> findList() {
return sessionFactory.getCurrentSession().createQuery("FROM "+className).list();
} @Override
public List<T> findList(String property, Serializable value) {
List<Query> query = sessionFactory.getCurrentSession().createQuery("FROM " + className + " AS B WHERE B." + property + "=" + value).list();
return (List<T>) query;
} @Override
public T find(Serializable id) {
return (T) sessionFactory.getCurrentSession().get(tClass,id);
} @Override
public T find(String property, Serializable value) {
Query query = sessionFactory.getCurrentSession().createQuery("FROM " + className + " AS B WHERE B." + property + "=:v");
query.setParameter("v",value).uniqueResult();
return (T)query.uniqueResult();
} @Override
public List<T> queryForPage(int offset, int length) {
Query q = sessionFactory.getCurrentSession().createQuery("FROM "+className);
q.setFirstResult(offset);
q.setMaxResults(length);
return q.list();
}
@Override
public List<T> queryForPage(String hql, int offset, int length) {
Query q = sessionFactory.getCurrentSession().createQuery(hql);
q.setFirstResult(offset);
q.setMaxResults(length);
return q.list();
}
@Override
public Integer getCount() {
// sessionFactor
Query q = sessionFactory.getCurrentSession().createQuery("SELECT COUNT (*) FROM "+className);
return Integer.parseInt(q.list().get(0).toString());
}
@Override
public Integer getCount(String hql) {
Query q = sessionFactory.getCurrentSession().createQuery(hql);
return Integer.parseInt(q.list().get(0).toString());
}
}
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
//这里的作用是配置链接数据库的文件,更改数据库只需要applicationContext.xml配置在这里就好了
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-teacher.xml,classpath:applicationContext-common.xml</param-value>
</context-param> <filter >
<filter-name > HibernateOpenSession</filter-name >
<filter-class > org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class >
</filter > <filter-mapping >
<filter-name > HibernateOpenSession</filter-name >
<url-pattern > /*</url-pattern >
</filter-mapping > <!--<!– 分布式Session共享Filter –>-->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//在这里打上一下代码就可一让struts2来帮我们管理链接请求了,是不是很简单呢
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
然后我们就可以使用struts2了,当然别忘了去下载jar包,如果你使用maven来管理jar包的话
<!-- Struts-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
就是这些打在pom文件中,不知道maven是什么的可以自己去百度,简单的来说就是个jar包管理工具用起来方便的很,再也不用自己去找jar包了
之后我们需要一个struts.xml文件
<action name="paper_*" class="com.dazhi.controller.PaperAction" method="{1}">
<result name="all">/paper/index.jsp</result>
<result name="add">/paper/add.jsp</result>
<result name="one">/paper/update.jsp</result>
<result name="delete">/paper/update.jsp</result>
</action>
就像这样,如果你可以访问paper_add.action去找到com.dazhi.controller.PaperAction这个文件,访问完会跳转到这个页面/paper/add.jsp
在PaperAction这个文件中你只需要写一个方法,方法名为add,如下
public String add(){
return "add";
}
这样就可以实现页面的跳转了,之后我们可以调用service一层层去调用BaceDao中的方法,实现增删改查,同时别忘了每个文件需要加上spring注解!
把值返回到页面上只需要ActionContext.getContext().put("对象名",对象名);之后从页面上使用s标签去获取就可以了
这样看来是不是很简单呢?
SSH框架用法,及作用(在一位菜鸟使用半年之后归纳的总结)的更多相关文章
- MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
MVC+Spring.NET+NHibernate .NET SSH框架整合 在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...
- ssh框架搭建的基本步骤(以及各部分作用)
ssh框架搭建的基本步骤(以及各部分作用) 一.首先,明确spring,struts,hibernate在环境中各自的作用. struts: 用来响应用户的action,对应到相应的类进行 ...
- 学习SSH框架
1.SSH框架的认知 在做相关的java的网页的开发制作时,良好的层次分解是十分有比要的,所以我们在云涌第三方的框架之下来简化还有名了我们相关的网站的开发. SSH框架实则为Struct + spri ...
- javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇
即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...
- spring+springMvc+struts的SSH框架整合
1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8" ...
- SSH框架(1)
一. SSH框架相关的面试题: 1. BeanFactory的作用是什么? [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依 ...
- ssh 的用法
一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...
- 基于SSH框架的网上商城的质量属性
常见质量属性 1.性能 性能就是一个东西有多快,通常指响应时间或延迟. 响应时间:从发出请求到收到响应所用的时间,比如用户点击网页中的超链接或桌面应用程序中的按钮 延迟:消息从A点到B点,通过你的系统 ...
- SSH框架简化
通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91,Tom ...
随机推荐
- Kali学习笔记13:操作系统识别
为什么要扫描操作系统呢? 其实和上一篇博客:<服务扫描>类似,都是为了能够发现漏洞 发现什么漏洞? 不同的操作系统.相同操作系统不同版本,都存在着一些可以利用的漏洞 而且,不同的系统会默认 ...
- 【hadoop】1、MapReduce进行日志分析,并排序统计结果
1.网上很多关于搭建Hadoop集群的知识,这里不多做叙述,并且本机运行Hadoop程序是不需要hdfs集群的,我们本机运行只做个demo样式,当真的需要运行大数据的时候,才需要真正的集群 2.还有就 ...
- Xamarin.Android 开发中遇到旋转屏幕错误
错误信息 : System.NotSupportedException: Unable to find the default constructor on type App5.MyFragment. ...
- ExternalException (0x80004005): 无法执行程序
今天更新系统上传到阿里云服务器,报错如下: “/”应用程序中的服务器错误. 组策略阻止了这个程序.要获取详细信息,请与系统管理员联系. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆 ...
- AOP切面实现原理以及多个切面切同一个地方时的优先级讲解
此博文的编写,源于前段时间的惨痛面试经历.刚好近几天尘埃落定.手头事少,遂总结一二,与各位道友分享,欢迎吐槽指正.今年年初的这段面试经历,已于之前的博文中 整理发出(https://www.cnblo ...
- CNN 模型压缩与加速算法综述
本文由云+社区发表 导语:卷积神经网络日益增长的深度和尺寸为深度学习在移动端的部署带来了巨大的挑战,CNN模型压缩与加速成为了学术界和工业界都重点关注的研究领域之一. 前言 自从AlexNet一举夺得 ...
- eclipse使用maven打包的时候发现静态资源没包含进去
今天在打包的时候,发现传上去的包里没有配置静态资源. (右键项目--->Run As ---> 8 Maven install ) 后来发现是因为在pom.xml里没有配置打包静态资源的 ...
- 前端(五)之display 总结与浮动
前端之浮动布局.清浮动 display 总结 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- 匿名函数python内置高阶函数以及递归
匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...
- [转]Build An Image Manager With NativeScript, Node.js, And The Minio Object Storage Cloud
本文转自:https://www.thepolyglotdeveloper.com/2017/04/build-image-manager-nativescript-node-js-minio-obj ...