java ssh 和mvc_[转]JAVA三大框架SSH和MVC

Java—SSH(MVC)

JAVA三大框架的各自作用

hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是Model;

struts提供的丰富标签是用于显示层View;同时struts也充当了实现Control的功能(不管是Struts1,还是Struts2),接收参数,视图分发。

Spring是用于降低层与层间耦合度的,就是所有的类都可以由spring统一创建,用时只需注入即可(IOC)

从功能上来说,hibernate为M,struts2 为V,也可以为C,spring可以为C。

但大多数项目中,hibernate为M,struts2 为V+C,spring用来帮助管理类以及实现一些业务无关功能,如日志记录等,大多数都是用struts来做C的。

一、Spring

Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。

Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的

Inversion of

Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。

Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了

Hibernate和其他O/R

mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。

Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的

aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器

集成的强大而灵活的MVC Web框架。

二、STRUCTS

Struts是一个基于Sun

J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一

年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message

resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个

非常不错的应用框架。

三、Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来

操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命

意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate可以在应用EJB的J2EE架构中

取代CMP,完成数据持久化的重任。映射很简单呀,就是页面的映射呀,多做点练习就会了。

JAVA三大框架用来做WEB应用。 struts主要负责表示层的显示 spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) hibernate主要是数据的持久化到数据库。在

用jsp的servlet做网页开发的时候有个web.xml的映射文件,里面有个mapping的标签就是用来做文件映射的。

当你在浏览器上输入URL地址的时候,文件就会根据你写的名称对应到一个java文件,根据java文件里编写的内容显示在浏览器上,就是一个网页,所以

网页名字是随便写的,随便起的名字,不管你起的是.php

.jsp

.do还是其他的什么都对应这个java文件,这个java文件里的代码进行什么操作就干什么,显示一句话还是连接数据库还是跳转到其他页面等等,这个

java文件把数据进行封装起到安全和便于管理的作用。其实这个java文件编译过来是.class的一个字节码文件,没有那么一个类似html嵌入标签

和代码的网页文件。他与jsp文件区别就是jsp把代码嵌入到html标签中。

还有servlet或者struts中html表单的action中的提交名称对应一个java文件,struts一般是.do的,都和上面一样是映射。

1. 谈谈你mvc的理解

MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。

MVC中的模型、视图、控制器它们分别担负着不同的任务。

视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。

模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性

控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。

然后根据处理的结果调用相应的视图来显示处理的结果。

MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。

Struts

1. struts1.2和struts2.0的区别?如何控制两种框架中的单例模式?

struts1.2和struts2.0的对比

a、Action类:

struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类

b、线程模式

struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。

单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。

struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。

c、Servlet依赖

struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。

struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action仍然可以访问初始的Request和Response。

但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。

d、可测性

测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase

提供了一套struts1.2的模拟对象来进行测试。

Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。

2. 项目中为什么使用SSH

1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。

2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。

3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等

3. struts与spring是如何继承的

不懂题目之意:是否是说的struts的action都继承自org.apache.struts.action.Action而Spring中的继承就不清楚了。

4. struts如何实现国际化

以下以两国语言(中文,英文)为例:

1. 在工程中加入Struts支持

2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如:

lable.welcome.china=Welcome!!!

3. 创建英文资源文件ApplicationResource_en.properites

4. 创建临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!

5. 对临时中文资源文件进行编码转换。可以使用myeclipse的插件,也可以在dos下执行:

native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties

6. 在jsp中加入struts的bean标记库

显示信息:

可以在struts-config.xml文件中定义多个资源包,而每个资源包可使用key属性指定包的名称。

5. struts2.0的常用标签

1. 往action里传值:

2. 显示标签 property 用于输出指定值:

3. 用于从页面往action中(user)的对象内传值:

4. 判断 用于在页面中判断指定数据 …. ….

5. 迭代用于将List、Map、ArrayList等集合进行循环遍历

6. URL地址标签,用于生成一个URL地址,可以通过URL标签指定的子元素向URL地址发送请求参数

7. 超链接 一般和标签一起使用,用于带多个参数。“>超链接

8. set标签,用于将某个值放入指定的范围内。例如application,session等。

6. struts中怎么配置form-bean、action、tiles

此处配置的是struts1.2的

form-bean配置:(在配置文件struts-config.xml中):

name: 指定form的名字; type指定form的类型:包名+类名;

action配置:(在配置文件struts-config.xml中)

