当前位置:小鱼儿玄机二站 > 计算机网络 > SSH框架用法,在一位菜鸟使用半年之后归纳的总

SSH框架用法,在一位菜鸟使用半年之后归纳的总

文章作者:计算机网络 上传时间:2019-10-08

SSH框架用法,及职能(在一个人菜鸟使用四个月之后综合的总括),ssh五个月今后

SSH框架从接触的话更换了自家对代码的编纂情势,以前期伊始上学到勉强精通能够说拿走不菲感受,以下内容出自java初学者对SSH的精晓,如有不对的地方还请见谅,希望得以建议来与自身沟通,感激!

SSH看名称就会想到其意义,struts2,spring,hibernate三大框架组成的从服务端接收诉求到数据库调用并回到的一种流程(个人观点,词汇也并不标准)

这正是说如何去采纳,又有那一个稍微欠缺呢?

在运用那一个框架在此之前本身直接都以行使servlet ,那么servlet是如何吧?(上面是本人从百度上拷贝过来的servlet生命周期解释)

  1. 客商端央浼该 Servlet;
  2. 加载 Servlet 类到内部存款和储蓄器;
  3. 实例化并调用init()方法最早化该 Servlet;
  4. service()(依据央浼方法不一致调用doGet() 或者doPost(),其余还可能有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
  5. 加载和实例化 Servlet。那项操作平常是动态实行的。然则,Server 平日会提供贰个管制的选项,用于在 Server 运维时强制装载和早先化特定的 Servlet。

Server 成立四个 Servlet的实例 第二个客商端的哀求达到 Server Server 调用 Servlet 的 init() 方法(可配备为 Server 创设 Servlet 实例时调用,在 web.xml 中 <servlet> 标签下配置 <load-on-startup> 标签,配置的值为整型,值越小 Servlet 的启动开始的一段时期级越高) 八个客商端的央浼达到 Server Server 创建一个伸手对象,管理客商端乞请Server 创立二个响应对象,响应顾客端央求 Server 激活 Servlet 的 service() 方法,传递须求和响应对象作为参数 service() 方法赢得有关伏乞对象的信息,管理乞求,访谈其他财富,得到要求的音讯service() 方法运用响应对象的格局,将响应传回Server,最后达到客商端。service()方法大概激活另外措施以拍卖诉求,如 doGet() 或 doPost() 或程序猿自身付出的新的办法。 对于更加的多的客商端伏乞,Server 成立新的央浼和响应对象,仍旧激活此 Servlet 的 service() 方法,将那四个对象作为参数字传送递给它。如此重复以上的轮回,但不要重复调用 init() 方法。经常 Servlet 只开端化三次(唯有三个指标),当 Server 不再要求Servlet 时(日常当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。   那时候用servlet的时候认为相当好用,自从学会ssh就知道,SSH初步配置的东西偏多,相比较费心,不过项目基础搭建好了不得不就特意有利,譬喻hibernate链接数据库 在那边大家须要动用四个BaceDao,用来把dao层的法门统一的架空出来方便调用,上边是大家项目小组本身编写的虚幻dao层: 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()); } }   上边那几个主意是增加和删除改查平日会用到的艺术,于是大家把她抽象的写出来,只要经过考察就轻便开掘那些形式的用处了,当然这几个艺术亦非很完善。 用这些的法子正是率先大家要求数据库有二个表,之后我们也要对应的写出bean类,每多个bean类都急需有与之相应的service和dao(service集成抽象service,dao要一连抽象dao),同期大家供给布置hbm文件,用来明确数据库与表的关系,这一个详细情形能够参照hibernate的行使方式,关于hbm文件的安排与使用,当然链接数据库还供给配置applicationContext.xml这一个文件,那个文件的功效就是链接数据库的地方,客户名,密码,从此间写完贰次之后只必要从web.xml中拿来调用就能够了,包罗换个数据库只必要新建二个applicationContext.xml2来代表它是还是不是便利的多,觉获得喜欢呢? 对了,依旧从struts开头讲起吧,其实一齐先刚上手笔者也很懵逼,搞不懂到底怎么用,可是今后自己领悟了部分,struts使用办法很简短,首先我们须要先从web.xml中调用struts2来帮大家管理链接地址就好了,也正是说web.xml被struts2代替(只是一些用途上的代替,并非完全的),下边是web.xml中的写法

