第6章 Struts 2的其他应用
- 格式:ppt
- 大小:1.39 MB
- 文档页数:24
1.strust2框架来历简介:WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。
(同时也是一个成熟的基于Web的MVC框架)MVC:Model View Controller,model是模型,view是视图,controller是控制器,是一种框架模式。
随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同2.web项目中的三层架构(和MVC是俩个完全不同的架构)1.表示层(Struts2框架就是工作在这个地方)2.业务逻辑层(service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断)3.数据访问层(dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用)在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package 中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码。
注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.3.使用struts2框架的好处(为什么要使用struts2框架)减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.4.struts2框架引入到web项目中首先使用Eclipse/MyEclipse中建一个web项目.1.把struts2相关jar包引入到项目中。
第八章Struts2的综合应用目标进一步熟悉Struts2的各个技术要点能自己动手完成一个Struts2的简单应用8.1 使用MYSQL 建立一张数据库表这里我们使用图形界面的sql 工具SQLyog 生成数据库表。
图8.1如图所示,我们在脚本区域就是红色方框所在的位置输入我们的Sql 语句,接着在红圈的位置按下“>>”,我们就能生成我们想要的表。
图8.2如图所示我们在test 数据库下生成了一张表user,在下面的红色方框中我们可以很清生成的表user楚的看到有3个字段,其中主键为“id ”,还有2个字段为“username ”,“password ”。
8.2 建立项目总框架为了使业务逻辑和控制分离,我们使用了MVC 的设计模式。
框架图如下:图8.3相应的我们把项目的架构先搭建好,如图所示图8.4 在我用红圈标出的地方,我们可以看到有3个文件夹web,model,dao ,我们把action 放在web 下,把数据模型放在model 下,把和数据库交互的类放在dao 下,这样做层次清晰,可以使编码工作变得有据可循。
下图为例子。
图8.5接着我们可以看到这里有个以“I”开头的文件,他是干什么用的呢,其实他是一个接口,对接口编程可以使我们的代码更为健壮。
下面的章节我们会详细解释这种技术。
8.3 实施项目编码在我们搭好的框架中我们将会一步一步的实现一个用户管理系统。
主要的作用是对数据库表user进行增删改查。
首先我们要建立数据库的连接,以及数据库表模型。
接着我们建立对数据库的连接逻辑变化的时候只需改实现类的方法,而不必去管其他调用的地方。
第2步就是建立jsp页面,先看我们页面。
图8.5我们的userList.jsp如下图8.6在视图层建立完毕之后,我们需要建立几个action来控制跳转和转业务逻辑的实现。
在web目录下我们建立了user.action。
代码如下:IUserDAO类型的一个实例,但是真正的类别却是UserDAO,应此dao.delete()调用的就是UserDAO下的方法。
Struts2框架的介绍和应用一、简介Struts2框架是一个基于MVC模式的Java web应用程序框架,它能够帮助开发人员有效地管理和组织大规模、复杂的web应用程序。
它提供了一系列的工具和技术,使得开发人员能够快速地构建完整可用的web应用程序。
二、历史Struts2框架最初是由Apache软件基金会的Jakarta项目组开发的。
它源于Struts1框架,因为Struts1框架在开发人员自由度和灵活性方面存在限制。
Struts2框架开发了许多新特性和改进,使其比Struts1更具有可扩展性、更易于使用,更适合于构建大规模的web应用程序。
三、架构Struts2框架采用MVC模式,即Model-View-Controller模式,分为以下三个层次:3.1 Model 层Model层用于将数据从数据库等存储区域提取出来,然后传递给View层进行显示。
Struts2框架中,Model层的数据可以是一个Java对象或一个POJO。
3.2 View 层View层将从Model层传递来的数据显示给用户,它可以采用JSP、HTML、XML等技术来展现数据。
3.3 Controller 层Controller层作为Model层和View层之间的中介,调度这两层的工作,处理用户的请求并将处理结果返回给View层。
四、优点4.1 易于扩展Struts2框架采用模块化的设计思路,在不同的模块之间,通过配置文件、注解等方式进行交互,方便扩展和维护。
4.2 易于使用Struts2框架提供了丰富的标签库和功能模块,使得开发人员可以快速地构建完整的web应用程序,降低了使用门槛。
4.3 基于MVC模式Struts2框架采用了MVC模式,将业务逻辑、数据处理、UI展示等功能分开,使得程序结构清晰,易于管理和维护。
五、应用Struts2框架广泛应用于Java web应用程序的开发,特别是在大型项目中使用。
以下是Struts2框架的一些主要应用场景:5.1 企业级应用程序Struts2框架能够较好地管理和组织大型的企业级应用程序,可以帮助开发人员高效地开发复杂的应用。
简单的Struts2应用1 struts2应用开发的一般步骤①创建web工程。
②根据需求导入相应功能相应版本的开发包。
③编写jsp视图文件。
④编写action控制类文件⑤编写struts2的配置文件struts.xml文件。
⑥在web.xml文件中加入struts2框架MVC启动配置。
⑦部署web工程,发布测试。
2 一个简单的struts2应用该应用实现思路如下:在index.jsp文件中输入用户名和密码,如果账户和密码是admin 和1234,则显示登录成功,显示欢迎页面welcome.jsp,否则登录失败跳转到index.jsp页面。
具体的步骤如下:(1) 新建一个名为chapter05-1的web工程,如图1所示。
图1建立的项目结构图(2) 将Struts2所依赖的jar添加到/WEB-INF/lib文件夹下导入该工程,如果不能自动加载到项目路径中去,可以按步骤手动将开发包加到项目路径中去,如图5.8所示。
图2 加载后的开发包情况(3) 编写登陆ActionStruts2是用来实现登陆功能的Web项目。
新建LoginAction类,继承com.opensymphony.xwork2.ActionSupport类。
源代码如下:package com.zjf.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{private static final long serialVersionUID = 1L;private String username; //登陆账号private String password; //登录密码/***username属性的getter方法**/public String getUsername() {return username;}/***username属性的setter方法**/public void setUsername(String username) {ername = username;}/***password属性的getter方法**/public String getPassword() {return password;}/***password属性的setter方法**/public void setPassword(String password) {this.password = password;}public String execute(){if("admin".equals(username) && "1234".equals(password)){return "success";}return "fail";}}LoginAction中有两个属性username和password,分别代表JSP表单里的账号和密码。
Struts2框架的原理和应用1. 什么是Struts2框架Struts2是一个基于Java EE的开源Web应用框架,是Struts框架的升级版。
它通过MVC设计模式实现了Web应用开发的分层,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰、易于维护。
2. Struts2框架的原理Struts2框架的原理主要包括以下几个关键点:MVC设计模式Struts2采用了MVC(Model-View-Controller)设计模式,其中:•模型(Model):负责管理应用程序的数据和业务逻辑。
•视图(View):负责显示数据给用户。
•控制器(Controller):负责处理用户输入、调用模型和视图等。
核心组件Struts2框架包含以下核心组件:•拦截器(Interceptor):负责在请求前后进行统一处理,可以用来进行身份验证、日志记录等操作。
•动作(Action):负责处理用户请求,包括接收请求参数、调用业务逻辑方法等。
•结果(Result):负责生成并返回视图,可以是JSP、Freemarker、JSON等。
•值栈(ValueStack):用于存储Action处理过程中的数据,支持OGNL表达式读取和赋值操作。
•配置文件(struts.xml):用于配置拦截器、动作、结果等,实现URL与处理类之间的映射关系。
工作流程Struts2框架的工作流程如下:1.客户端发送请求到Struts2框架的前端控制器(例如:DispatcherFilter)。
2.前端控制器根据请求的URL找到对应的处理类(Action)。
3.前端控制器将请求参数、上下文信息等传递给Action,同时执行拦截器的前置处理逻辑。
4.Action处理用户请求,并根据业务逻辑生成相应的结果。
5.前端控制器将结果传递给结果组件,选择合适的视图进行渲染。
6.前端控制器将渲染后的视图返回给客户端。
3. Struts2框架的应用Struts2框架在Web应用开发中具有广泛的应用,以下是一些主要的应用场景:1. 构建Web应用程序Struts2框架提供了许多构建Web应用程序的工具和技术,包括表单验证、国际化、文件上传等功能。
Struts2配置 (1)Action接受请求参数 (6)拦截器 (10)OGNL表达式 (16)输入校验 (22)文件上传下载 (26)Struts2配置1、Struts2框架配置文件Struts2框架按照如下顺序加载struts2配置default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面struts-default.xml 该文件保存在 struts2-core-2.3.7.jarstruts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jarstruts.xml 该文件是web应用默认的struts配置文件struts.properties 该文件是Struts的默认配置文件web.xml 该文件是Web应用的配置文件如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值2、Struts2常量配置∙指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker 、velocity的输出<constant name="struts.i18n.encoding" value="UTF-8"/>∙该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开<constant name="struts.action.extension" value="action"/>∙设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭<constant name="struts.serve.static.browserCache"value="false"/>∙当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开<constant name="struts.configuration.xml.reload" value="true"/>∙开发模式下使用,这样可以打印出更详细的错误信息<constant name="struts.devMode" value="true" />∙默认的视图主题<constant name="struts.ui.theme" value="simple" />∙与spring集成时,指定由spring负责action对象的创建<constant name="struts.objectFactory" value="spring" />∙该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。
Struts2介绍1、 Struts2工作原理Struts2请求响应流程:在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller、ActionProxy、ActionMapping、Configuration Manager、ActionInvocation、Inerceptor、Action、Result等。
下面我们来具体看看这些组件有什么联系,它们之间是怎样在一起工作的。
(1)客户端(Client)向Action发用一个请求(Request)(2) Container通过web.xml映射请求,并获得控制器(Controller)的名字(3)容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。
在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter(4)控制器(Controller)通过ActionMapper获得Action的信息(5)控制器(Controller)调用ActionProxy(6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
(7) ActionProxy把request请求传递给ActionInvocation(8) ActionInvocation依次调用action和interceptor(9)根据action的配置信息,产生result(10) Result信息返回给ActionInvocation(11)产生一个HttpServletResponse响应(12)产生的响应行为发送给客服端。
工作原理在Struts2框架中的处理大概分为以下几个步骤1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 接着FilterDispatcher(StrutsPrepareAndExcuteFilter),2.1前用FilterDispatcher后面版本用StrutsPrepareAndExcuteFilter,被调用,FilterDispatcher(StrutsPrepareAndExcuteFilter)根据ActionMapper来决定这个请是否需要调用某个Action4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5 ActionProxy通过Configuration Manager查询框架的配置文件,找到需要调用的Action类6 ActionProxy创建一个ActionInvocation的实例。
一、表单标签_checkbox复选框如果集合为list<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>生成如下html代码:<input type="checkbox"name="list"value="Java" checked="checked"/><label>Java</label><input type="checkbox"name="list"value=".Net" checked="checked"/><label>.Net</label><input type="checkbox"name="list" value="RoR"/><label>RoR</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label>************************************************ *****<br>如果集合为MAP<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="{1,2,3}"/>生成如下html代码:<input type="checkbox"name="map"value="1" checked="checked"/><label>瑜珈用品</label><input type="checkbox"name="map"value="2" checked="checked"/><label>户外用品</label><input type="checkbox"name="map"value="3" checked="checked"/><label>球类</label><input type="checkbox"name="map"value="4"/><label>自行车</label>******************************************************<br>如果集合里存放的是javabean(id和name为Person的属性)<%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%><s:checkboxlist name="beans"list="#request.persons"listKey="id"listValue="name"/>生成如下html代码:<input type="checkbox"name=“beans" value="1"/><label>第一个</label><input type="checkbox"name=“beans" value="2"/><label>第二个</label>************************************************ ******<br>表单标签_radio单选框<a href="radio.jsp">测试</a><br>表单标签_select单选框<a href="select.jsp">测试</a>代码运行结果如下:----------------------------------------------------------------------------------------------------------------------------二、表单标签_radio下拉选择框如果集合里存放的是javabean(id和name为Person的属性) <%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%>< s:radio name="beans" list="#request.persons" listKey="id"listValue="name"/> 生成如下html代码:<input type="radio"name="beans"id="beans1" value="1"/><label>第一个</label><input type="radio"name="beans"id="beans2" value="2"/><label>第二个</label>************************************************ **************<br>该标签的使用和checkboxlist复选框相同。