Struts简单笔记
Struts笔记
Struts2Struts2 (1)1 1、环境搭建 (2)2 2、Struts中的action (2)2.1 2.1、访问不同的方法 (3)2.2 2.2、一些常量的配置 (4)2.3 2.4、参数的传递 (4)3 3、OGNL (5)3.1 3.1、OGNL基础 (5)3.2 3.2、ValueStack (7)3.3 3.3、Struts2的常用标签 (8)4 4、Struts2的其他知识 (9)4.1 4.1、ModelDriven (9)4.2 4.2、类型转换 (9)4.3 4.3、文件上传 (11)4.4 4.4、拦截器 (11)4.5 4.5、国际化(I18N) (13)4.6 4.6、struts2的常用标签 (14)1 1、环境搭建1、导入相应的jar包(可以参考blank项目)2、设置web.xml开启struts2的过滤器4、编写struts.xml文件(在类路径中创建struts.xml)特别注意以上的extends中的值应该是struts-default。
2 2、Struts中的actionStruts2中的Action是一个纯java对象默认的action会执行execute方法2.1 2.1、访问不同的方法1、可以为action设置多个method,之后在struts.xml文件中配置这些action所对应的方法2、只是写一个action,通过一些特殊的方法来进行访问以上操作问题是:需要为不同的方法设定不同的返回值。
这个名称不好统一3、使用通配符的方式在开发中一般都使用通配符的方式(这样可以大大减少action的配置)2.2 2.2、一些常量的配置可以通过<constant>标签来设置一些常量的配置,这些常量可以通过struts的jar包来查询2.3 2.4、参数的传递1、对于servlet而言传递参数是通过request或session等Servlet作用域进行传递的2、对于struts2而言,传递参数非常简单方式一3、3方式二方式三(使用Servlet API)一般不推荐使用3、在action中接受参数只要定义相应的属性,会自动完成传值。
Struts1学习笔记总结
Struts1学习笔记总结
Struts1 (1)
Struts1和Servlet的关系 (1)
创建第一个Struts1项目 (1)
例子1: (3)
总结重点:struts1的工作流程(基于MVC模式的) (7)
ActionForm和VO的区别:
一样的内容,不一样的作用
ActionForm只接收前台表单传来的数据
VO是conga后台提取的数据向前台传递
创建第一个Struts1项目
新建一个web项目,选择1.4即可
右键----MyEclipse----Add Struts Capacity
---------------Struts控制文件的路径
一.普通的Servlet的工作流程 (7)
二.Structs1的工作流程(和上面的对比记忆) (8)StFra bibliotekuts标签 (9)
Bean标签 (9)
html标签 (10)
logic标签(逻辑标记) (12)
i18n(国际化) (13)
Struts1
Struts1和Servlet的关系
Jsp+Servlet+Javabean
TLD(标签)
1)
2):显示信息
3):逻辑标签
struts-config.xml
Struts笔记
Struts概念4、struts是一个开源的框架1、为什么有Struts?2、Struts的好处为什么是Web层框架Struts原理手写一个Struts//定义属性【这里有一个规范:就是我们定义属性的时候,//应该和jsp页面的控件属性一样。
如果有人提出疑问:说表单的属性名是不是一定和控件名一样?//只要保证set 和get 方法与属性名存在关联】4.Action5.Filter处理中文乱码public class MyFilter1 extends HttpServlet implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubarg0.setCharacterEncoding("utf-8");//设置接受的编码arg2.doFilter(arg0, arg1);//}public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub}}<!-- 配置过滤器 --><filter><filter-name>MyFilter1</filter-name><filter-class>com.mhy.filters.MyFilter1</filter-class> </filter><filter-mapping><filter-name>MyFilter1</filter-name><url-pattern>/*</url-pattern></filter-mapping>使用工具开发struts完全使用工具开发5.创建表单截图创建ActionMysqlJava EE 中三种标签标签的选择Struts jstl标签技术为什么有?Jstl标签的好处常用标签引入标签<% taglib %>Java EE 5 Libraries->jstl-1.2.jar->META-INF->c.tld案例讲解c标签c:out标签<%//这句话本应放在控制器中//如果我们的域对象中有相同的属性名,c:out 优先级是pageContext>request>session>applicationrequest.setAttribute("abc","你好1<a href=''>百度</a>") ;//session.setAttribute("abc","你好2") ;//application.setAttribute("abc","你好3") ;//pageContext.setAttribute("abc","你好4") ;User u=new User();u.setName("马海燕");u.setAge(30);request.setAttribute("user",u);%><c:out value="hello world"></c:out><h1>如何输出request/session/application/pageContext域对象的数据</h1><!-- escapeXml 用于指定按照html样式显示,默认为true【表示文本】false【html样式】 --><c:out value="${abc}" default="没有值" escapeXml="false"></c:out><h1>如何输出对象</h1><c:out value="${}"></c:out> ||<c:out value="${user.age}"></c:out><br/>${} @@ ${user.age*20}c:set 标签<body><c:set var="abc" value="你好!" scope="request"></c:set><%//上面的标签等价于//request.setAttribute("abc","你好!");%><c:out value="${abc}"></c:out></body>c:remove<body><%request.setAttribute("a","你好!中国。
struts1学习笔记
struts1开发学习笔记使用一个简单的例子记录struts1开发过程。
0、 描述主要功能描述:index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。
newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。
ProductAction.java 是处理逻辑的action简单描述流程图:1、 构建环境在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add srutscapapibality ,弹出界面,选择struts1.2支持。
如下图所示:添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件:/WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。
2、 代码编写2)创建工具类Util.java,从数据库连接池中获得连接。
需要两个步骤第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源,第二步:在util类中读取配置获得连接,util.java如下:3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml配置中内容。
EncodingFilter.java的内容如下:4)修改web.xml,指定首页为index.jsp。
文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。
6)index.jsp中提到productAction.action?method=viewAddForm,需要在在配置文件中配置了action的实现类,以及作为上传数据时用来保存数据的form:productForm10)searchProduct.jsp是查询结果界面,代码如下:http://localhost:8080/StrutsTest即可访问。
struts2学习笔记(部分)
1、namespaece(最好用模块的名字命名)Namespace 为空时,用于处理其他package不能处理的全部的action2、Package 用于区分重名的情况3、copy项目的方法及注意事项修改它的启动项引入别人的项目的方法4、action4`1修改文件的默认编码4`2每次访问action都重新new出一个新的对象,不存在同步的问题执行过程4`3Action 继承ActionSupport5、路径:获取系统绝对路径<% String context = request.getContextPath(); %><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>使用绝对路径6、ActionMethod动态调用方法7、ActionWildcard通配符使用通配符,将配置量减到最低约定优于配置8、数值传递ActionAttrParamInputDomainModelDrivenModel过程9、中文问题 2.1.6.的bug不能解决中文问题10、11、value stack值栈< s:property value=“Name”/>取值栈中的数值如:< s:property value=“error”/>< s:property value=“[0]Propertyvalue是一个map,name就是key name is error 就是value 13、访问页面元素访问Stack Context中的元素14、include,模块包含15、认Action (好处:访问不存在时自动跳转带默认页)Default-action-ref默认action引用16、result类型1)默认是dispatcher 常用服务器端跳转2)Rdiect 只能是视图不能是action 客户端跳转,最后显示jsp3)Chain ---forwordaction action前不可以加”/”action之间的跳转,最后显示action4)RedirectAction action跳转,最后显示jsp服务器断的跳转:17、Global_ResultExtends =“要继承的包名“Result name属性:18、取value stack中的值动态绑定的。
[计算机软件及应用]struts笔记
Struts学习笔记xml描述数据本身xsl修饰xmlDOMSAXstup 通过协议骨架远程对象典型的proxy代理struts:学j2ee应该朝domain model,FrameWork,Parttern,架构模式方向发展,才能深入了解掌握。
一、Domain Model领域模型:是对现实世界的对象模型是从现实世界抽取出来的一般是先把领域模型设计出来DDD领域驱动设计不像以前,上来先设计数据库,数据库是面向关系的,而java是面向对象的,先面向关系再面向对象,有点别扭ORM自动的把实例类自动转换成数据表实体对象概念,user就是实体概念,有标识值对象概念,属于实体对象的一部分,不是跟数据库的对应二、Parttern模式遇到什么事情用什么方案解决?1、设计模式,GOF设计模式,对象思维,就是把现实中的实体抽象成对象工厂,策略,代理很重要,掌握了设计模式,就有了对象的概念2、架构模式MVC架构模式3、分析模式RBAC(Roles Base Access Control)基于角色的访问控制,对权限设计的处理模型who谁用这些权限what针对哪些资源设计权限how授权给谁,怎么样授权三、FrameWork 框架框架不是一个成熟的产品,是个半成品,struts spring是给开发人员用的,是基础性的服务,就是提供基础组件,封装的是基础性的服务,才可以在各个行业通用。
是大师级的人物写出来的框架,如果我们不用框架,自己就得先写框架,然后再开发具体业务,那就太费时,用框架,我们就只考虑具体业务设计开发,struts就是一个mvc框架。
领域模型对象表现层-业务层-持久层struts spring hibernate以前:jsp -实体bean现在:jsp -采用DTO 或者VO宜于扩展:OCP,只增加相应的实现类,不用修改以前的类两层的一般是:C/S以前大量的存储都用存储过程,不适合跨平台思想B/S:呈现层,业务层,持久层,数据库层可以把界面交给界面组做业务层交给业务开发做数据库交给数据库开发做分层好处,jsp就是显示用的,不参与业务实现,javabean实现业务,分层可以复用,客户端可以是pc,也可以是手机,只是前端采用不同的html,wml实现,业务层不变JDO有收费的也有开源的,但是开源的不太好hibernate 是开源的,用的比较多springstruts 我们用struts1.2是非常经典的mvc框架webwork分析struts的源代码,深入了解mvc在javaProject下建struts目录切换 workspace 到struts建一个test_servlet项目servlet特性:前面必须有“/”<url-pattern>/servlet/TestServlet</url-pattern><url-pattern>/TestServlet</url-pattern><url-pattern>*.action</url-pattern>敲任意字符.action,如果有*了前面不用加“/”<url-pattern>*.do</url-pattern>敲任意字符.do,如果有*了前面不用加“/”<url-pattern>/servlet/*</url-pattern>servlet/后面跟什么都可以访问servlet充当一个控制的角色,mvc中的c角色配置成*.do,通过request.getRequestURI判断请求的user.do,item.do,与配置文件里配置的参数比较,通过策略模式,派发到相应的servlet类(UserServlet,ItemServlet)servlet根据请求转到对应的manager类处理,然后转到实体类,dao层统称为model层,处理的结果转到jsp页面显示MVC:jsp 充当一个显示的界面mvc中的V(view)servlet mvc中的C(control)业务逻辑层 mvc中的M(Model)structs就是实现mvc面向请求的驱动Struts1.x struts2.x webwork面向事件的驱动M2就是MVC模式drp采用的是M1,业务逻辑和表示逻辑混合,jsp充当的角色太重,不适合多于10人开发M2适合大型项目开发,MVC,jsp(v)+servlet(c)+model(m)分层的概念servlet:接受业务参数,调用model层完成操作,然后转到jsp显示结果UserManager就是一个模型,如果UserManager封装的好哪怕改成swing也可以照用,那样才体现分层的思想实体类:贫血模型,vo,pojo设置模型:UserManager就是模型层的概念,增删改查最主要区别:M1没有分层M2是细粒度分层M1适合小型项目开发M2适合大型项目开发M model ,业务逻辑view jsp,显示层,呈现层UI Layercontroller servletswing:也是分层概念,mvc观察者模式tree,model通过浏览器访问某一个servlet接受参数,把参数组织打包,形成用户对象,调用model层处理完成后,返回给servlet层,servlet传递给jsp视图层,返回给浏览器,那样用户可以看到结果。
struts笔记
ActionForm编程:为Form表单里面的每一个字段创建getter/setter方法。
此外还有一个validate方法用于验证表单数据的格式等的正确性,reset方法用于将数据还原默认值。
V alidate方法返回的是ActionErrors对象,如果返回的是null,或者不包含任何ActionMessage 对象,表示没有错误,验证通过。
如果ActionErrors中包含ActionMessage对象,表示验证错误。
如:errors.add(“…”,new ActionMessage(“…”))配置ActionForm<form-bean name=”” type=”” /><action path=”” type=””scope=”request/session” name=”必须是前面定义过的formbean名”validate=”true/false” input=””><forward name=”” path=”” /><forward name=”” path=”” /></action>访问ActionForm(1)使用struts的HTML标签库<html:form>标签可以和ActionForm交互,读取ActionForm的属性值,把它们赋值给表单中对应的字段。
12章(2)从request或session范围内取出ActionForm实例struts把ActionForm实例保存在HttpServletRequest或HttpSession中,保存时采用的属性key 为<form-bean>元素的name属性。
(3)在Action类的execute()方法中直接访问ActionForm动态ActionForm由于Form的变动,ActionForm也要跟着变动,使得开发变得紧耦合,因此提出动态ActionForm的概念。
struts2学习笔记
1.包头的设置name是struts的包,与Java的包名效果类似,但不是按项目中SRC中包名设置的。
namescape是该包的命名空间。
将作为访问该报Action的路径的一部分。
默认命名空间为namescape=””;假设form 表单提交给helloworld的action ,其action=”/test/helloworld”exctends是表示该包继承的其他包struts_default是任何包都必须继承的包。
否则无法使用struts的核心功能,比如参数上传到action,文件上传,数据校验等。
abstract=”true”定义为抽象包,不得包含Action。
2.action的查找顺序(1)寻找namespace为path1/path2/path3/的包,有这个包:寻找test的Action有这个action:执行没有这个action:寻找namespace为””的命名空间(默认命名空间)是否有这action,没有的话提示找不到action没有这个包:寻找namespace为path1/path2/的包重复(1)步骤。
3.action的默认属性4.Action中各种result的转发类型dispatcher(默认类型)redirect(重定向)redirectAction (重定向到新的Action)plainText (显示原始文件内容)result转发还可包含参数,该参数取自Action中的属性。
例:<action name=”login” class=”xxxx.xxx.xxx.sdsds”><result name=”sucess”> /aaa.jsp?username=${ssss}</result></action>其中ssss是login这个Action中所必须具有的属性redirect书写格式1.<result name=”sucess” type=”redirectAction”>login</result>该写法只能访问位于同一包中的Action;2. <result name=”sucess” type=”redirectAction”><parma name=”actionname”>login</parama><parma name=”namespace”>/xxxxx</parama></result>该写法可访问位于其他包的ActionplainText书写格式1.<result type=”plainText”>/login.jsp</result>2. <result type=” plainText”><parma name=”location”>/login.jsp</parama><parma name=”charSet”>UTF-8</parama></result>全局转发只能在包内定义全局转发。
Struts1_个人整理笔记
目标:熟练运用当前流行的java开源框架:Struts、Hibernate以及Spring来构建灵活、易于扩展的多层Web应用程序。
C/S:以数据库为中心B/S:多层架构才是真正的目的B/S多层架构将显示、业务运算、数据库等功能完全分离,杜绝彼此的耦合与影响,从而实现松耦合和良好的可维护性。
✧呈现层(UI Layer/Presentation Layer)⏹Struts✧业务逻辑层(Business Layer)⏹Spring✧持久化层(Persistence Layer)⏹HibernateC/S两层模式,每个客户端需要安装软件,但C/S做的界面灵活性比较好。
何谓两层模式,因为很多业务逻辑都放到了前端(界面里都混了很多业务逻辑),另一方面数据库里有很多存储过程或触发器。
业务逻辑都用存储过程来实现,这是一个弊端Java就不会把业务逻辑放在存储过程里,一般将业务逻辑封装在中间件(java)中。
当然java 有时也会将业务逻辑放在存储过程里,这是从性能上来考虑,因为放在存储过程里,性能肯定会高一些。
B/S 三层模式,客户端通过浏览器来访问,不需要安装软件。
分层就来了,分层带来的影响就是粒度变细了,耦合度变低,复用度就提高了,扩展性能也好了,维护性也好了。
切换工作区间 file-switch Workspace WebRoot-New-other select a wizard MyEclipse-web-JSP(Basic templates)基本模板在Servlet中拿jsp页面的值,使用getParamter()在jsp页面中拿servlet值,使用getAttribute()当在web客户端发送请求时(点击submit),将请求传到web server(tomcat),tomcat负责找到你要请求的servlet(此处为TestServlet),此时servlet做什么呢,首先String userName = req.getParameter("userName");得到表单数据(通过http Request),然后UserManager userManager = new UserManager();调用业务逻辑,当然,业务逻辑方法将表单的值返回給servlet,返回查询结果后,servlet将结果设置到Request里面req.setAttribute("otherList", userList); 把userList设置到属性中,下一个页面才拿得到,接下来servlet会选择视图,将查询结果显示出来。
Struts2第一天课堂笔记
一、框架概述1、框架的意义与作用:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。
特点:封装了很多细节,程序员在使用的时候会非常简单。
2、三大框架:Struts2,Hibernate,Spring3、学好框架:由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要。
二、关于三层架构三、控制器:MVC中的控制器1、MVC回顾M:Model 模型,封装数据。
javabeanV:view 视图,展示界面。
jspC:Controller 控制器,控制程序流程。
Servlet2、Servlet和FilterServlet:Filter:总结:Servlet能做的事情,过滤器也可以做到。
并且过滤器比Servlet还多了一个放行的功能,因此过滤器比Servlet功能更为强大。
结论就是:过滤器同样也适合做控制器。
四、案例中的问题规律:1、获取请求正文,用户要做什么事情2、根据不同的请求,做出不同的判断3、执行具体的方法代码(动作)4、转向页面,展示给用户缺陷:1、重复性劳动太多,具体的执行代码也有冗余代码。
2、到底要做什么全是硬编码,像用户要做什么事情,对应执行什么代码,可以写在配置文件中。
3、具体的代码方法放到了控制器中,过于臃肿。
五、Struts2简介1、Struts2概述Struts2是Apache发行的MVC开源框架。
注意:它只是表现层(MVC)框架。
2、Struts2的来历Struts1:也是apache开发的一套mvc的开源框架。
在2005年之前非常流行。
弊端:Struts1的核心控制器就是一个Servlet。
随着使用者的增多,弊端开始出现。
Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。
Struts2就是apache和OpenSymphony 组织合并开发出来。
struts1笔记
1:学习struts之前首先简单的了解一下struts是什么和为什么使用strutsStruts1是apache软件基金组织jakarta项目的一个子项目,struts的前身是CraigR.McClanahan编写的jsp model2架构。
在所有的MVC框架中,出现最早的应用最广泛的就是struts框架。
它主要是采用servlet和jsp技术来实现的,Struts是基于sun javaee平台的MVC框架,它采用的MVC模式“分离现实逻辑和业务逻辑”的功能发挥的淋漓尽致。
广泛使用struts原因:a:建立在MVC这种公认模式上的。
Struts在M、V、C上都有涉及。
但它主要是提供一个好的控制器和一套定制的标签库上。
(所以具有MVC的一系列优点,如:结构层次分明,高可以重用性、增加了程序的健壮性和伸缩性,便于开发与涉及分工,提供了集中统一的权限控制、校验、国际化、日志等)b:开源项目,得到了包括他的发明者Craig R.McClanahan在内的一些程序大师和高手持续而细心的呵护,并接受了实战的检验,使其功能越来越大,体系日臻完善。
C:与其他技术和框架具有很好的融合性,如:spring 、hibernate等D:大大提高了开发速度2:struts原理:Model部分:Struts的Model部分由ActionForm和JavaBean组成。
其中ActionForm用于封装用户请求参数,所有的用户请求参数由系统自动封装成ActionForm对象;该对象被ActionServlet 转发给Action;然后Action根据ActionForm离得请求参数处理用户请求。
JavaBean则封装了底层的业务逻辑,包括数据库访问等,在更复杂的应用中JavaBean多代表的并非是一个简单的JavaBean,可能是EJB最贱或其他业务逻辑组件。
(注意:ActionForm并不属于model 层,而是属于控制层)View部分Struts的View部分采用JSP实现。
strust学习笔记(全)
struts21.struts简介:先导入struts-blank.war到eclipse中,这是一个空的工程,把它作为模板进行开发是不是用了struts就可以抛弃servlet? struts底层仍然是servlet,其实是用了一个Filter来进行分发(在web.xml中配置)。
2.strusts配置文件到底哪个请求分给给哪个类来处理,这个在struts.xml文件中进行配置<action name="hello" class="处理这个hello请求的类">3.处理类Action类的写法一、定义一个普通类,在其中定义一个public String execute()方法,在其中写上处理逻辑,这个方法会在对应的请求过来时自动回调。
二、除此之外还可以实现接口Action,但现在暂时没有必要三、继承ActionSupport,但现在暂时没有必要4.MVC的简介struts2中,XXXAction代表了C控制逻辑,xxx.jsp代表了V视图,另外还有模型Mstrut2完全可以不去理会HttpServletRequest和HttpServletResponse,让我们从这些繁杂的Servlet的api中解放出来。
如何取出请求中的参数呢?(原来是用req.getParameter("xxxx"))Struts中只需要将Action类的属性定义为和请求参数同名即可(框架会自动读取请求参数,并自动注入到同名的属性中去),我们只需要在execute方法中将属性的值(也就是参数的值)取出来用就可以了。
如何在Action中往后面的jsp传值呢?(原来是用req.setAttribute("xxx","xxxx"))struts只需要把要传给后面的值,放在Action类的属性中,需要定义getter方法;然后在后面的jsp中用el表达式就可以取出来了Action是MVC中的C,控制;Action中的那些接收参数的属性属于M,模型。
struts2.2.1学习笔记
1、首先在在struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes目录下拷贝struts.xml至src下粘贴。
再拷贝struts-2.2.1.1\apps\struts2-blank\WEB-INF下web.xml里的filter到web.xml。
2、一般<url-pattern>/*</url-pattern>用写*号,虽然有时候用*.Action也可以。
默认过滤所以请求。
被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到。
首先看namespace(struts.xml),这里namespace为”/”再去找里面有没有hello的action,如果有去找对应的result应用的项。
3、Struts.xml里面<package name="default"namespace="/"extends="struts-default">中namespace=”/”中的”/”与我们在浏览器中访问的路径一一对应。
Locahost:8080/my/最后面的一个”/”对应要访问下面action需要localhost:8080/my/hello.action就可以,不然会出错。
4、在struts.xml里面复制<constant name="struts.devMode" value="false" />把value改为true,则表示,开发模式,重启tomcat服务器,就可以了。
这样更改配置很会自动更新5、在struts.xml里面”<”提示。
在struts2文件夹里面,随便找一个struts2-core的jar文件解压,struts.xml里的dtd文件,为/dtds/struts-2.0.dtd,把struts-2.0.dtd加入到xml的catalog里面就可以了。
Structs学习笔记
Structs学习笔记1. Struts是什么?答:1) Struts是一个开源框架,用于构建MVC架构Web应用程序;2) Struts是Jakarta项目的部分, 由Apache软件基金赞助;3) 通过使用Struts,你可在程序中清晰地分隔表现层和业务逻辑层;4) 通过提供广泛JSP标签库,Struts也提高了开发效率。
标签库解析和验证用户输入、错误处理以及国际化支持。
5) 我们将会向您展现如何使用Struts开发工具构建Struts的Web应用程序。
2. Struts资源答:为了学习更多Struts框架有关知识,请关注Struts官方网站以及用户向导:. /struts. /struts/userGuide/introduction.html3. MVC(model-view-controller)架构模式答:1) MVC架构模式在1980年由Smalltalk-80的图形用户界面库的开发者提出;2) 从此它在面向对象的用户界面和应用程序控制工具包中得到了广泛地应用,例如Struts,以及经过改良去满足特定平台需求,例如J2EE。
3) 根据MVC模式,一个软件组件(一个应用程序、一个模块等)应该将它商业逻辑和它的表现层分离;4. MVC的理由答:1) 对于相同的model你有超过一个view;2) 假如商业逻辑和它的表现层构建在一块,增加额外的view会导致相当大的中断以及增加组件的复杂性;3) 一个model有二个view的一个好的例子是一个银行应用程序,它可以通过互联网以及手机访问;4) 改变view的时候,你不希望每次改变model;5) view依赖于model,它显示给用户model的特定方面;6) 将view和model构建在一块,每次当你对view进行细小改动的时候,你不得不改动model;5. MVC模式答:这种分离可通过将组件分成以下层达到:. model层,实现商业逻辑;. view层,实现一个特定客户端类型的用户界面;. 有了这二层,我们可实现商业逻辑并且将它呈现给用户。
Struts学习笔记
Struts工作原理与核心配置在使用JSP/Servlet时,原理为:JSP→web.xml中配置的servlet与servlet-mapping→Servlet(接收参数,验证,调用DAO操作)→然后跳转不同的页面。
使用Struts时,原理为:JSP→web.xml→ActionServlet(url-pattern:*.do)→struts-config.xml(根据path路径找到对应的Action与ActionForm)→ActionForm→validate方法验证,如果通过进入Action,否则返回input错误页)→Action→调用DAO进行判断→成功时跳转某个页面(Struts-config.xml:forward),失败时可以返回错误页(input)。
Struts-config.xml中的配置组成:所有的<form-bean>都要在<form-beans>里面包含<form-bean>包含两个属性:name:该bean的名称,为唯一标识Type:该bean的包类名。
这是Action的配置Action-mapping中包含多个ActionAction的属性:Name、Attribute表示该Action对应的ActionForm的名称,一个Action 只能对应一个ActionForm,一个ActionForm可以对应多个Action.Input:用来作为错误页的,当validate方法执行后有错误,则自动跳转到该页面。
”/”表示从WebRoot开始寻找页面。
Path:表示该Action的虚拟路径,必须加/,而且不需要加.do的后缀Scope=”request”:表示Action所保存的属性范围。
在Action中可以包含不同的forward路径Forward属性:Name:该forward的唯一标识,在Action中执行跳转时,需要通过该name 查找对应的路径。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014/11/24c/s 客户端服务器 b/s浏览器服务器 url地址定位tomcat web容器用于发布项目Jsp包含内容:小脚本表达式声明 page指令Jsp运行流程:请求发送到Web容器,如果是第一次请求,容器进行编译、运行,把结果进行html拼接,发送回客户端。
Jsp内置对象:out、request、response、session、application、config、page、pageContextRequest 对象方法:getParameter(String name),getParameterValues(String name),setCharacterEncoding(),RequestDispatcher get RequestDispatcher(string path), setAttribute(Stringkey,Object value),getAttribute(String key)Get提交的内容有大小限制、post没有限制Get能看到提交信息 post不能Get是显式显示 post是隐式显示Get方式的字符编码:String name=request.getParameter(“name”);name=new String(name.getBytes(“ISO-8859-1”),”utf-8”)request 处理客户端请求 response 响应客户端请求并向客户端输出信息一个会话是浏览器与服务器之间的一次对话,从浏览器打开网页开始,到关闭浏览器结束;session对象可以用来跟踪用户在一个会话过程中的状态;session对象存储在服务器。
Session对象的常用方法:Void setAttribute(Sting key,Object value)Object getAttribute(Sting key)Void invalidate()String getId()Void removeAttribute(Sting key)Page request session application的区别:简单说 page指当前页面。
在一个jsp页面里有效request 指从http请求到服务器处理结束,返回响应的整个过程。
在这个过程中使用forward方式跳转多个jsp。
在这些页面里你都可以使用这个变量。
Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。
application它的有效范围是整个应用。
作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用page里的变量没法从index.jsp传递到test.jsp。
只要页面跳转了,它们就不见了。
request里的变量可以跨越forward前后的两页。
但是只要刷新页面,它们就重新计算了。
session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。
application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。
cookie 和session 的区别:cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
session会在一定时间内保存在服务器上。
当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
所以个人建议:将登陆信息等重要信息存放为SESSION其他信息如果需要保留,可以放在COOKIE中Oracle:字符数据类型: char 存储固定长度的字符串Varchar 存储可变长度的字符串数值数据类型: number 存储整数和浮点数,格式为number(p,s)日期时间类型:date 存储日期和时间数据 timestamp:秒值精确到小数点后6位如:date 2014-8-8 timestamp 2014-8-8 06:30:55。
Lob数据类型:blob 存储二进制对象 clob 存储字符格式的大型对象 bfile 将二进制数据存储操作系统文件中约束检查:Length(student_pwd)>6 instr(email,@)>02014/12/1接口ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。
LinkedList 采用链表存储方式,插入、删除元素时效率比较高。
List 方法:Boolean add(Object o)Void add(int index,Object o)Int size()Object get(int index)Boolean contains(Object o)Boolean remove(Object o)Object remove(int index)LinkedList 方法:Void addFirst()Map方法:Object put (Object key,object value)2014/12/2JDBC:DriverManager:依据数据库的不同,管理JDBC驱动Connection:负责连接数据库并担任传送数据的任务Statement:由Connection产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果ResultSet ExcuteQuery(String sql)Int excuteUpdate(String sql)Boolean excute(String sql)2014/12/3防止SQL注入:PreparedStatement ps=null;Ps=conn.prepareStatement(sql);Ps.setString(1,value);Rs=ps.excuteQuery();第一步:建实体类定义属性,生成 getter、setter 方法第二部: DAO 数据访问层建立接口,接口中定义数据访问方法,定义接口的类,继承接口,在类中实现方法,new一个实体类第三部:BIZ 业务处理层建立接口和类,接口中定义业务处理方法,类中实现方法,并调用DAO。
New一个DAO类的方法。
传统数据库的不足:需要经常与数据库建立连接在访问结束后,必须关闭和释放连接数据库连接时,要频繁的建立和释放连接,浪费系统资源和时间安全性和稳定性较差CREATE SEQUENCE NeMINVALUE1MAXVALUE9999START WITH1INCREMENT BY1NOCACHE;分页显示:1、查询全部数据,只访问一次数据库2、一次取固定的数目,缺点:操作数据库频繁。
列表显示数据特点:优势:指定格式显示,布局清晰不受信息数量限制缺点:数据库查询压力大,阅读不方便分页显示步骤:1、确定每页显示的数据量和总数量2、确定分页显示的总页3、编写sql查询,实现数据查询4、在jsp进行页面分页显示intPage=(count%pageSize==0)?( count/pageSize):( count/pageSize+1)Select count(1) from table 比Select count(*) from table 效率高分页语句:Select * from(Select rownum as rn,t.*from(select news.* from news order by create_date desc) twhere rownum<=20) where rn>10;BaseDao{Connection conn(){}}2014/12/10 上传下载2014/12/12 ServletJsp 转译为 servlet,然后编译成 class文件,执行返回 htmlServlet 是运行在服务器上处理请求并对其做出响应的应用程序创建接口,定义方法,创建impl类来实现接口方法2014/12/13Servlet 类型:基础servlet、filter servlet、listener servlet转发和重定向中“ /”的意义不同:1 :共享数据转发能共享数据,重定向不能共享2:转发的url不变,重定向的url发生变化3:重定向“ /”到端口位置转发“ /”到web应用程序Request.getRequestDispatcher().forward() 返回一个RequestDispatcher对象2014/12/15El表达式特点:使用简单,自动转换类型隐式对象从小到大:pageScope requestScope sessionScope applicationScope Request返回的对象是 Object类型El表达式:“.”访问符找不到对象报错,【】找不到对象返回null paramValues2014/12/16什么是preparedStatement 预编译练习连接数据库的过程数据库是磁盘上存储数据的集合:物理上表现为数据文件、日志文件、控制文件逻辑上表现为:表空间必须首先创建数据库,才能使用数据库实例:每个启动的数据库对应一个数据库实例,由这个实例来控制和访问数据库为了运行数据库,Oracle系统所运行的所有进程和分配的内存结构的组合体数据文件:扩展名是.dbf 用于存储数据库数据的文件数据库表和数据文件不存在一对一控制文件:扩展名是.c t l,是数据库启动和运行所必须的文件日志文件:扩展名是.log,它记录了对数据的所有更改信息,多个日志文件组之间循环使用DDL:数据库定义语言DCL:数据库控制语言DML:数据库管理语言创建表空间:CREATE TABLESPACE epet_tablespaceDATAFILE'E:\oracle\product\10.2.0\oradata\JBITDB\EPET.DBF'SIZE100MAUTOEXTEND ON NEXT32M MAXSIZE UNLIMITEDLOGGINGEXTENT MANAGEMENT LOCALSEGMENT SPACE MANAGEMENT AUTO;Class.forName(“oracle:Jdbc: driver:OacleDriver”)Conn=DriverManager.getConnection(url,”user””password”)url=”jdbc;orcle:thin:@localhost:1521:orcl”;stmt=conn.createStatement();stmt.excuteUpdate(); stmt.excuteQuery();Class.forName(“orcle.jdbc.driver.OracleDriver”)Try{Class.forName(“oracle.jdbc.driver.OracleDriver”);url=”jdbc:oracle:thin:@localhost:1521:orcl”;Conn=DriverManager.getConnection(“url”,”user”,”password”);Stmt=conn.createStatement();Stmt.excuteUpdate();Stmt.excuteQuery();}catch(Exception e){e.printStackTrace();}创建序列:create sequence seq_name [start with num][increment by num] 删除序列:drop sequence seq_name;Sql *plus isql*plus pl/sql2014/12/17索引:按存储结构分:B树索引,位图索引,反向键索引按索引值是否唯一:唯一索引,非唯一索引按索引列分类:单列索引,组合索引,基于函数的索引创建索引:create index index_name on tableexp导出数据:文件为dmp文件,三种导出方式:1、表方式导出一个表2、用户方式导出属于一个用户的所有对象3、全数据库方式导出数据库所有对象,只有dba可以做导入 imp2014/12/18PL/SQL 编程:PL/SQL :一种过程化语言,通过增加编程语言的特点,实现对SQL的扩展。