attribute=""

input=""

name=""

parameter=""

scope="request"

type=""

>

path:请求Action的名字; attribute:form的名字,与form-bean中的name对应; input:输入页的路径;

name:如果配置了attribute,name不起作用,与attribute一样; parameter:使用分发Action时,指定调用分发

Action中的方法名;

scope:Action的范围; type:Action的类型:包名+类名;

7.什么是IOC(DI),有什么好处(java project 的spring IOC模拟)

IOC(Inversion Of

Control,控制反转):一个类的某个属性需要使用时,需要有本类自己初始化。而在spring类的某些属性不用自己初始化而交给了spring来管

理。这样的转换就是IOC思想。Spring的IOC思想是,spring的IOC容器在初始化的时候就根据配置对相应的对象进行初始化,并放在容器中。

同时根据配置对相应类的属性进行初始化。也就是DI(Dependency

Injection依赖注入),至此类的初始化不需要类本身负责初始化而交给了spring容器。

IOC的好处是:降低耦合性:某个类的一个属性,以前是该类自己控制,而引人Spring后,这个类的属性由Spring控制。

Spring IOC的模拟所做的事情是:在xml文件配置好相应的bean,设置注入关系。在解析xml时候对bean进行初始化同时对相应属性进行注入。

8.什么是AOP?

两种注入方式:

a)使用Annotation

b)使用xml

面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面

1.面向切面编程提供声明式事务管理

2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:

1.各个步骤之间的良好隔离性

2.源代码无关性

9.DAO层采用JdbcTemplate操作数据,如何在Service层控制事务?

DAO层采用JdbcTemplate进行数据库操作。

Service层调用DAO层方法。

由于一个Service方法可能需要调用多个DAO对象的方法,需要在Service层进行事务控制。

由于一些原因,需要采用编程式事务(现使用TransactionTemplate)。

可是存在一个问题:

只有当创建TransactionTemplate对象的DataSourceTransactionManager使用的DataSource对象和

DAO对象创建JdbcTemplate对象使用的DataSource是同一个对象时才能在

transactionTemplate.execute()方法中控制事务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio开发基础之Context用法说明

1、Context说明 Context是一个用于访问全局信息的接口,如应用程序的资源(如图片,字符串等),一些常用的组件继承自Context,如Activity和Service等等。 如利用Java代码创建一个textView,textView的第一种setText()方法直接传入一个字符串,第二种setText()方法传入…

基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

作者信息 作者: 彭东林 邮箱:pengdonglin137163.com QQ:405728433 平台简介 开发板:tiny4412ADK S700 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的…

【C语言简单说】八:分支结构之if...else if()...else...(3)

既然前面几种情况大家都了解了话&#xff0c;这一节的话我就不举例子了。。。 直接上代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {int a1;if(a1){printf("a的值等于1\n");}else if(a2){printf("a的值等于2\n"); …

最通俗易懂的依赖注入与控制反转

这是一个关于 ASP.NET 6 依赖注入的系列文章。在这个系列中&#xff0c;我们将了解到什么是依赖注入、控制反转&#xff0c;它能够做什么&#xff0c;以及我们为什么要使用它。之后&#xff0c;我们会进一步了解 ASP.NET 6 依赖注入的生命周期、服务容器等重要概念。最后&#…

word公式编辑器_论文查重算公式吗 公式怎样避免查重?

论文查重算公式吗 公式怎样避免查重?每一个毕业生想要毕业都要经过论文查重这一关&#xff0c;仅有通过了论文查重&#xff0c;才可以进入答辩。在论文检测的情况下&#xff0c;不少同学论文中一定会应用大批量的计算公式&#xff0c;且计算公式全部都是固定不动的&#xff0c…

java string 数据结构_数据结构---Java---String、StringBuilder、StringBuffer

1、概述1.1  String&#xff1a;不可变字符串public final class String implements java.io.Serializable, Comparable, CharSequence {//final的字符数组private final char value[];}1.2  StringBuilder&#xff1a;可改变的字符串&#xff0c;线程不安全public final c…

adb logcat 查看日志

使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是&#xff1a; [adb] logcat [<option>] ... [<filter-spec>] ... 下文介绍过滤器和命令选项&#xff0c;详细内容可参见Listing of logcat Command Options。 可以在开发机中通过远程shell的方式…

小程序 - 学习笔记