<!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 >

  <!--&lt;!&ndash; 分布式Session共享Filter &ndash;&gt;-->
  <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框架从接触的话改动了作者对代码的编辑方式,在此从前期开端读书...

SSH框架从接触的话改换了作者对代码的编辑格局,从先前时代开首上学到勉强掌握可以说拿走不菲感受,以下内容出自java初学者对SSH的接头,如有不对的地点还请见谅,希望得以提议来与自己沟通,感激!

SSH看名就能够知道意思,struts2,spring,hibernate三大框架组成的从服务端接收央浼到数据库调用并赶回的一种流程(个人观点,词汇也并不正确)

那正是说什么样去接纳,又有那么些稍微欠缺呢?

在选择那一个框架在此以前本身直接都以应用servlet ,那么servlet是怎么吧?(下边是自己从百度上拷贝过来的servlet生命周期解释)

  1. 客户端诉求该 Servlet;

  2. 加载 Servlet 类到内部存款和储蓄器;

  3. 实例化并调用init()方法起首化该 Servlet;

  4. service()(依据须要方法分歧调用doGet() 也许doPost(),其它还应该有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。

  5. 加载和实例化 Servlet。那项操作日常是动态试行的。然则,Server 常常会提供三个管理的选项,用于在 Server 运维时强制装载和起初化特定的 Servlet。

Server 创造一个 Servlet的实例

首先个客商端的央浼到达 Server

Server 调用 Servlet 的 init() 方法(可配置为 Server 创设 Servlet 实例时调用,在 web.xml 中 <servlet> 标签下配置 <load-on-startup> 标签,配置的值为整型,值越小 Servlet 的开发银行早期级越高)

三个顾客端的乞求到达 Server

Server 创立二个央浼对象,管理顾客端央求

Server 创建一个响应对象,响应客商端诉求

Server 激活 Servlet 的 service() 方法,传递央求和响应对象作为参数

service() 方法赢得有关央浼对象的新闻,管理伏乞,访谈其余能源,得到要求的音讯

service() 方法运用响应对象的方式,将响应传回Server,最后达到客户端。service()方法只怕激活另外方法以拍卖诉求,如 doGet() 或 doPost() 或技术员本身付出的新的办法。

对此越多的客商端需要,Server 创制新的伸手和响应对象,还是激活此 Servlet 的 service() 方法,将那七个指标作为参数字传送递给它。如此重复以上的轮回,但不必再度调用 init() 方法。经常 Servlet 只开端化一回(唯有贰个对象),当 Server 不再需求Servlet 时(常常当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。

 

当即用servlet的时候认为蛮好用,自从学会ssh就知晓,SSH开始配置的东西偏多,相比较费劲,不过项目基础搭建好了不得不就专门便利,比方hibernate链接数据库

在此地我们必要动用一个BaceDao,用来把dao层的不二法门统一的抽象出来方便调用,下边是大家项目小组自个儿编辑的空洞dao层:

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());

}

}

 

下边那么些格局是增加和删除改查日常会用到的艺术,于是大家把他抽象的写出来,只要经过观看就轻便窥见这几个主意的用处了,当然这一个措施亦不是很周详。

用那几个的点子正是第一大家须要数据库有三个表,之后大家也要对应的写出bean类,每一个bean类都急需有与之对应的service和dao(service集成抽象service,dao要延续抽象dao),同期咱们需求配备hbm文件,用来规定数据库与表的涉嫌,这一个详细的情况能够参谋hibernate的选用方法,关于hbm文件的布署与应用,当然链接数据库还索要配置applicationContext.xml那一个文件,那个文件的成效正是链接数据库的地方,客商名,密码,从此处写完三遍今后只须要从web.xml中拿来调用就足以了,饱含换个数据库只必要新建一个applicationContext.xml2来取而代之是或不是便利的多,感到到欢跃呢?

对了,依旧从struts起头讲起吧,其实一同首刚上手笔者也很懵逼,搞不懂到底怎么用,不过未来自个儿晓得了一部分,struts使用方法很轻松,首先大家要求先从web.xml中调用struts2来帮大家管理链接地址就好了,也正是说web.xml被struts2取代(只是有个别用途上的代表,实际不是全然的),上边是web.xml中的写法

<!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 >

  <!--&lt;!&ndash; 分布式Session共享Filter &ndash;&gt;-->
  <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框架用法,在一位菜鸟使用半年之后归纳的总

关键词: