Struts1
- 格式:doc
- 大小:219.00 KB
- 文档页数:6
struts1和strtus2的区别1、Action类Struts 1的Action类扩展一个抽象基类。
在Struts 1是一个常见的问题抽象类而不是接口编程。
Struts 2的行动可能实现一个Action接口,连同其他接口,使可选和定制的服务。
Struts 2中提供了一个基础ActionSupport类实现常用的接口。
虽然,Action接口不是必需的。
任何的POJO对象与一个执行签名可以用作Struts 2的Action对象。
2、线程模型Struts 1的动作是单身,必须是线程安全的,因为只会有一个类的一个实例来处理所有的请求,该行动。
的单身战略名额限制什么可以做Struts 1的操作和发展,需要格外小心。
Action 资源必须是线程安全的或同步的。
在Struts 2 Action对象为每一个请求实例化,因此没有线程安全问题。
(在实践中,servlet 容器会产生许多被丢弃的对象,每个请求,以及一个新的对象并没有对性能上的损失或影响垃圾收集)。
3、Servlet的依赖Struts 1的操作的servlet API的依赖,因为HttpServletRequest和HttpServletResponse被传递给execute方法的调用时采取行动。
Struts 2的动作没有连接到容器中。
最经常使用的servlet上下文被表示为简单的地图,让行动单独测试。
Struts 2的动作仍然可以访问原始的请求和响应,如果需要的话。
然而,其他建筑元素减少或消除的,需要访问HttpServetRequest直接或HttpServletResponse的。
4、可测性测试Struts 1行动的主要障碍是execute方法暴露了Servlet API。
一个第三方扩展中,Struts TestCase中,提供了一组Struts 1的模拟对象。
Struts 2的动作可以测试通过实例的操作,设置属性和调用方法。
依赖注入的支持也使测试更简单。
struts1与struts2的区别Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。
作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用、功能齐全的标签库(Tag Library)、开放源代码。
但是,正所谓“没有最好,只有更好”,Struts1.x自身也有不少的缺点:需要编写的代码过多,容易引起“类爆炸”、单元测试困难。
这些缺点随着Web的发展越来越明显。
这就促生了Struts 2,它的诞生能很好的解决上述问题。
在本文中,笔者将对Struts2和Struts1.x这两种框架进行详细的比较。
比较将涉及到这两种框架的Action、验证、类型转换及如何开发等方面的内容。
希望通过这样的比较,让读者了解这两种框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。
本文的内容基于Struts2.0.6。
一、引言Struts的第一个版本是在2001年5月份发布的。
它的最初设想是通过结合JSP和Servlet,使Web应用的视图和业务/应用逻辑得以清晰地分离开来。
在Struts之前,最常见的做法是在JSP中加入业务和应用逻辑,或者在Servlet中通过println()来生成视图。
自从第一版发布以来,Struts实际上已成为业界公认的Web应用标准。
它的炙手可热也为自己带来了改进和变更,所以不但要跟上对Web应用框架不断变化的需求,而且要与日渐增多竞争激烈的众多框架的特性相融合。
到最后,产生了几个下一代Struts的解决方案。
其中两个最受瞩目的方案是Shale和Struts Ti。
Shale是一个基于构件的框架,并在最近成为Apache的顶级项目。
而Struts Ti则是在Struts的成功经验基础上继续坚持对前端控制器(Front Controller)和MVC(model-view-controller)模式进行改进。
搭建SSH框架:Struts1.* + Spring2.5 + Hibernate3.0 一,项目结构:图(1)Jsp页面省略,主要是一些添删改查的页面;二,开始搭建项目环境,步骤如下:使用平台:MyEclipse6.0/6.5框架版本:Struts1.* + Spring2.5 + Hibernate3.0;1,添加过程:1>,新建项目: 打开MyEclipse,在Package Explorer视图下,右键单击New-> Web Project;注意:在新建项目时,JDK的版本最好要选择Java EE 5.0;因为版本过低,可能有些JSP方面的功能不支持;新建玩项目之后,把该导的包导入到下面,下图为SS H 框架所需要的Jar包,注意,该项目用的是ORACLE数据库;其中,activation与mail这两个包为Java发邮件的包;classes12为Oracle数据库的驱动包,如果不是Oracle数据库,可更换该Jar包;dwe为Ajax dwr 框架中的包;2>,接着就开始用MyEclipse辅助开发Struts,Spring,Hibernate了;3>,首先MyEclipse辅助开发Struts,方法:右键单击你所建的项目,出现一级菜单,选择Myeclipse,选择Myeclipse之后会出现二级菜单,接着选择Add Struts Capabilities;;接着具体操作如下面图示:点击Finish按钮完成;完成之后,可将包删除;在上图中,如果那个勾没有去掉的话,就会自动生产如下标签:当然,如果你觉得标签对你没什么用的话,可以删除;如果该勾去掉的话,就只生成标签,这是Struts的核心标签;4>,MyEclipse辅助开发Spring,方法跟上面的一样,选择Add Spring apabilities;;接着具体操作如下面图示:然后点击Next,具体操作如下图:接着点击 Finish按钮,完成此项操作;5>,,最后MyEclipse辅助开发Hibernate,在执行和上面类似方法之前,Hibernate 需要先做另外一件事情,那就是和数据建立连接,具体操作如下图:点击上图位置的或者右边的>> ,然后再选择MyEclipse Database Explorer切换到如下图页面:,然后右键单击,新建一个Database Driver;如下图:下面这个截图是该项目的数据库链接图:如图所示,测试数据库链接成功;然后可直接点击Finish完成;接着切换到窗口,按照上面第三小步的方法,选择Add Hibernate apabilities;;接着具体操作如下面图示:点击下一步:点击下一步:点击下一步:点击下一步:点击 Finish 完成;6>,最后一步,就是运用Hibernate的映射机制,把数据库的表与JAVA的对形成一个关系映射;在此之前,首先应该在项目SRC的目录下面新建一个包,如该项目所示,用来存放映射生成的POJO对象以及映射文件;如下图:有一点说一下,你生成的*.hbm.xml文件可能不止一个,对,你可以把它们整合到一个文件中;然后新建按第五小步的方法,把窗口切换到MyEclipse Database Explorer界面,然后打开右键刚才所建立的链接,选择属于你自己的用户;然后选择Tble;右键选择如上图的属性:接下来的操作如下图:点击 Next,进入下一步:点击 Next,进入下一步:至此,项目环境己经搭建完成;三,项目搭建完成,SSH各个部分配置文件的说明,以及它们之间存在的关系:1,首先是Struts的核心配置文件,即struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><!—建立Form表单,在此处进行登记 -→<form-bean name="userForm"type="erForm" /> </form-beans><global-exceptions /><global-forwards /><!—各个Action对应与之相对应的表单 -→<action-mappings><!-- 用户管理 --><action parameter="opers" attribute="userForm" name="userForm"path="/doUser" scope="request"><forward name="login_ok" path="/welcome.jsp"></forward><forward name="login_no" path="/index.jsp"></forward> </action></action-mappings><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProc essor"></controller><message-resourcesparameter="ermanagerview.struts.ApplicationResources"> </message-resources><!—Spring辅助Struts管理Struts-→<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/action-servlet.xml" /></plug-in></struts-config>2,其次就是Springd的applicationContext.xml文件和action-servlet.xml文件:applicationContext.xml文件:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd"><!-- Session 工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"value="classpath:hibernate.cfg.xml"><!-- 可以不要配置文件(hibernate.cfg.xml),直接写在这个Spring的配置文件中 --></property></bean><!-- 模板 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 事务器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManage r"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 对外代理 --><!-- 1,用户管理 --><bean id="userDaoImp"class="erDaoImp"><property name="hibernateTemplate" ref="hibernateTemplate" /> </bean><bean id="userServiceTarget"class="erServiceImp"> <property name="userdao"><ref local="userDaoImp" /></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean"><property name="transactionManager"><ref local="transactionManager" /></property><property name="target"><ref local="userServiceTarget" /></property><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean></beans>action-servlet.xml文件:<!—Spring辅助Struts管理Struts-<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean name="/doUser"class="erAction"scope="prototype"></bean></beans>3,最后就是Hibernate的hibernate.cfg..xml文件:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">wangxiaodong</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.2:1521:ALIZEEDB</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="myeclipse.connection.profile">Test</property><property name="connection.password">donny</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mappingresource="com/ygkq/usermanager/model/entity/User.hbm.xml" /></session-factory></hibernate-configuration>该文件基本上不用动,都是自动生成的代码;当然,你也可以根据自己的需要添加代码,例如,你想在执行HQL语句的时候让它显示SQL语句,可将<property name="hibernate.show_sql">true</property>插入代码中;另外在图(1)中还有两个配置文件没有提到,那就是log4j.properties 与mytag.tld;其中log4j.properties是配置日志信息的;而mytag.tld主一个自定义标签;四,SSH框架搭建完成:SSH框架基本搭建完成,如果有不对或者不妥之处,请随时指教!~E-mail:jerry8059@。
Struts1与struts2的区别总结1,背景:Struts2并不是struts1的升级版,两者没有太大的关系,struts2是继承了webwork的机制,吸收了struts2和webwork的有优势。
Struts2是基于WebWork的一个全新框架. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet.然后在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试. Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.2,Action类Struts1要求action继承一个抽象基类,而struts2既可以继承类又可以实现action对应的接口,即接口编程,可以实现多个接口,使得可选和订制服务成为可能。
3,线程模式Struts1中的action是单例模式,会涉及到线程安全问题,因为仅有一个action来处理所有的请求,而struts2则是非单例模式,每个请求对应一个action,这样就不用考虑线程安全的问题(而且,servlet容器会给每个请求产生可丢弃的对象,这样就不会导致性能和垃圾回收问题)。
4,可测性Struts1中的action有个主要的问题是execute方法暴露了servlet API,这使得测试等需要依赖servlet容器。
一个第三方扩展--struts TestCase--提供了一套struts模拟对象来进行测试;而struts2 中的action可以通过初始化和设置属性(例如action当中直接用get和set方法),调用方法来测试,“依赖式注入”注入也使得测试更容易5,servlet依赖Struts1中的action依赖于servlet API,因为当一个action被调用时,HttpServletRequest和HttpServletResponse对象会被传递给execute方法(请求和响应的对象需要依赖于execute方法,即servlet API);而struts2中的action则不需要依赖于servlet容器,允许action脱离容器单独被测试(例如:struts2中获取请求的对象可以用ServletActionContext.getRequest())。
1.什么是Struts1基于MVC的轻量级,WEB应用框架2.struts1工作原理a> 初始化: struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.b> 发送请求: 用户提交表单或通过URL向WEB服务器提供请求,请求的数据用HTTP协议传给WEB服务器.c> form填充: Struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中d> 派发请求: 控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给Action的excute()方法e> 处理业务: Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象.服务器通过ActionForward对象进行转发工作f> 返回响应: Action将业务处理的不同结果返回一个目标相应对象给总控制器g> 查找响应: 总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面h> 响应用户: 目标响应对象将结果传递给资源对象,将结果展现给用户struts1原理图:3.开发指南准备工作:1>到/下载struts的安装文件struts-1.3.10-all.zip2>解压struts-1.3.10-all.zip3>创建一个web project,并将上步中解压的lib文件下的jar包引进去4>配置web文件5>新建struts-config.xml6>创建数据库(mysql4. 项目开发4.1 页面制作index.jsp4.2 在struts-config.xml中需要修改4.3 创建com.javakc.struts1.action.StudentAction 业务类4.4 创建com.javakc.struts1.action.StudentForm类1)继承org.apache.struts.action.ActionForm类2)属性名要和表单中的属性名一一对应,并生成其对应的getter、setter方法4.5 在StudentAction中处理提交的请求1) 通过form表单或超链接可以将用户的请求提交到服务器进行处理,在系统架构中,服务器处理用户请求的场地就是StudentAction类的execute方法.4.6 在student_info.jsp中展示数据。
01struts基础J2EE1.4ServletJspJDBCJTA(Java Transaction API)JPA(Java persistence API)---EJBJavaMailJSTLEJBJNDIModel_1的执行流程Mode2_2的执行流程Struts框架的版本Struts充当表现层的作用。
Struts框架的核心组件ActionServlet总控制器。
核心组件,用于将具体的请求分配到各自处理的Action组件中。
Action具体的业务处理过程组件ActionFrom(FormBean)获取表单参数,并将参数封装到Bean中。
ActionForward用来Action的请求转发ActionMapping帮助控制器[ActionServlet]将请求映射到操作类[Action]Struts-config.xml用来配置Stuts组件的关联关系。
Struts框架的工作流程Struts-config.xml<form-bean name="loginForm" type="com.softfz.login.LoginForm" />name:用来表示actionform的名称type:用来表示actionform的类路径<actionattribute="loginForm" name="loginForm"path="/loginAction" scope="request"type="com.softfz.login.LoginActionAction" validate="true"input="/index.jsp" />attribute:表示ActionFrom的实例放到作用域中的名称.LoginForm aa = new LoginForm();aa.setUsername(request.getParameter("username"));aa.setPassword(request.getParameter("password"));request.setAttribute("attribute的值",aa);name:表示Action和ActionFrom关联的名称。
struts1 advice用法
Struts 1 是一个用于构建基于 Java 的 Web 应用程序的开源框架。
它提供了一种模型-视图-控制器(MVC)的体系结构,以帮助开发人员更好地组织和管理他们的应用程序。
在 Struts 1 中,"Advice" 是一个概念,用于执行在控制器处理请求前或处理请求后执行的一些操作。
Advice可以用来实现日志记录、安全性检查、性能监控等功能。
在 Struts 1 中,Advice 通常是通过拦截器(Interceptor)来实现的。
拦截器是一种在请求处理过程中拦截并执行额外逻辑的机制。
通过配置拦截器,可以在请求处理的不同阶段执行Advice。
例如,可以在请求处理前执行一些预处理逻辑,或者在请求处理后执行一些后处理逻辑。
要在 Struts 1 中使用Advice,首先需要定义一个拦截器,然后将其配置到 Struts 1 的配置文件中。
在配置文件中,可以指定拦截器在请求处理的不同阶段执行的具体逻辑。
例如,可以指定在执行 Action 前后执行的 Advice。
通过这种方式,可以实现诸如日志记录、权限验证、异常处理等功能。
总之,Struts 1 中的 Advice 通过拦截器实现,在请求处理的不同阶段执行额外的逻辑,可以用来实现日志记录、安全性检查、性能监控等功能。
通过合理配置拦截器,可以灵活地实现各种Advice,从而更好地管理和组织应用程序的逻辑。
学习struts1.3配置环境(日,学什么都要配置环境)1.首先先建一个web工程,名字随便的2.然后进行导包(找到包再导进去,是struts的包才好)3.对配置文件进行配置,貌似应该是没有配置文件的,要先创建,创建在WEB-INF目录下,和web.xml放在一个目录,名字的话可以随便3.先对struts-confing.xml进行简单的配置吧(前面说了,名字随便取无所谓的,但这是一个标准吧,大家都这么取的),内容如下4.还没搭建完,还要对web.xml进行配置写一个简单的例子(第一次接触struts,个人感觉不简单 1.建立ActionFrom 2.建立Action 3.页面访问)1.开发FROM建立一个类,继承ActionFrom注册,修改配置文件struts-config.xml,即加一个<form-bean>标签就行了2.开发Action建立一个类,继承Action覆盖excute方法需要强制转换(即转成与jsp页面对应的form)调用其他模块跳转(根据关键字,关键字参照该Action中forward标签中的name属性)注册,修改配置文件struts-confing.xml,也就是配置<action>标签(并写出可以forward跳转的页面,上面的action只能跳转到forward里配置的页面)对应的jsp页面LoginSuccess和LoginFailure没什么用,只是为了显示,Login页面有一个要注意的地方,就是那个form变迁的action属性就是要跳转到那个action去,那个action必须是struts-confing.xml的<action-mappings>里面的<action>有配置才行,看上面的action就配了一个Login,至于后面那个.do的话是在web.xml里面有配置的,切记切记,个人理解为要在web.xml里面配置了才能访问action模型strutsForm请求页面ActionServlet处理Action Servlet业务代码数据库无论是否成功都要给人家返回一个结果这是为了给客户一个良好的体返回的页面jsp,html 之类的成功失败Action1.Action什么时候初始化?发出该Action请求时,不是在读取配置初始化时2.每个Action只会初始化一次3.Action是线程不安全的,因为所有的请求会共享一个Action实例4.怎样实现Action的安全性编程A.注意不要用实例变量或者类变量共享只是针对某个请求的数据B.注意资源操作的同步性应用:统计一个Action的访问数据,只要定义一个类变量,再++即可Action中的Mapping来自配置文件中的Action元素,代表着控制器的请求信息String name=mapping.getName();//获取配置文件中<action-mappings>元素中的<action>的一个属性,即nameString path=mapping.getPath();//获取配置文件中<action-mappings>元素中的<action>的一个属性,即pathString type=mapping.getType();//获取配置文件中<action-mappings>元素中的<action>的一个属性,即type,可用于反射String type=mapping.findForwards();//获取配置文件中<action-mappings>元素中的<forward>属性,获取全部forward的nameActionForward froward=mapping.findForward(“指定名字(即forward标签里配置的name)”);ActionForwardActionForward有个Redirect属性,可以设置false或者trueFalse,no--------RequestDispatcher forward 只能跳转到当前应用的页面,不设置也可以True,yes--------HttpServletResponse sendRedirect 可以跳转到应用外的页面,必须设置ActionForm工作原理处理ActionForm的一般步骤:A.检查Action的映射,确定Action中已经配置了对ActionForm的映射B.根据name属性,查找form bean的配置信息C.检查Action的form bean的使用范围,确定在此范围下(request,session),是否有此form bean实例D.假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,请慎用E.否则,就重新构建一个form bean的实例(调用构造方法),并且保存在一定作用范围F.Form bean的reset()方法被调用G.调用对应的setter方法,对状态属性赋值H.如果validate的属性设置为true那么就调用form bean的validate()方法I.如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action 实例的execute()方法并执行J.注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖由页面向Action发出请求查找Action,看Action是否有name属性查找,根据name和scope Scope getAttribute(name)Scope 是struts-config.xml中的Action标签的一个属性,表示作用范围(个人理解是否就是Action实例化存在的域),默认值为session, 是否找到没找到就实例化一个Scope setAttribute(name,form)和查找Action类似,看一下有没有可用的form bean有就直接调用该form bean的reset方法,没有就创建一个,并保存在一定作用范围找到Action的实例就跳过实例化一个Action 的步骤取值,从客户端参数,request.getParameter()获取用户提交的数据和赋值是否需要校验validate校验是否校验成功校验成功,发送请求到Action 校验失败错误页面监听器在struts里面还有监听器,监听器要继承你要监听的东西如下面代码上面代码继承两个域的属性监听,当然要让监听器生效,还要对web.xml配置文件进行配置,web经常需要配置配置文件在上面web.xml里面接近结尾处加了一个listener标签,这是让listener运行的关键,很明显,框架的作用这时候就体现出来了,只要你写好代码再配置一下文件,框架就会帮你自动运行,而不用你操心手动在Action里获取ActionForm对象在一个Action的excute方法里添加这个方法,然后获取form,再与excute传进去的那个form 是否一致,值得注意的是那个Attribute是你设置的form的名字服务端校验在对应的Form覆盖validate方法即可一般情况下校验都是开着的,而为什么就算数据错误都会不报错呢,那是继承ActionForm 接口的同时也继承了ActionForm的validate(校验)方法,而ActionForm的validate方法是没有返回值的,在没有覆盖父类的validate方法之前,默认的validate是来自父类的validate 方法如何关闭校验呢上面的绿色的字已经大概解析了,下面再发一个图片演示一下配置文件简介作用:使ActionServlet,ActionMapping,Action,ActionForm这几个不同层次的组件相互协调工作。
*编写环境:*开发工具:Myeclipse6.01*SPRING :spring2.0*STRUTS :struts1.2*HIBERNATE:hibernate3.0*JDK: 1.6*TOMCAT: 6.0*WINDOW641.新建web项目。
2.选中新建项目,右键--》选择“myeclipse”--》添加Struts支持。
3.在弹出的信息框,有必要修改一下图中的地方。
4.上面的操作完成之后,打开我们的项目我们可以看到我们的项目结构发生了变化,引入了一些struts标签和生成了struts-config.xml配置文件。
5.开始添加spring支持,同样选中新建项目,右键--》选择“myeclipse”--》“添加spring 支持”,在弹出的信息框,做如下内容修改:6.点击“next”,直接选择默认,当然也可根据自己的规则做修改。
7.在添加“Hibernate”支持的时候,首先做的工作是创建一个数据源。
这个创建方法有很多中(找百度可得)这里只介绍一种:打开你的myeclipse的右上角的小三角,选择“myeclipsedatabase explorer”在弹出的界面中,在如图位置右键“new”在弹出的界面中做如下修改:修改完成后点击“test driver”成功则继续。
8.暂时回到myeclipse开发界面。
正式开始添加“Hibernate”支持。
在弹出的界面中做如图修改:点击“next”这里如图,选择spring的配置文件。
下一步操作后,做如下图修改操作:下一步之后,界面修改操作,如下图:去掉复选框中的选项,然后点击“finish”完成整个操作。
之后将会直接打开spring的配置文件,然后你核对一下您的数据库连接是否正确。
至此三大支持操作完成,启动没有问题说明框架雏形已经完成。
9.在项目中的WEB-INF下找到web.xml,做如下修改:格式头部分省略,下面是需要新增的代码<!--初始化spring配置参数 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 配置监听 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</list ener-class></listener><!-- 配置spring过滤器解决中文乱码问题 --><filter>Ps :这个时候我们再次启动服务的时候,发现可能会报错:因为我们在刚才已经把spring 的配置文件做了初始化,而在spring 的配置文件中有数据源的连接,而我们的项目中可能还缺少一个包:commons-pool-1.4.jar(/detail/u013806366/7897665 )当我们把这个包放在lib 下,我们再次启动项目的时候,错误信息应该会消失。
1.<Data-sources>:用来配置数据源,连接数据库。
<data-source>:具体是数据库连接。
Type:type="org.apache.dbcp.BasicDataSource" Struts中连接数据库的类。
<set-property>:此标签中配置具体的链接内容。
如:<set-property property="driverClassName" value="com.mysql.jdbc.Driver" /> 数据库驱动<set-property property="url" value="jdbc:mysql://localhost:3306/exam" />数据库地址。
<set-property property="username" value="root" />数据库登录名。
<set-property property="password" value="root" />数据库密码。
<set-property property="autoCommit" value="true" />自动提交。
<set-property property="maxActive" value="10" />最大连接数。
<set-property property="maxWait" value="5000" />最大等待数。
<set-property property="defaultAutoCommit" value="false" />默认自动提交。
Struts学习笔记Struts现在有struts 1.X跟struts 2版本为什么使用struts?●建立在MVC这种公认的好的模式上的,Struts在M、V、C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,有MVC的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;●开源项目,得到了包括它的发明者Craig R.McClanahan在内的一些程序大师和高手持续而细心的呵护并且经受了实战的检验,使其功能越来越强大,体系也日臻完善;●其他技术和框架具有很好的整合性。
如与Spring,Hibernate等框架的整合;●大大提高了开发速度。
框架概念(Framework)人们用于解决相同或者相似类型问题的方案。
特点:可重用性,可扩展性,可收缩性.基于请求响应模式的应用Framework的逻辑结构:控制器,业务逻辑层,数据逻辑层Struts的概念和体系结构Struts是Apache组织的一个开源项目。
主要是采用Servlet和JSP技术来实现的。
Struts是一个基于Sun Java EE平台的MVC框架,它采用MVC模式,将MVC模式“分离显示逻辑和业务逻辑”的能力发挥得淋漓尽致struts工作流程:1.当服务器启动web应用时,会读取web.xml文件,根据actionServlet的配置会启动这个servlet,创建这个实例时默认会读取web-inf下面的strus-config.xml文件,如果没有这个文件系统会报错启动失败,如果这个配置文件有语法错误,也会启动失败2.当客户端提交一个以.do为结尾的请求,应用会将这个请求交给actionServlet处理如果没有一个action元素的path属性与这个请求的路径相同,就会报No action config found for the specified url.3.如果找到了对应的action元素,那么如果请求带有表单,就会查找action的name属性如果name属性没有配置,会报错:Form bean not specified on mapping for action: "/loginAction"如果name属性有配置,根据这个属性值找form-bean元素,将创建这个bean,将请求的参数设置到这个bean中如果这个action配置了validate属性,那么就会对这个form-bean进行验证验证失败,直接返回input属性指定资源如果验证成功,就会根据type属性找到这个属性对应的类的实例(如果没找着,会创建),然后调用execute方法4.根据这个execute方法返回的forward的path属性打开对应的资源下载安装Struts文件,里面有JAR包(lib)、源码(src)、例子(apps)、文档(docs)等。
实践步骤:搭建环境、建立ActionForm、建立Action、页面访问。
搭建Struts环境:准备:因为项目要频繁用到一些JAR包,所以我们可以把一些常用的JAR包放到一个库里面Preferences—>Java—>Build Path—>User Libraries—>New—>填上库名称—>OK—>选中刚刚建立的库名称—>Add JARs—>添加JAR文件—>打开—>【如果想看到源文件则选中JAR文件点前面的小三角,在下面选择Source attachment,双击弹出窗口,如果你的文件是压缩文件则选择External File,如果你的文件在文件夹里则选择External Folder,找到之后OK此时源文件就进来了】—>OK1.建立一个动态项目File—>New—>Dynamic Web Project2.导入之前准备环节做的库文件项目名右击—>Build Path—>Libraries—>Add Library—>User Library—>在库名称前面打勾—>Finish—>OK3.为了不要把一些JAR文件复制到WEB/LIB目录下,我们可以做如下操作项目名右击—> Preferences—>Deployment Assembly—>Add—>Java Build Path Entries —>Next—>选择之前建的库文件—>Finish—>OK4.配置web.xml因为ActionServlet是一个标准的Servlet所以我们要在web.xml里面去配置它该Servlet用于拦截所有的HTTP请求。
因此,应将该Servlet配置成自启动Servlet,即为该Servlet配置load-on-startup属性<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>5.建立并配置struts-config.xml文件<?xml version="1.0"encoding="utf-8"?><!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""/dtds/struts-config_1_3.dtd"><struts-config><form-beans><form-bean name=" " type=" "></form-bean></form-beans><action-mappings><action path=" " type=" " name=" " validate=" " parameter=" " input=" "></action> </action-mappings></struts-config>每一个actionForm类,要有一个form-bean元素配置它,这个form-bean元素最后是在execute方法中的form参数,这个元素是告诉struts如何创建这个bean,name属性指定所创建的bean引用名称,type属性指定要创建的bean的类全名称每一个action类,有一个action元素与它相对应,这个action元素的配置会被框架封装到mapping中,path属性决定了使用什么路径来访问这个action,name属性是指定与这个action关联的表单名称,它引用的是form-bean元素的name属性,type属性指定处理这个请求的action类的全名称经过上面五步,Struts的环境就已经搭建好了。
下面我们来写一个注册页面,页面中只包含两个表单域:userName和userPwd。
首先来建立一个ActionForm用户注册JSP页面建立ActionForm配置ActionForm ,必须包含ActionForm 类才行。
Struts 要求ActionForm 必须继承Struts 的基类: org.apache.struts.action.ActionFormo ActionForm 的实现非常简单,该类只是一个普通的JavaBean,只要为每个属性提供对应的setter 和getter 方法即可。
根据前面的讲解,ActionForm 用于封装用户的请求参数,而请求参数是通过JSP 页面的表单域传递过来的。
因此应保证ActionForm 的参数与表单域的名字相同。
页面中每一个form表单,在Struts框架中应该有一个对应的ActionForm子类这个子类的每个属性与表单中的每个输入元素的property属性值相同这个子类应该是一个标准的javaBeanActionForm的配置所有的ActionForm 都被配置在struts-config.xml 文件中,该文件包括了一个form-beans 的元素,该元素内定义了所有的ActionForm,每个ActionForm 对应一个form-bean 元素。
需要继承org.apache.struts.action.ActionForm为了定义LoginForm. 必须在struts-config.xml文件中的<form-beans>中增加如下代码:<form-beans><form-bean name="loginForm"type="com.jason.form.LoginForm"></form-bean></form-beans>建立Actionexetute方法是每一个请求进来后,就会调用这个方法一次参数mapping是封装了strutus-config.xml文件中的action元素的配置form是mapping中name属性相关联的表单对象,封装了用户提交的表单参数如果用户没有提交表单,这个form就是null,如果有的话就要将form转成对应的类型需要继承org.apache.struts.action.Action并覆盖execute方法Action 的配置Action 需要配置如下几个方面。