barriers / 阅读 / 详情

jsf struts jsp spring 什么关系和区别?

2023-07-20 21:04:24
共4条回复
贝贝

Spring:业务逻辑框架,和struts,hibernate组成mvc的三大框架,也就是大家所说的ssh框架

框架的出现让开发变得更加方便,快捷,以及可扩展性

学这个三大框架之前就会对应的学jsp,servlet和javabean

struts 1和2的区别:

struts1和struts2的区别其实并不是太大,两者的区别:

Action 类:

◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。

◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:

◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:

◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。

◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

可测性:

◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。

◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入:

◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言:

◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

绑定值到页面(view):

◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。

◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

类型转换:

◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。

◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

校验:

◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。

◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

Action执行的控制:

◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

北有云溪

jsf全称javaServer Faces,是新标准的web框架。它提供了丰富的用户界面(ui)的功能,甚至可以用拖拽的方式编辑页面,使得编辑网页接近应用程序界面的编辑。

jsf拥有和jsp不同的页面处理流程,即生命周期,更易于控制。据说提出jsf框架的工作组和提出jsp的工作组是同一个。

jsf和struts肯定不相同,更简单调用后台的配置方式,功能更丰富、强大的标签,比如验证、局部刷新等功能可以通过标签来实现。通过自带和其他组织提供的标签库,可以完全不用java脚本代码。

spring是处理类的对象的生成,减小代码之间耦合度的框架。一些术语如控制反转、依赖注入等。它在java代码编写的时候很有用。

struts 1和2的区别上面有人说了,太详细了。

nicehost

jsf是最新的javaweb标准,面向组件的开发,国内才刚刚开始用

struts是老框架,不过很稳定,程序员也好找

jsp是javaweb的基础

spring是中间层框架,有点像粘合剂

LocCloud

jsf不太清楚,目测是种框架,spring是struts2 里的,具体我还没学到,struts1和2没啥联系,1主要是MVC吧,2就是SSH了。希望对你有帮助。

相关推荐

Struts1中actionform和action属于MVC哪一层,为什么?

【答案】:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用户表单数据以便于在不同页面间传递。而MVC中的model层就是业务逻辑层,该层用于实现具体的业务逻辑、状态维护及管理。
2023-07-20 18:10:251

struts中ActionForm有什么作用

1、ActionFormBean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。2、Struts框架利用ActionFormBean来进行View组件和Controller组件之间表单数据的传递。3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionFormBean中,把它传递给Controller组件,Controller组件可以对ActionFormBean中的数据进行修改JSP文件使用Struts标签读取修改后的ActionFormBean的信息,重新设置HTML表单。
2023-07-20 18:10:321

actionform的作用域包括哪些层次

actionform的作用域包括层次如下:1、全局-就是你的vba程序里面的所有函数(过程)都可以使用的变量;2、局部-就是在那定义只能在那用(比如:在函数里面定义的,就只能在函数里面使用);3、静态-是变量里面的数据不能被修改;4、模块-就是你定义变量的模块里面的所有函数(过程)都可以使用,其他模块里面的函数不能使用;5、共有、私有-这个是涉及到类的问题了;6、过程-其实过程和函数差不多,一个过程就相当于一个函数,只是他们定义的关键词不一样,过程用sub定义,函数用function定义,区别就是函数有返回值,过程没有。
2023-07-20 18:10:401

动态表单与静态表单的区别有哪些

Struts架构中,ActionForm负责记录和维护视图中的数据,提供Model(模型层)和View(视图层)使用,因此可疑将它看作是模型和视图之间的中介.如果需要,还可疑启动ActionForm对数据实现验证及过滤功能,即只有通过ActionForm验证的数据才能够发送到ActionBean进行后续处理.ActionForm是一种特殊的JavaBean,控制器组件RequestProcessor利用其属性存取方法setter/getterXXX()实现初始话.在初始化完毕后,还能调用它的validate()方法来对请求参数进行验证,通常是检查数据格式是否合法,并在验证失败的时候通过错误管理机制加以处理.但是ActionForm本身也存在一个缺点:由于ActionForm对应于Http请求表单,所以在开发设计大型Struts应用时,随着页面和请求表单数目的增多,Struts应用程序中需要定义打量的ActionForm类.此外,同一类型的表单字段可能出现在不同表单,进而出现在多个ActionForm中,这会造成多个ActionForm类之间不能共用相同的验证代码,例如:在登录页面中有用户和密码字段,而在注册页面童谣也有密码和用户字段.其对应的名称及操作应该是类似的.当然可疑考虑开发一个巨大的ActionForm类,使之同时对应多个表单,但这种过强的聚合性会导致代码更难以维护和重用.为了彻底解决这种问题,Struts1.1中提出了动态ActionForm(DynaActionForm),同时也提供了Validator验证框架实现动态验证表单(DynaValidatorForm)的功能.实际上,引入动态表单DynaActionForm的目的在于减少ActionForm的数目,因此也常将ActionForm称为静态表单以示区别.
2023-07-20 18:10:471

struts2里的ActionMapping和ActionForm作用是什么

ActionForm应该是struts1里面用的吧
2023-07-20 18:10:555

jsp何获得上传文件的mimi类型

两种情况:1.所上传的文件有正确的文件扩展名, JSP中可通过获取文件的全名, 然后调用 application.getMimeType("文件名")2. 所上传的文件没有扩展名=======================如果所上传的文件没有扩展名,可以使用Struts中的org.apache.struts.upload.FormFile这个接口中的getContentType()方法来获得MIME类型.比如说:可以写一个ActionForm================UploadActionForm.java==================package com.taotling.struts.upload.actionform;import org.apache.struts.action.ActionForm;import org.apache.struts.upload.FormFile;public class FileActionForm extends ActionForm { private String title; private FormFile uploadFile; //使用Struts提供的FormFile封装上传文件 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public FormFile getUploadFile() { return uploadFile; } public void setUploadFile(FormFile uploadFile) { this.uploadFile = uploadFile; }}============================================================================UploadAction.java===========================package com.taotling.struts.upload.action;import java.io.FileOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.upload.FormFile;import com.taotling.struts.upload.actionform.FileActionForm;public class UploadAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FileActionForm faf = (FileActionForm)form; FormFile file = faf.getUploadFile(); FileOutputStream fos = new FileOutputStream(file.getFileName()); fos.write(file.getFileData());//保存上传文件 fos.flush(); fos.close(); return mapping.findForward("success"); }}============================================================struts-config.xml配置如下: <form-beans> <form-bean name="uploadForm" type="com.taotling.struts.upload.actionform.FileActionForm" /> </form-beans> <action-mappings> <action path="/upload" type="com.taotling.struts.upload.action.UploadAction" name="uploadForm" scope="request" > <forward name="success" path="/uploadsuccess.jsp"></forward> </action> </action-mappings>upload.jsp内容===============================================<form action="upload.do" method="post" enctype="multipart/form-data">title:<input type="text" name="title"><br>files:<input type="file" name="uploadFile"><br><input type="submit"><br></form>=================================================================uploadsuccess.jsp内容====================================:File"s contentType:${uploadForm.uploadFile.contentType}
2023-07-20 18:11:101

struts和struts2的区别

struts1和struts2 是2个完全不同的框架,其实struts2核心就是 webwork框架struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts 1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO。struts2核心控制器是FilterDispatcher,Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。 望采纳
2023-07-20 18:11:182

ActionForm Bean 对象是由谁创建的。谢谢 ,快点快点。。。。。

struts自己创建的表单类型通过你post过来的数据自动封装到一个 form里面
2023-07-20 18:11:401

Jsp 中Form标单提交数据给ActionForm 从Action取出来是问号

String temp=request.getParameter("textfieldString content=new String(temp.getBytes("ISO-8859-1"),"gb2312");
2023-07-20 18:11:524

java语言如何实现 登陆 退出 功能

我这有个登录代码,给你写出来,你自己去看吧public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse){LoginActionForm loginActionForm=(LoginActionForm)form;Session session = HibernateSessionFactory.gerSession();Transaction ts = null;try{ts=session.beginTransacion();Query query = session.creacteQuery("from LoginActionForm as laf");List list =query.list();System.out.println(list.size());for(int i =0;i<list.size();i++){LoginActionForm laf = (LoginActionForm)list.get(i);System.out.println("id="+laf.getID());if(laf.getUsername().equals(loginActionForm.getUserName().trim())&&laf.getPassword().equals(loginActionForm.getPassword().trim())){//登陆成功后将用户名与ID信息保存至session中request.getSession().setAttribute("username",loginActionForm.getUserName().trim());request.getSession().setAttribute("id",laf.getId()+"");request.getSession().serAttribute("ismanager",laf.getIsmanager()+"");if(laf.getIsmanager()==1){return new ActionForwarde("/XXXXXX.jsp");}else{return new ActionForward("/XXXX.jsp");}}}ts.commit();}catch(Exception e){try{if(ts!=null)ts.rollback();}catch(Exception ex){ex.printStackTrace();}e.printStacktrace();return new ActionForward("/登录.jsp");}finally{try{session.close();}catch(Exception exx){exx.printStackTrace();}}return new ActionForward("/登录.jsp");}你自己看着改吧。。。。。。
2023-07-20 18:12:142

Java请求对象与响应对象!

这个是Struts1.x的版本哈! 耦合性不好! request 在JSP中是请求对象 response 是JSP里的响应对象 form 是HTML里表单 mapping 是Form影射到Action的xml表-------------------------------package com.yourcompany.struts.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import com.yourcompany.struts.form.UserLoginForm;public class UserLoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserLoginForm userLoginForm = (UserLoginForm) form; if(userLoginForm.getUsername().equals("pujia") && userLoginForm.getPassword().equals("5400354")) return mapping.findForward("OK"); else return mapping.findForward("NO"); }}//UserLoginForm userLoginForm = (UserLoginForm) form;通过form对象和USerLoginFormPOJO类获得表单的属性内容//然后事务处理//然后利用mapping对象返回处理结果
2023-07-20 18:12:222

java中Struts1和Struts2有什么区别 ?

网上百度关于这个答案一大堆呢啊,自己搜一下就可以了,老重复回答这个问题很费神。
2023-07-20 18:12:4012

ssh中 三大框架的各自的作用及好处

专业程序员帮你回答此问题:首先hibernate使用来连接数据库的,好处:如果写好项目要从oracle换成mysql,不用考虑ORACLE和mysql有哪些 sql语句不同,直接换就行了。spring,主要好处是控制反转和面向切面,也就是IOC,AOP。不光可以处理控制业务,而且可以方便的给程序做代理。Struts 有了STRUTS ,servelt基本就可以不用了。主要是Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率
2023-07-20 18:13:052

Java中的SSH是什么

SSH是三大框架的简称Struts, Spring, Hibernate
2023-07-20 18:13:367

设计原理是什么

设计原理是什么问题一:什么是设计原理?设计原理是指设计要遵循的原理。设计的主要原理:单一职责原理:(SRP)一个类,最好只做一件事,只有一个引起它变化的原因。开放-封闭原理:(OCP:TheOpen-ClosedPrinciple)软件实体(类,模块,函数等等)应该是可以扩展的,但是不可修改的。依赖倒转原理:(DIP)这个原则的内容是:要依赖于抽象,不要依赖于具体。或者说是:要针对接口编程,不要对实现编程(Programtoaninterface,notanimplementation)。高层模块不应该依赖底层模块,两个都应该依赖抽象。里氏代换原理:(LiskovSubstitutionPrinciple,LSP)在一个软件系统中,子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。迪米特原理:(LeastKnowledgePrinciple,LKP)最少知识原则,又称为“LawofDemeter”,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用。问题二:网页的设计原理是什么?网页设计是一门新兴的边缘性的行业,在网络产生以后应运而生。网页如门面,小到个人主页,大到大公司、大的政府部门以及国际组织等在网络上无不以网页作为自己的门面。当点击到网站时,首先映入眼帘的是该网页的界面设计,如内容的介绍、按钮的摆放、文字的组合、色彩的应用、使用的引导等等。这一切都是网页设计的范畴,都是网页设计师的工作。作为一名网页设计师,首先要具备审美的能力,而网页设计就相当于平面设计,网页设计师可以将平面设计中的审美观点套用到这上面来(其区别是动态网页的制作是平面设计不能达到的,它是一种审美方式的延伸),所以平面设计上的审美的观点在网页设计上非常实用。如对比、均衡、重复、比例、近似、渐变以及节奏美、韵律美等等,以及色彩的搭配显示出的轻快活泼的美,这些都能在网页上显示出来,反映设计师高超的审美能力。因此作为一名网页设计师,要使自己的网页具有美感,不具备审美能力是不行的。这要求设计师平时多多的积累,在仔细的观察的基础上多分析美的来源,并灵活的将这种理解了的美在自己的作品中表现出来。只有这样才能使自己的审美能力达到一定的高度。而我们经常看到一些网页里用的基本几何形体错综复杂,用色花里胡哨,让人目不暇接,真有一种“乱花渐欲迷人眼”的感觉,但是我们得到了什么呢?美的享受?当然没有,有兴趣得到更多的信息吗?首先自己就讨厌,怎么还谈得上感兴趣?这是一种典型的失败,一味的追求显眼、追求吸引人,这种做法取得的效果适得其反。当然并不是页面做得好看,具有美感网页就一定让人感兴趣,这也建立在一定好的内容的基础上,假如什么内容都没有,也是不能吸引人的。只是网页的界面设计应该还是要以布局的美为标准,有规律可循,这也是网页设计师的责任。问题三:任何东西都有原理,请问产品设计的原理是什么?产品是人劳动的物化、人本质需求的对象,是劳动的结果,是以识的反馈,是理想的实践。更重要的是对某一时代、环境的使用方式的结晶,是这个特定时代、环境思维的反央。产品对产品设计来说,也自然是产品设计的目的、内容和形式、方法的成果。任何产品都是一个由材料以一定的结构形式组合起来的,具有功能目的系统。产品的构成包括可见因素:材料、结构、造型和不可见因素:使用原理、操作顺序、手段、生产组织形式和产品性能。问题四:建筑设计原理的建筑设计原理建筑设计既是为营造建筑实体提供依据,也是一种艺术创作过程;既要考虑人们的物质生活需要,又要考虑人们的精神生活要求。在建筑设计过程中,必须综合考虑各种需要,统一解决各种矛盾。实践表明,各种建筑设计都要处理好总体布局、环境构思、建筑功能、建筑技术、建筑艺术处理等问题。问题五:什么是建筑设计原理就是在进行建筑设计时,所必须要遵循的一些规律。叮对建筑外形设计时,要考虑运用形式规律美的手法,比如比例、尺度、对比、主从、韵律等技巧;还有建筑结构的选择,有混和结构、框架结构和空间结构;还有建筑室外空间环境的设计时,要依据建筑或建筑群体的组合,或者广场、道路、绿化、雕塑及建筑小品等参考资料:《公共建筑设计原理》这本书比较好问题六:struts框架的设计原理是什么?Struts是MVC的一种实现,它很好地结合了jsp、JavaServlet、JavaBean等技术,工作原理如下。1.控制在Struts中,ActionServlet起着一个控制层(controller)的作用。ActionServlet是一个通用的控制组件,这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点,它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也可以负责用相应的请求参数填充ActionForm(通常称为FormBean),并传给动作类(通常称为ActionBean)。动作类实现核心商业逻辑,它可以访问Javabean或EJB。所有这些控制逻辑利用Strut-config.xml文件来配置。2.视图主要是由jsp来控制页面输出。它接收到ActionForm中的数据,利用html、taglib、bean、logic等显示数据。3.样式在Struts中,主要存在3种bean,分别是:Action、ActionFormEJB或者JavaBean。ActionForm用来封装客户请求信息,Action取得ActionForm中的数据,再由EJB或者JavaBean进行处理。样式图如图3.3所示。4.Struts框架的工作机制ActionServlet将request转发给RequestProcessor类进行处理。RequestProcessor类根据提交过来的url,如*.do,从ActionMapping类中得到相对应的ActionForm类和Action类。然后将request的参数对应到ActionForm类中,进行validate()验证。如果验证成功,则调用Action的perform()方法来执行Action,最终返回到ActionFoward类。如果验证失败,则调用ActionErrors类。一句两句也说不清楚,我这边有本关于struts电子书,你邮箱留一下我发给你吧问题七:试验设计的基本原理试验设计的三个基本原理是重复,随机化以及区组化。所谓重复,意思是基本试验的重复进行。重复有两条重要的性质。第一,允许试验者得到试验误差的一个估计量。这个误差的估计量成为确定数据的观察差是否是统计上的试验差的基本度量单位。第二,如果样本均值用作为试验中一个因素的效应的估计量,则重复允许试验者求得这一效应的更为精确的估计量。如s2是数据的方差,而有n次重复,则样本均值的方差是s2/n。这一点的实际含义是,如果n=1,如果2个处理的y1=145,和y2=147,这时我们可能不能作出2个处理之间有没有差异的推断,也就是说,观察差147-145=2可能是试验误差的结果。但如果n合理的大,试验误差足够小,则当我们观察得y1 随机化是试验设计使用统计方法的基石。所谓随机化,是指试验材料的分配和试验的各个试验进行的次序,都是随机地确定的。统计方法要求观察值(或误差)是独立分布的随机变量。随机化通常能使这一假定有效。把试验进行适当的随机化亦有助于“均匀”可能出现的外来因素的效应。区组化是用来提高试验的精确度的一种方法。一个区组就是试验材料的一个部分,相比于试验材料全体它们本身的性质应该更为类似。区组化牵涉到在每个区组内部对感兴趣的试验条件进行比较。问题八:室外设计原理是什么色彩:对比色与互补色。色彩、色相及色调。原色和轻淡色彩。它们是色彩因素的所有组成部分。色调可使气氛活泼也可镇定情绪。最终选择取决于个人品味。质感:平滑的、粗糙的,柔软的、多刺的、有光泽的或有绒毛的。尽量采用高对比度――将精致混以粗犷,柔软配以粗硬。植物的叶片、花朵、茎干及硬质的造园材料都有其特殊的质感。香味:有什么比蔷薇、茉莉、瑞香、迷迭香或丁香的花香更好呢?在窗口及室外座椅旁种植一些具有香味的植物。应为每个季节都准备一些香花植物。声音:溪流的潺潺声,泉水的叮咚声,小鸟的啁啾声,叶片的沙沙声或柔和悦耳的钟声都可以扫除精神上的烦乱,使心灵得到宁。触觉:从毛绒绒的叶片至装饰性草类怕痒的叶片都意味着触摸甚至爱抚的存在。别忘了古树、光滑的卵石及其它无生命材质的触感。功能:如何使用园中空地?作为儿童游乐场?种植菜蔬?用作休憩沉思?还是户外娱乐?应带着一定的目的进行设计。别忘了天然材料的使用,象落叶与堆肥。光照:注意花园中阳地及阴地的状况。在夜晚光线的衬托下花朵变得半透明,草状羽形植物闪闪发光。为了夏季炎热的气候,可种植高大乔木,创建一个阴地。风格:节点花园,黄杨花坛,砖质铺地,木桩式围栏,所有这些形成了花园的风格。所花时间及精力越多越完美。有时小细节会强化风格,也会破坏风格。形态:多考虑植物的立体形状以求得变化。它们可能是圆形、圆柱形、披散状、波浪式或喷泉式。硬质的造园材料和花园装饰物也都有自己的形状。对比:对比以吸引注意力,得到礼堂的享受。对比度小能起镇定作用,对比度大则有令人兴奋的作用。色彩、结构、外形、亮度都可用来进行对比。透视:你从什么角度观赏你的花园?从平台、透过窗户还是平地上?是一览无遗还是移步异景?透视改变了观赏花园的方式。动势:你是怎样穿过花园?是漫步在蜿蜒的小径上,还是从笔直的大路上匆匆路过。功能决定了它们的外形。变化:树木长大后,原先的阳地环境变成了阴地,园中多年生植物会越长越大。柔和的晨曦会变成耀眼的午后阳光。花朵会变成子实。对花园中的变化应作好充分准备。方位:找出指南针,找到正北方。你如何安排你房子和花园的朝向?记住:一个季节中的阴地在其它季节可能变成明亮的向阳环境。个性:传统花卉,旋转木马、球形器皿、规则的意大利式建筑,古代建筑小品或令人心旷神怡的花园雕塑。哪一个对你更有意义?让人们一看就知道这是你的花园。焦点:小径尽头的瀑布,混合花境中的红枫,门旁美丽的花钵,都为眼睛创造了一个可休息的景色。选用焦点景观时要慎重,过多的焦点只会变得杂乱无章。生态:引入一些野生的植物。种一些本土的植物。尽可能选择能丰产及自我循环的植物,少用硬质园景。感观:花园应与当地景观相协调。使用乡土的植物或本地的石材。运用当地常用的表现形式。同时加入具有你个人特色的东西,形成一个独一无二的只属于你的花园。建筑:让花园与建筑相匹配。重复使用相同的主题、外形、颜色、式样及建筑材料。通过使用院子、平台、乔木、阳台、围栏及其它东西将建筑融入花园。问题九:产品设计原理和产品的工作原理有什么区别设计是按罚械、液压、电气等各方面的原则以及承受能力产品工作原理是一个产品的性能,工作作用如何形成问题十:建筑设计原理的内容简介本书包括公共建筑设计原理、居住建筑设计原理和设计技术规范概要三个部分,共计10章。内容涉及建筑概论、空间形态、形式建构、形象表现、聚居形态、集合模式、环境构成、外部环境、室内环境、建筑设备、建筑设计方法学概论等。全书具有综合性、实践性和新颖性等特点。
2023-07-20 18:13:531

java实现一行代码运行3s无响应,让它报错

记录一次启动报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/Springframework/expression/ParserContext at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:629) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:517) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) at com.gaosi.squirrel.start.Main.start(Main.java:69) at com.gaosi.squirrel.start.Main.main(Main.java:48)Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ParserContext at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 6 more1234567891011121314复制代码类型:[java]解决办法:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>【和你所用的Spring版本匹配】</version></dependency>123456复制代码类型:[java]
2023-07-20 18:14:112

struts和struts2的区别是什么?

strust2 是基于mvc模式对servlet的一种封装servlet是java基于j2ee的是一种实现技术strust2 由于本身是基于mvc的一种框架,分为几个类块来实现模块功能,粗略可以理解为 servlet是struts2的父类struts是servlet功能上的扩展
2023-07-20 18:14:312

struts2和springmvc有什么区别

从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了struts的设计思想,并加入了WebWork的优点。在了解Struts2体系之前,让我们先看看struts2对struts做了哪些修改。Struts2与struts的不同主要体现在以下几个方面。(1) Action类1》在struts中都是使用抽象类编程而不是接口,因此他要求开发Action类继承一个抽象的基类,如DispatchAction等。2》Struts2则基于接口编程,我们的Action类可以实现一个Action接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在struts2中Action接口不是必需的,任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。(2) 线程模式1》 struts的Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单列策略限制了struts Action能做的事,并且要在开发时特别小心,Action资源必须是线程安全的或同步的;2》 struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。(3) Servlet依赖1》 struts的Action依赖于Servlet API,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行方法,例如:publicActionForward execute(Actionmapping mapping,ActionForm Form,HttpServletRequestrequest,HttpServletResponse response){}2》 struts2的Action不依赖与容器,允许Action脱离容器单独被测试。如果需要,Struts2的Action任然可以访问初始的request和response。例如下面的这个类MyAction.Java,他可以通过ActionContext对象取得Session值,也可以通过ServletActionContext对象取得request对象。Publicclass MyAction{ protected Object getSession(String key){ return ActionContext.getContext().getSession(key);}protectedHttpServletRequest getRequest(){return(String)ServletActionContext.getRequest();}}(4) 可测试性1》 测试Struts Action的一个主要问题是,execute()方法暴露了Servlet API,这使得测试要依赖于容器。虽然有第三方的软件struts TestCase能够使用模拟对象来进行测试,但显然会让我们的测试变得更加复杂。2》 Struts2 Action的类是POJO对象,因此可以直接编写测试类来测试Action类,只需要在测试类中注入属性即可。(5) 捕获输入1》 struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是再创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;2》 struts2直接使用Action属性作为输入属性,消除对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。Action属性能够通过Web页面的taglibs访问。同时,struts2也支持ActionForm模式。(6) 表达式语言1》 struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱2》 struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL(7) 绑定值到页面1》 struts使用标准jsp机制把对象绑定到页面中来访问2》 struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)(8) 类型转换1》 struts的ActionForm属性通常都是String类型,并不使用 Commons-Beanutils进行类型转换。每个类提供一个转换器,对每个实例来说是不可配置的;2》 struts2使用OGNL进行OGNL进行类型转换,提供了基本和常用对象转换器。(9) 数据校验1》 struts支持在ActionForm的Validate方法中手动校验,或者通过Commons Validator来扩展校验。同一个类可以有不同的校验内容,但不能校验子对象;2》 struts2支持通过validata()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。(10) Action执行的控制1》 struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期;2》 struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用
2023-07-20 18:14:405

struts1和struts2的区别??

strut1.x是基于servlet的,其实质上还是对servlet进行的封装。struts2两个完全是不同的框架。struts2是线程安全的。从目前我对struts2的理解来看,扩展性更好些。基本上可以不依赖servlet容器来进行web项目开发。这样开发方式更灵活,而不用像struts1那样 写各种servlet了。并且struts2引入了IOC的思想,对于Modeldriven方式开发更加方便。以上是我对struts2的理解。
2023-07-20 18:14:565

MVC是什么?

mvc,m:模型,简单的话写个javabean ,v视图:一般用jsp c:控制,一般用servletstruts是mvc的一个代表框架,目前来说是一个比较好的框架
2023-07-20 18:15:365

用jquery 如何获取servlet中输出的值

要用jquery得到后台的信息,那么你就得用ajax来提交下面是jquery里的一种提交方式,url就是你要提交到后台的url地址,null就是你要传递的参数,callback(data)就是回调函数,在这里对你得到的后台信息进行其它操作$.post( url,null,function callback(data){ //这里面的data就是你后台要输出的 }) ;
2023-07-20 18:15:512

jsp 如何获得 table中的数据

是jsp 啊,楼上的弄那么复杂干吗啊直接放到form标签中提交 后台就 request.getParameter("a")就可以啊
2023-07-20 18:16:013

如何在action中引用另一个action中的方法

action中调用另一个action中的方法建立三个jsp页面forward1.jsp,forward2.jsp,forward3.jspforward2.jsp是最后跳转的页面建立2个actionForward1Action,Forward3Actionforward1:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"> <head> <html:base /> <title>forward1.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <a href="forward1.do?method=doForward">forwarder to forward2.jsp</a> </body></html:html>forward2:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"> <head> <html:base /> <title>forward2.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <bean:write name="from"/> <br> <logic:present name = "from2"> <bean:write name="from2"/> <br> </logic:present> </body></html:html>forward3:<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"> <head> <html:base /> <title>forward3.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <a href="forward3.do?method=doForward">forwarde to forward3.do</a> </body></html:html>}package com.test.struts.action;import java.util.Properties;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import com.test.struts.form.Forward1Form;public class Forward1Action extends DispatchAction {public ActionForward doForward( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Forward1Form forward1Form = (Forward1Form) form; String s = "form forward1.jsp"; request.setAttribute("from",s); return mapping.findForward("ok"); } }package com.test.struts.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;public class Forward3Action extends DispatchAction { public ActionForward doForward( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Forward1Action f1 = new Forward1Action(); //调用另一个action的方法 ActionForward a = f1.doForward(mapping,form,request,response); String s = "from forward3.jsp"; request.setAttribute("from2",s); return a; }}配置文件:<xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config> <data-sources /> <form-beans ></form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="forward1Form" input="/forward1.jsp" path="/forward1" scope="request" type="com.test.struts.action.Forward1Action" parameter="method"> <forward name="ok" path="/forward2.jsp" /> </action> <action input="/forward3.jsp" path="/forward3" type="com.test.struts.action.Forward3Action" parameter="method"> <!--此处配置成要调用的action方法返回的页面,即f1.doForward(mapping,form,request,response)返回的页面--> <forward name="ok" path="/forward2.jsp" /> </action> </action-mappings> <message-resources parameter="com.test.struts.ApplicationResources" /></struts-config>
2023-07-20 18:16:081

java如何传输动态图片(GIF图片)?

请加群java程序设计:2224711
2023-07-20 18:16:185

action 具体是什么东西啊?

2023-07-20 18:16:463

C++VCVB 三种编程语言各个的优点和缺点。

C++VCVB 三种编程语言各个的优点和缺点。 C++是从C发展而来,继承了C的特性又加了类(既面向对象)的高级语言特点; 而VC和VB是编译器并不是语言; C语言:结构化程序,编程语言中比较早,而且方便使用的语言; C++:在C上发展而来,支持多种范式变成,其中包括:结构化,抽象数据类型模型,面向对象编程,泛型编程; VC:一个编程的工具而已,适合用它开发windows程序; VB:这个采用VB语言的一个编程工具,图像处理方面有优势; JAVA:也是多范式编程语言,但表达能力比C++弱的多,主打跨平台。 Delphi这种编程语言与别的编程语言的优点和缺点,以及他在编程语言中的地位 优点: 编程太苦太难了,啥办法能轻松写意一些? "这里,给大家介绍一个优秀编程软件―Delphi。 Delphi是Borland公司推出的可视化开发平台 Delphi的妙处在于它易学易用而又功能强大,在许多地方无论是初学编程者还是专业程序员都钟情于它,因为它使编程工作变得轻松愉快、充满趣味。 只要你会摆弄鼠标,就能用Delphi来创作自己的应用程序。 Delphi的代码是用Pascal语言编写的。 但初学Delphi并不需要太多Pascal语言的语法知识。 因为在学习过程中,可以把"帮助"中提供的例子修修补补,实现自己期望的功能。 缺点: Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦 地位: 据说是当今世界上最优秀的W indows开发工具 它可以创建任何一个Windows应用程序。 求问xbox one和PS4各个的优点和缺点 价格一样的 PS4优点就是性能强一些,亚洲区玩家数量很多,目前出的独占质量非常高,还有很多游戏公司重点跟索尼合作而带来的福利,而且游戏折扣较为频繁,均价便宜一些 缺点的话,PSN会员要贵一些,而且每个月送的游戏质量比起XBOX ONE差一点 手柄可能不是那么的给力,较XB1来说,但也已经非常舒服了 XBOX 优点首要就是体感了,非常给力 而且有独自的EA ACCESS会员,一年花一个游戏的钱可以玩EA十几个大作,战地4啊硬仗啊泰坦陨落等等,新作发售半年也会登录会员 XBOX手柄总体感觉比PS4舒服些,尤其是FPS游戏 网络上微软也要好一点 缺点的话,XBOX游戏画质比PS4弱那么一点,当然除非死死盯着找差别不然根本是没什么感觉的,亚洲区微软玩家少些,联机搜起来就没索尼那么快 机器别买国行,受限很多不给力 请问个位大哥CC++VCVBJANA编程有什么不同,作为软件开发的初学者因该学哪种编程语言????? c:结构化程序 c++:支持多种范式变成,其中包括:结构化,抽象数据类型模型,面向对象编程,泛型编程. VC:他是个编程的工具而已,适合用它开发windows程序. VB:这个采用VB语言的一个编程工具. JAVA:也是多范式编程语言,但表达能力比C++弱的多.它鼓吹什么跨平台...我晕... struts1与struts2的各个的优点和缺点.谁能说下 类: u2022 Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 u2022 Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。 线程模式: u2022 Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 u2022 Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) Servlet 依赖: u2022 Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 u2022 Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测性: u2022 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。 u2022 Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入: u2022 Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 u2022 Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。 表达式语言: u2022 Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 u2022 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 绑定值到页面(view): u2022 Struts 1使用标准JSP机制把对象绑定到页面中来访问。 u2022 Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换: u2022 Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 u2022 Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验: u2022 Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 u2022 Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 Action执行的控制: u2022 Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 u2022 Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。 —————————————————————————————————— 个人觉得Struts1是基于servlet开发,Struts2是基于Filter开发,相对于现在的企业来说Struts1的技术成熟,便于维护,而且现在的许多程序员使用SSH框架时,还是多选用struts1来开发~~ 当然Struts2安全性比Struts1要高~~ 魅族M8和HTC G8,性价比,各个的优点和缺点 最大的不同就是系统与屏幕,g8的安卓系统是时下热门,拥有丰富的第三方软件,而m8的winCE只有一些民间制作的软件够是绝对够用了,但值得一提的是,m8现在可以刷安卓与winCE双系统但多多少少还有些问题;至于屏幕,很明显,m8远远优于g8,如果说系统是m8的硬伤,那g8的硬伤莫过于屏幕了! 常用编程语言问题!?优点缺点! 2009年2月TIOBE编程语言排行榜发布,与去年同期相比,Java和C仍然位列第一、第二,C++由第五位上升为第三位,把VB、PHP挤到了第四、第五,C#由第8位升到了第6位。经过08逐决前三甲已被Java、C、C++牢牢占据。 --------------------- 排名 语言 百分比 --------------------- 1 Java 19.401% 2 C 15.837% 3 C++ 9.633% 4 (Visual) Basic 8.843% 5 PHP 8.779% 6 C# 5.062% 7 Python 4.567% 8 Per 4.117% 9 Delphi 3.624% 10 JavaScript 3.540% 请问C(C++)语言的优点和缺点? 其实编程思想是相通的,不管你用哪一门语言 C语言的易读性比较好,在测试的时候如果出了问题一般来说测试员比较容易找出来。 C++是在C语言的基础上发展起来的,它的功能更强大一点 C,C++, JAVA 和 RUBY四种编程语言的优缺点? C 是面向过程的。C++是面向对象的,但是完全包含了c的内容。java是纯面向对象的。ruby是面向对象的脚本语言(前三种是编程语言)。所谓面向对象就是涉及到了类的概念。
2023-07-20 18:16:531

ssh是如何实现三层架构的? 每层分别用什么技术实现?

ssh 现三层架构,和每层使用的技术如下:1.Struts应用在表示层,它是基于MVC的WEB应用框架。Strutts提供了中央控制器(ActionServlet)和应用控制器(Action)。ActionServlet是Struts框架的核心,采用的是前端控制模式;Action则负责完成对服务的调用,对ActionServlet接受并分发下来请求进行处理。可以重写ActionServlet,也可以直接使用,然后继承Action,使其完成我们要求的功能。有了Struts提供的控制器,再运用JSTL标签、Struts标签库中的标签配以JSP或HTML文件,就是Struts中的视图。另外,用于视图与控制器之间表单数据传输的ActionFormBean,也被归于到了视图中。Struts并没有定义模型层的具体实现。一般情况下,Action中所使用的服务是由业务层提供的。Struts中还有不可缺少的配置文件。该配置文件描述了用户请求路径和Action映射关系的信息。ActionServlet通过解析此配置文件得知需把用户的请求发往哪一个Action。2.Hibernate是一种映射的工具,完全着眼于关系数据库的对象——关系映射,管理对象到数据库的映射,提供数据查询和获取数据的方法。在持久层中,不仅可以使用Hibernate进行映射,还可以使用iBATIS进行SQL语句与对象之间的映射,此外,也可以直接使用JDBC对数据库进行操作。至于使用那一种工具实现持久化,可以根据自己的需求视情况而定。而Hibernate映射是否复杂取决于领域对象的关系是否复杂。3.Spring贯穿于WEB应用中,它为我们管理对象提供了方便,降低了层与层之间的耦合度,将程序员从繁琐的事务、安全和分布式处理中解放出来,从而把更多的精力放在业务上。如果应用程序才用了Struts+Hibernate的架构,Spring可以帮助整合两者。在创建对象时,可以通过Spring进行注入;对于事务管理,可以通过Spring集成声明式事务管理到到应用程序中等。
2023-07-20 18:17:021

option怎么传值到ActionForm里

用AJAX来完成<select name="fname" onchange="func();" onclick="func()"> <option>--请选择--</option> <option>橘子</option> <option>香蕉</option> <option>苹果</option> </select>
2023-07-20 18:17:091

struts1和struts2的区别

一个单线层,一个多线层!
2023-07-20 18:17:175

Multibox 有什么用

html:check标签生成一个checkbox,property属性类型应为boolean。这里的value值可以是true,yes或on。如果您要提交其它的值(如某种形式的标识)应该考虑使用html:multibox标签。注意:为了正确的处理没有选中的checkbox您必须在reset()中设置对应的属性为false。用法示例:<html:checkbox name="checkboxForm" property="one">One</html:checkbox><html:checkbox name="checkboxForm" property="one" value="One" />如果选中后被提交则相应的属性的值为true。html:multibox标签生成多个checkbox,property属性类型应为数组。当您要使用大量的checkbox时使用这个标签非常方便,可以使您避免在ActionForm中声明大量的boolean类型的变量,带之以一个数组就行了。注意:为了正确的处理没有选中的checkbox您必须在reset()中设置数组的长度为0。用法示例:<html:multibox name="multiboxForm" property="selectedItems" value="00001"/><html:multibox name="multiboxForm" property="selectedItems" >00002</html:multibox><logic:iterate id="person" name="multiboxForm" property="persons"> <html:multibox property="selectedItems"> <bean:write name="person" property="id"/> </html:multibox> <bean:write name="person" property="name"/> </logic:iterate>
2023-07-20 18:17:322

C++中初始值设定项太多是怎么回事?急求各位老师解答!谢谢!

const int N=9; //这里定义了数组大小为9,但是数组里有10个元素int a[N]={300,46,78,109,21,70,26,290,166,8};t=b[k];b[k]=b[k+1];t=b[k+1]; //这个地方算法不对,应该是b[k+1]=t;扩展资料:对表操作过程中,当对一个数据字段对象不赋值,为null时,系统自动将该字段或对象的默认值属性设定的值赋予字段。字段的默认值是在数据结构定义中设置。在被引用的控件对象中也可以定义。默认值,有时也叫缺省值。。<html:checkbox property=”checkbox1” value=”true" >。property对应的actionForm中属性必须为boolean类型。当value为true时候,选中的时候值为true,当value为false时候,选中的时候值为false.property。注意必须在ActionForm中的reset()方法将其复位,否则其后无法使用参考资料来源:百度百科-默认值显示
2023-07-20 18:17:411

J2EE和SSH是什么关系?他们有什么联系?谢谢

2023-07-20 18:18:056

structs1和structs2的区别是什么?

struts1与struts2本质区别 :1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和 HttpServletResponse,从而给开发者更多灵活的选择。4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。5 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts 2直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。6 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。7 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。8 类型转换的对比:Struts 1 ActionForm 属性通常都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。9 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。10 Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
2023-07-20 18:18:381

eclipse actionform cannot to be resolved to a type 怎么解决?

三种可能:(1)jdk不匹配(或不存在)(2)jar包缺失或冲突(3)eclipse查找项目类型策略所致 你是新导的工程,那么很可能是jdk或者sdk版本问题。右键工程,属性,配置下里面的项目。
2023-07-20 18:18:451

struts1与struts2可以结合使用吗,怎么结合?

可以
2023-07-20 18:18:532

在c#中如何把图片上传到oralce的blob字段?

这是我自己写的一个ORACLE的图片上传,这里用到了一个apache的一个组件,fileupload,你自己在网上下载吧,很方便用的。import java.io.InputStream;import java.io.OutputStream;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;import oracle.sql.BLOB;import org.apache.struts.upload.FormFile;import org.apache.struts.upload.MultipartRequestHandler;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;/** * @author Lenovo-User * */public class UploadFileAction extends Action { /* (non-Javadoc) * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @SuppressWarnings("deprecation") @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub UploadFileForm fForm = (UploadFileForm)form; DataSource ds = this.getDataSource(request); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); //PersonBean pb = (PersonBean)request.getSession().getAttribute(Constants.PERSON_KEY); String strId = request.getParameter("id"); int id = 0; if(strId != null) id = Integer.parseInt(strId); ResultSet rs = stmt.executeQuery("select * from user_account where id=" + id + " for update"); rs.next(); oracle.sql.BLOB blob = (BLOB) rs.getBlob(4); OutputStream out = blob.getBinaryOutputStream(); int bufferSize = blob.getBufferSize(); InputStream in = fForm.getMyFile().getInputStream(); byte bytes[] = new byte[bufferSize]; while(in.read(bytes) != -1 ) { out.write(bytes, 0, bufferSize); } in.close(); out.flush();//后来添加的 out.close(); rs.close(); stmt.close(); conn.commit();//后来添加的!必须要提交,不管是不是数据库是不是自动 提交 conn.close(); return mapping.findForward("success"); }}不懂的可以问我
2023-07-20 18:19:091

dispatchAction 执行2次问题

你是不是 jsp里面<html:image onclick="xxxx"这么写的? image自动提交的
2023-07-20 18:19:172

javax.servlet.ServletException: BeanUtils.populate

You get this message when Struts is unable to map the data in the HTML form to the properties in your ActionForm bean. Make sure each of the properties on your bean is either a String or a boolean. Do you have any properties of type java.util.Date or other objects? That might cause this error. Also check to see that you have public getters and setter for each of your properties.
2023-07-20 18:19:241

编写一个用户登陆程序,有Login.jsp输入用户名、密码

public org.apache.struts.action.ActionForward perform(org.apache.struts.action.ActionMapping actionMapping, org.apache.struts.action.ActionForm actionForm, javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) { org.apache.struts.action.ActionErrors errors = new ActionErrors(); com.cargo.crotrol.AdminForm adminForm = (com.cargo.crotrol.AdminForm)actionForm; com.cargo.model.Admin admin = adminForm.getAdmin(); java.lang.String id = getServlet().getServletConfig().getInitParameter("id"); java.lang.String password = getServlet().getServletConfig().getInitParameter("password"); if (!admin.getId().equals(id.trim()) || !admin.getPassword().equals(password.trim())) { errors.add("org.apache.struts.action.GLOBAL_ERROR", new ActionError("error.logon.fail")); saveErrors(httpServletRequest, errors); } if (!errors.empty()) { return new ActionForward(actionMapping.getInput()); } else { javax.servlet.http.HttpSession session = httpServletRequest.getSession(); session.setAttribute("id", admin.getId()); return actionMapping.findForward("success"); } }可以参考一下这个 这个是在struts 里写的
2023-07-20 18:19:321

谁能给我说下 Action Bean 、Action、ActionForm 三者关系 区别

Action 是处理事物的,ActionForm 是封装表单提交数据的
2023-07-20 18:19:523

如何使用Validator框架

  Validator框架是一个独立的Validation Framework,目前在Struts1.1中可以一起打包下载。作为Apache Commom的一个OpenSource,它可以和Struts一起结合使用,也可以和其他非Web应用中使用。前段时间利用Eclipse3.02 + MyEclipse3.8.4结合Xdoclet开发了一个EJB + Struts的Web应用,发现采用这些工具开发效率还是比较高的。MyEclipse通过xdoclet生成CMP ejb的时候会自动创建对应的Value Object类,结合struts框架时,可以把这Value Object结合Struts中的Form采用Composite模式,采用委托的方式来实现ActionForm。这些在Eclipse IDE中实现非常快速。但也存在一些问题,当JSP页面中的FORM中的数据通过Struts中的Form进入到对应的Value Object之前需要进行数据合法性校验,而这种校验在一个企业级Web应用中会存在大量的重复冗余代码,造成大量的重复工作和维护的工作量。  Validator是一个独立于表现和业务逻辑的一个FrameWork,它通过预定义一组校验规则以及提供了一套简单的扩展机制,让程序员可以自由的定义自己复杂的校验规则。规则与规则可以是相互依赖的,也可以是独立的。  下面使用一个登录的例子简单谈谈如何让Validator框架与Struts框架进行整合,从而把数据校验独立出来,使得大部分的校验规则得到重用,并且使得校验方法可配置化和易于维护。  1、准备配置文件  这里要用到两个xml文件,validator-rules.xml和validation.xml,前者用于定义校验器,在validator框架中已经预定义了十几个常用的校验器的实现;后者用于定义和Struts框架中具体的Form相关联的各个字段的校验,这两个文件放置在/WEB-INF/目录下面。  2、准备Struts的Form和Action  定义一个Form,这个Form从ValidatorFrom继承而来(缺省从ActionForm继承),具体的代码如下:  //Created by MyEclipse Struts  // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl  package com.test.struts.form;  import javax.servlet.http.HttpServletRequest;  import org.apache.struts.action.ActionMapping;  import org.apache.struts.validator.ValidatorForm;  /**  * MyEclipse Struts  * Creation date: 06-19-2005  *  * XDoclet definition:  * @struts:form name="logonForm"  */  public class LogonForm extends ValidatorForm {  private String memberID;  private String password;    /**  * Method reset  * @param mapping  * @param request  */  public void reset(ActionMapping mapping, HttpServletRequest request) {  memberID = null;  password = null;  }  /**  * @return Returns the memberID.  */  public String getMemberID() {  return memberID;  }  /**  * @param memberID The memberID to set.  */  public void setMemberID(String memberID) {  this.memberID = memberID;  }  /**  * @return Returns the password.  */  public String getPassword() {  return password;  }  /**  * @param password The password to set.  */  public void setPassword(String password) {  this.password = password;  }  }  定义一个Action,具体的代码如下所示:  //Created by MyEclipse Struts  // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl  package com.test.struts.action;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import org.apache.struts.action.Action;  import org.apache.struts.action.ActionForm;  import org.apache.struts.action.ActionForward;  import org.apache.struts.action.ActionMapping;  import com.test.struts.form.LogonForm;  /**  * MyEclipse Struts  * Creation date: 06-19-2005  *  * XDoclet definition:  * @struts:action path="/logon" name="logonForm" input="/jsp/logon.jsp" scope="request" validate="true"  */  public class LogonAction extends Action {    /**  * Method execute  * @param mapping  * @param form  * @param request  * @param response  * @return ActionForward  */  public ActionForward execute(  ActionMapping mapping,  ActionForm form,  HttpServletRequest request,  HttpServletResponse response) {  LogonForm logonForm = (LogonForm) form;    return mapping.findForward("success");  }  }  FormBean和Action在struts-config.xml中的配置如下所示:  <form-beans >  <form-bean name="logonForm" type="com.test.struts.form.LogonForm" /> </form-beans>  <action-mappings >  <action  attribute="logonForm"  input="/jsp/logon.jsp"  name="logonForm"  path="/logon"  scope="request"  validate="true"  type="com.test.struts.action.LogonAction">  <forward name="success" path="/jsp/success.jsp"/>  </action>  </action-mappings>  注意:在<action>元素中的validate属性必需设置为true。  3、配置validator-rules.xml和validation.xml文件  validator-rules.xml用于配置校验器,这个文件基本上可以重用。validation.xml用于配置与具体的Form Bean有关的校验配置。  validator-rules.xml  <form-validation>  <global>  <validator name="required"  classname="org.apache.struts.validator.FieldChecks"  method="validateRequired"  methodParams="java.lang.Object,  org.apache.commons.validator.ValidatorAction,  org.apache.commons.validator.Field,  org.apache.struts.action.ActionErrors,  javax.servlet.http.HttpServletRequest"  msg="errors.required">  ......  </global>  </form-validation>    Validation.xml  <form-validation>  <!-- ========== Default Language Form Definitions ===================== -->  <formset>  <form name="logonForm">  <field property="memberID"  depends="required,short, minlength,maxlength">  <arg0 key="prompt.memberID"/>  <arg1 key="${var:minlength}" name="minlength"  resource="false"/>  <arg2 key="${var:maxlength}" name="maxlength"  resource="false"/>  <var>  <var-name>maxlength</var-name>  <var-value>16</var-value>  </var>  <var>  <var-name>minlength</var-name>  <var-value>3</var-value>  </var>  </field>  <field property="password"  depends="required, minlength,maxlength">  <arg0 key="prompt.password"/>  <arg1 key="${var:minlength}" name="minlength"  resource="false"/>  <arg2 key="${var:maxlength}" name="maxlength"  resource="false"/>  <var>  <var-name>maxlength</var-name>  <var-value>16</var-value>  </var>  <var>  <var-name>minlength</var-name>  <var-value>3</var-value>  </var>  </field>  </form>  </formset>  </form-validation>  4、定义资源文件ApplicationResources.properties  首先,资源文件必须要在struts-config.xml文件中进行定义:  <message-resources parameter="com.test.struts.ApplicationResources" />  下面是资源文件中的内容,它主要关联到:  validator-rules.xml文件中<validator>元素中的msg属性;  validation.xml中field元素中作为参数传递给validator框架的arg0 -- arg3。  # Resources for parameter "com.test.struts.ApplicationResources"  # Project P/ValidatorWeb  errors.header=<span class="error-header1">Errors:</span><br><span class="error-header2">You must correct the following error(s) before processing.</span><ul>  errors.footer=</ul>  errors.prefix=<li><span class="error-text">  errors.suffix=</span></li>  prompt.memberID=Member ID  prompt.password=Password  prompt.test=test  # Standard error messages for validator framework checks  errors.required={0} is required.  errors.minlength={0} cannot be less than {1} characters.  errors.maxlength={0} cannot be greater than {2} characters.  errors.invalid={0} is invalid.  errors.byte={0} must be an byte.  errors.short={0} must be an short.  errors.integer={0} must be an integer.  errors.long={0} must be an long.  errors.float={0} must be an float.  errors.double={0} must be an double.  errors.date={0} is not a date.  errors.range={0} is not in the range {1} through {2}.  errors.creditcard={0} is not a valid credit card number.  errors.email={0} is an invalid e-mail address.  5、在struts-config.xml中配置validator  必须在struts-config.xml中以plugin的方式指定validator的配置资源,这样,web应用在能够根据这些配置把各种校验器等资源加载到内存中。  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />  </plug-in>  6、在相关的JSP文件中通过Struts框架中的html标签制订相应的属性值  <html:javascript dynamicJavascript="true"  formName="logonForm"  staticJavascript="false"/>  这个标签用于在具体的jsp生成的客户端html页面中生成一段对应的javascript代码。  <html:form action="/logon" focus="memberID"  onsubmit="return validateLogonForm(this);">  </html:form>  用于当用户点击<html:form>中的submit按钮时,会执行相应的检查,如果检查没有通过,则不回去调用Action中的execute方法。
2023-07-20 18:20:021

载入出厂预设值是什么

载入出厂预设值意思就是恢复出厂设置。1、制作一张DOS启动盘,只含三个最基本的DOS启动文件即可,将AMI BIOS刷新工具和BIOS文件拷贝到这张软盘上,使用此软盘开引导系统,注意不要加载emm386.exe,qemm.exe,himem.sys等内存驻留程序。2、在DOS提示符下键入“AMIFLASH *.ROM”,按“ENTER”键继续。html:checkbox:1.<html:checkbox property=”checkbox1” value=”true" >。property对应的actionForm中属性必须为boolean类型。2.程序中使用了struts的<html:checkbox></html:checkbox>标签,但是该标签没有checked属性,如果要在页面加载时使其默认选中可在该标签的后面加一个与该标签具有相同property属性的。<html:hidden></html:hidden>标签,并设置其value="true",注意checkbox标签的value属性应写为value="",既不能不写也不能写为true或false。
2023-07-20 18:20:091

pojo类和vo类分别是什么

pojo是用来映射数据库的类vo是用与在各个层之间传递值的
2023-07-20 18:20:244

JQuery中$("#actionForm").formSerialize()报错:对象不支持"formSerialize"属性或方法。怎么回事?

$("#actionForm").Serialize()这样写
2023-07-20 18:20:373

Struts2开发中的 No result defined for action 错误

对,是找不到Action
2023-07-20 18:20:464

jsp中怎样我才可以绕过javascript验证,把错误数据提交的数据库中呢!

看jsp或者HTML,把里面的JS全部删除就好了 一般有什么onclick="xxx()"的删除,上面的function也删除
2023-07-20 18:20:532

myeclipse 怎么建立Action

你对项目导入struts框架,然后点击项目,在指定文件夹中右键新建,如果没有,就点others,在里面找,能建的基本上都在那里。
2023-07-20 18:21:032

Structs框架

Structs框架结构采用MVC设计模式,同时包含客户端(client),请求以及业务逻辑处理(Business Logic),而MVC模式主要由模型(Model)、视图(View)和控制器(controller)三部分组成。 一方面可以通过浏览器发送Http请求,另一方面把Http响应的消息在浏览器上展示出来。 包括ActionServlet类和RequestProcessor类。ActionServlet是MVC实现的控制器部分,是整个框架的核心,它用来接收用户的请求,根据用户的请求从模型中获取用户所需的数据,然后选择合适的视图来响应用户的请求。 请求的处理通过RequestProcessor类来实现。 Servlet在接收请求后会根据配置文件中对应的关系,把请求转给指定的Action类来处理,Action采用适配器设计模式,只是对业务进行包装,真正的业务逻辑是由EJB的session bean或普通的Java类来实现。 模型分为两个部分: 1.系统的内部状态。通常由一组Actionform Bean表示,ActionForm封装了Http请求的数据的类和对象,它是一个抽象类,每一个输入表单表示它的一个子类,配置文件structs-config.xml中保存了Http的请求表单与具体的ActionForm类的映射关系。 2.可以改变的操作(业务逻辑)。 就是一个Jsp文件,没有业务逻辑的处理,也不保存系统的状态信息,通过一系列标签把数据以浏览器能识别的方式展现出来。 标签有:Bean Tags、Html tags等等等。 在Structs框架中,控制器主要是ActionServlet,但是对业务逻辑处理的操作主要由Action、ActionMapping、ActionForward等组件协调完成,Action是控制逻辑的实现者,ActionMapping和ActionForward指定了不同业务逻辑或流程的运行方向。 在使用structs框架的web应用启动时,会初始化ActionServlet,并从structs-config.xml配置文件中读取配置信息,并把他们存放到ActionMappings对象中,当ActionServlet接收到一个请求时,会执行如下流程: 1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。 2.如果ActionForm不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。 3.根据配置信息决定是否需要表单验证。如果需要,就调用ActionForm的validate(). 4.如果ActionForm的validate()返回的是null或返回一个不包含ActionMessage的ActionErrors对象,则说明表单验证成功。 如果返回是一个或多个ActionMessage的ActionErrors对象,则表面验证失败,此时,ActionServlet将直接把请求转发给包含客户提交表单的JSP组件,在这种情况下,不会再创建Action对象并调用excute()。 5.Actionservlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果对应的Action对象不存在,就创建一个实例,然后调用Action的excute()。 6.Action的excute()返回的是一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP文件。 7.ActionForward对象指向的JSP组件生成动态页面,返回给客户。
2023-07-20 18:21:101

java导出excel

试试Apache的poi
2023-07-20 18:21:194

java中的action是什么,DAO又是什么?

先把架构搞清楚你就知道了 action service dao
2023-07-20 18:21:406