一、小程序文档笔记 默认开发目录 开发目录解析 1.  app.js、app.json、app.wxss 这三个文件必须有不能删掉。 一个小程序主体部分由这三个文件组成&#xff0c;而且必须放在项目的根目录 js后缀的是脚本文件&#xff0c;调用小程序框架提供的 API—— API 文档json后缀的文件…

Android Studio开发基础之Service

1、Service的使用 Activity可以呈现一个用户界面,但是Service确实运行在后台,新建一个Myservice.java,会在AndroidManifest中自动配置<Service>标签。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://…

linux之sudo apt-get install **** 是到哪里下载软件以及下载到哪里去了

1 问题 我们平时在linux系统上更新软件,一般都是执行 sudo apt-get install 软件名 为什么这个命令就能下载软件了呢? 下载的软件放到哪里去了呢? 2 sudo apt-get install是到哪里下载软件 apt-get,是一条linux命令,适用于deb包管理式的操作系统 比如我的ubuntu上面有…

【C语言简单说】九:输入

到了下午了&#xff0c;上着班发现没啥事情做… 又来码博客了 ↖(▔&#xff3e;▔)↗ 这一小节我们来说说输入吧。突然想总结以下if语句的&#xff0c;结果发现&#xff0c;还有一个输入没说&#xff1b;之前是不是说过了输出&#xff1f;就是printf这个&#xff0c;现在还有…

java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...

优秀工程师的成长之路就是一条不断打怪升级之路的“修仙之路”&#xff01;而Java程序员一向比别人更难&#xff0c;如果说大家都在修仙的话&#xff0c;java程序员简直神似“剑修”&#xff0c;入行枯燥精通难&#xff0c;要想变得强大&#xff0c;需要能力也需要运气&#xf…

Web Api如何传递POST请求

这里记录一次Web Api传递post请求的例子&#xff0c;由于使用了默认工程的例子&#xff0c;方法名的参数值标记头为FromBody的形式&#xff0c;如下图所示的调用&#xff1a; 调用方式&#xff1a; 那么如果要两个以上的参数如何去实现&#xff0c;这种方式是不行的&#xff0c…

java 不能反序列化_不能将“Java.Lang.Studio”实例反序列化到StaskObl对象令牌中

我收到下面的错误消息,有人能帮助或建议如何最好地调试它吗?无法反序列化的实例java.lang.String超出起始值的对象[来源:(pushbackinputstream)处的令牌;行:1,列:37610](通过参考链:CopyToList[[产品] ] -gt;java. U.L.AyayList[ 23 ] -&G.M.Mult.产品[“价格”] -& c…

Android Studio开发基础之启动Service,并通过从Activity向Service传递数据

本实例演示启动Service&#xff0c;并通过从Activity向Service传递数据&#xff0c;新建一个Service&#xff0c;并敲如下代码&#xff1a; package com.example.lhb.startservice;import android.app.Service; import android.content.Intent; import android.os.IBinder; imp…

AOT和单文件发布对程序性能的影响

前言这里先和大家介绍一下.NET一些发布的历史&#xff0c;以前的.NET框架原生并不支持最终编译结果的单文件发布&#xff08;需要依赖第三方工具&#xff09;&#xff0c;我这里新建了一个简单的ASP.NET Core项目&#xff0c;发布以后的目录就会像下图这样&#xff0c;里面包含…

均分纸牌(经典贪心)

1 题目描述 有N堆纸牌,编号分别为1,2,…,N。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上;在编号为N的堆上取的纸牌,只能移到编号为N−1的堆上;其他堆上取的纸牌,可以移…

Some projects cannot be imported because they already exist in the workspace

1、Some projects cannot be imported because they already exist in the workspace2、Some projects were hidden because they exist in the workspace directory有时候eclipse或者myeclipse导入项目的时候会发生上面两个错误&#xff0c;IDE不允许我们导入。具体原因是在ID…

shell变量/环境变量和set/env/export用法_转

转自&#xff1a;shell环境变量以及set,env,export的区别 一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量&#xff0c;包括的私有变量以及用户变量。不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样。 env:显示(设置)用户变…

【C语言简单说】十:小结

([]!!) ㄟ(≥◇≤)ㄏ(&#xffe3;ε(#&#xffe3;) ∑( △ |||)︴ 一言不合发表情。。。 这节我们来做一个小菜单&#xff0c;然后判断我们选择的是啥东西&#xff0c;好了上代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {int a1;prin…