JAVA web开发历史 早期的Java Web应用中,Jsp文件同时负责生产网页,控制到下一个网页的流程,以及负责业务逻辑, 这给web开发带来一系列问题: HTML和Java耦合在一起,JSP文件的编写者必须是网页设计者,又是Java开发者。 缺点: 可读性差 调试困难 不利于维护,更改业务逻辑或者数据可能设计多个相关网页 现在通常分为四层: 表述层(JSP,HTML页面) 业务逻辑层(JavaBean) 持久化层(spring实现持久化) 数据库层 分层的优点: 可伸缩性 可维护性 可扩展性 可重用性 可管理性 分层的也体现了分而治之的思想。 web.xml中welcome 标签指定访问主页 <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> JSP页面的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 Struts2核心包 common-logging-1.0.4.jar Struts2框架的日志包 freemarker-2.3.8.jar Struts2的UI标签模板 ognl-2.6.11.jar 对象图导航语言包 strut2-core-2.0.11.jar Struts框架的核心类库 xwork-2.0.4.jar xwork类库,Struts2基于此构建 Struts 2的最终目的是将页面跳转以及模块处理进行解耦,可配置化。 STRUTS2的常见问题: 1. Tomcat 设置 Window->References->Tomcat 2.默认JDK设置,选中的JRE会被添加到新创建的JAVA 项目build path中 Window->References->Java->Installed JREs 3.项目名称太长 右击项目,copy qulified name 4.Struts 的常用配置步骤 1.web.xml配置 struts的filter 类 2.struts.xml 复制到 src 目录中。进行配置ACTION的页面跳转 3.lib 包复制到 WEB-INF\lib下 5. 配置在struts.xml中,当修改struts.xml文件后,不用重启Tomcat可以立马生效 <constant name="struts.devMode" value="true" /> 6.如何在Eclipse中快捷的查看lib包的源码? 在Referenced Libraries中,右击lib包,选择Java Source Attachement, C:/Users/anker/Desktop/Java学习/Struts2/struts-2.1.6-all/struts-2.1.6/src/core/src/main/java 7.设置 lib 包的 文档 在Referenced Libraries中,右击lib包,选择Java Location file:/C:/Users/anker/Desktop/Java学习/Struts2/struts-2.1.6-all/struts-2.1.6/docs/struts2-core/apidocs/ 选中查看的类,按F1可查看帮助文档 8.问题: Copy 项目后,当进行Tomcat部署时,报错此项目已存在。 解答: 需要修改上下文根,右击项目,选择Properties->MyEclipse->Web,修改 Web Context-root 9.Struts2配置简介 <package name="default" namespace="/path" extends="struts-default"> <action name="path" class="com.bjsxt.struts2.front.action.StudentAction"> <result name="SUCCESS"> /indexAction.jsp </result> </action> </package> package 主要用于解决action重名的问题 Namespace: 页面访问路径,当省略时等同于namespace=""或者namespace="/",意味着action标签,匹配所有其他namespace中未能匹配上的访问路径。 extends: 继承包 action:访问的模块处理,以后可跟.Action class: 模块处理的实际类,若省略则访问Struts中的ActionSupport类,里面存在一个execute方法,返回success字符串。 result: 接受模块处理的返回处理 name: 根据返回的字符串访问jsp页面,若不填写,默认为"success"字符串。 global result配置:设置在当前namespace下,所有action公用的结果集 <global-results> <result name="mainpage">login.jsp</result> <global-results> 默认Action,当在当前包含的namespace中找不到匹配的action时,访问的action。 <default-action-ref name="index"/> <action name="index"> <result>/default.jsp</result> </action> 模块包含 <include file="login.xml"/>,login.xml文件内容与struts.xml结构一致 10.Action类的实现三种方法 1.普通类,实现一个返回字符串的方法。 2.实现Action接口 3.从ActionSupport集成,好处在于可以直接使用Struts2封装好的方法。(推荐) Action的类在访问时,对象即被Strut2框架自动创建出来。当用户每次访问时,产生的是不同的Action对象。 而在Struts1时,此对象只有一个。多个线程访问存在安全隐患。 11.Action类的方法调用 1.不指定方法,则默认访问Action类的Execute方法。 2.通过XX!method.action 进行调用,XX是Action模块,method是Action类中的方法 3.在Action 标签中,添加method= "add" 字符串,即访问此Action模块时,访问的是add方法。 12.Action类如何来接受参数? 1.通过URL进行传递。传递的参数在Action类当中需要定义对应的成员变量。 例如 http://localhost:8080/Struts2_0700_ActionAttrParamInput/path/path!GetMessage.action?name=Anker&age=18 这里访问的是path 对应的Action类下的GetMessage方法,并将Anker,18传递给Action类的成员变量name以及age 2.通过域模型接受参数(推荐) 即建立对应的实体类,此实体类包含相应的成员变量。并在Action类中实现此对象的get,set方法。 调用方式 http://localhost:8080/Struts2_0700_ActionAttrParamInput/path/path!GetMessage.action?user.name=Anker&user.age=18 备注:若是调用Action的过程中,没有对实体类的属性进行赋值,则不会创建实体对象。 3.ModelDriven 模型驱动 实现ModelDriven接口,通过getModel返回实体类的对象,对对象成员变量进行赋值。 13.如何在Struts.xml使用通配符 使用通配符,可以大大简化我们的配置。不过,一定要遵循"约定优于配置"的原则 在ActionName当中使用*号,后面的class,method或者result标签,可以使用{1}来配置第一个*号对应的字符串, {2}配置第二个*号对应的字符串,以此类推 <package name="actions" extends="struts-default" namespace="/actions"> <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}"> <result>/Student{1}_succes.jsp</result> </action> <action name="*_*" class="com.bjsxt.struts2.action.{1}Action"> <result>/{1}_{2}_success.jsp</result> </action> </package> 14.问题:如何解决页面的默认编码 解答: Windows->Preferences-> JSP Encoding 换位 Chinese , National Standard,这样默认建立出来的编码格式为GB18030。页面既可以写入中文。 15.JSP页面的绝对路径问题 struts2中的路径问题是根据action的路径而不是jsp路径来决定,所以尽量不要使用相对路径 由MyEclipse生成的jsp页面,生成的内容通常包括以下部分: <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> path是获取当前项目的上下文根 basePath = http://localhost:端口号/项目上下文根/ 在head标签中,加入<base href="<%=basePath%>">,即意味着页面的链接皆采用绝对路径 <head> <base href="<%=basePath%>"> </head> 16. 在1.6版本,在实现接口时,会自动生成字符串@override。而这字符串在1.5不支持 JDK 1.6设置: Installed JRE 设置为1.6 项目的Java Compiler Level 也要设置为1.6 Tomcat 6.x下面的JDK也设置为1.6 17.MVC 的概念 MVC 中的 M : Model 实体 C : Action V: View 视图 由C 进行控制访问,将Model与View分开。 18.如何查看Tomcat的端口号? %TOMCAT%下的/conf/server.xml文件: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 19.Struts2访问 Web元素的方法 (request,session,application) request < session < application request: 只在一次请求上(转发不算请求,因为转发是服务器的行为)生效。 session: 当用户访问某个站点时,服务器端会为客户产生一个sessionID,以cookie的方式返回给客户端。一个 用户就好比一个session对象,直到关闭浏览器. application: 一个服务器就是一个application对象,当服务器停止时候,application被摧毁。 对应的接口 request : javax.servlet.http.HttpServletRequest session : javax.servlet.http.HttpSession application : javax.servlet.ServletContext 共有的方法 setAttribute(String name, object o), getAttribute(String name) 在Struts2 框架中,如何获取request,session,application对象 1.利用ActionContext容器去获取,获取的类型为MAP类型 2.实现接口RequestAware,SessionAware,ApplicationAware,Struts框架自动通过set方法注入对象。对象类型为MAP<String,object>(推荐) 3.利用ServletActionContext容器获取,对象类型为HttpServletRequest,HttpSession,ServletContext。 4.实现接口ServletRequestAware接口,Struts框架自动通过set方法注入对象。对象类型为HttpServletRequest,HttpSession,ServletContext。 IOC与DI概念 IOC : Inverse Of Control的简写。控制反转,由框架配置进行控制对象的创建 DI : Dependency Injection,依赖框架将对象注入,而非自动去NEW或者获取 20.利用javaScript 实现一个页面多个按钮提交 <input type="button" value="submit1" onclick="javascript:document.f.action='login/login1.action';document.f.submit();"> <input type="button" value="submit2" onclick="javascript:document.f.action='login/login2.action';document.f.submit();"> <input type="button" value="submit3" onclick="javascript:document.f.action='login/login3.action';document.f.submit();"> <input type="button" value="submit4" onclick="javascript:document.f.action='login/login4.action';document.f.submit();"> 21. 使用addFieldError方法和s:fieldError标签简单处理数据校验 数据校验后,添加错误 this.addFieldError("name", "name is error"); 添加Struts标签 <%@taglib uri="/struts-tags" prefix="s" %> 将Action中添加进去的fielderror 取出来进行显示 <s:fielderror fieldName="name" theme="simple"/> <s:debug> </s:debug> Value Stack 值栈:中间存放着Property name 与 Property Value 栈就是个容器,后进先出,先进后出原则。 通过<s:property value="errors.name[0]"/> 对value Stacke中取值。 这里的errors是property name, name是map类型集合的key,[0]是取集合数组值的第一个值。 22.如何快速打开编辑JSP页面? 右击jsp页面,选择open with,选择MyEclipse JSP Editor 23.ACTION接受中文参数时,中文乱码如何处理? <constant name="struts.i18n.encoding" value="GBK"/> struts 2.16存在bug,在struts.xml中设置此语句后,中文仍然存在乱码。在2.17版本后解决了此问题。 24.结果类型 result type <result type="dispatcher" name="SUCCESS">/indexAction.jsp</result> dispatcher(默认的,服务器跳转。等同于jsp的forward,只能跳转到jsp页面) redirect (客户端跳转到jsp,无法共享value stack的内容。需要从action Context 中取值) chain(跳转到action,跳转的类型为服务器跳转) redirectAction(客户端跳转到action) 25.服务器跳转与客户端跳转的区别 1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的, 所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL. 2.从数据共享来说 forward:转发页面和转发到的页面可以共享request里面的数据. redirect:不能共享数据. 3.从运用地方来说 forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等. 4.从效率来说 forward:高. redirect:低.。 26.OGNL表达式 OGNL表达式是围绕OGNL上下文来进行的, OGNL上下文具有一个根对象, 访问根对象可以直接用名称或者属性名访问,而不需要加任何符号。 Struts2中将ActionContext作为OGNL上下文,并且将值栈作为OGNL上下文的跟对象, 通过Struts2的标签,直接使用OGNL表达式来访问ActionContext中的对象或者属性。 OGNL表达式中有三种符号,分别是#、%和$,但是常用的也就是#符号,%和$两种并不常用,只是在特殊情况下会使用。 1.取根元素的值(访问值栈中的对象普通属性get,set方法. 当Action中对象的属性有赋值的时候,Struts才会自动由构造对象。否则不会创建。 <s:property value="user.id"/> <s:property value="user.name"/> 2.取非根元素(需要增加#) <s:property value="#request.cn"/> <s:property value="#request.request_data"/> <s:property value="#session.session_data"/> <s:property value="#application.application_data"/> //attr按顺序自动找request/session/application,找到后立刻返回 <s:property value="#attr.application_data"/> 3.%符号,%符号是在标志的属性为字符串类型时,计算OGNL表达式的值 <s:a action="department_delete?id=%{id}&parentId=%{parent.id}" onclick="return window.confirm('这将删除所有的下级部门,您确定要删除吗?')">删除</s:a> 这就是将id放到url中,作为id参数的值。 27.struts2 exception的处理方法 在处理异常时,通过throws抛出异常,最后由struts.xml文件配置的错误页面来显示错误 <exception-mapping result="error" exception="java.lang.Exception"/> 通过会考虑使用global的方式,统一制定错误页面,其他package继承 <package name="bbs2009-default" extends="struts-default"> <global-results> <result name="error">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception" /> </global-exception-mappings> </package> 28.EL表达式 EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构: ${searchScope.user.sex} 所有EL都是以${为起始、以}为结尾的.上述EL范例的意思是:从Session的范围中,取得用户的性别。 EL 提供 . 和 [] 两种运算符来导航数据。下列两者所代表的意思是一样的: ${sessionScope.user.sex}等于${sessionScope.user["sex"]} 但要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ] EL 存取变量数据的方法很简单,我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到, 再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去, 但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL 属性范围(jstl名称) EL中的名称 Page|PageScope Request|RequestScope Session|SessionScope Application|ApplicationScope
相关推荐
Struts2 基础知识 Struts2 是一个基于 MVC 模式的 Java Web 应用程序框架,主要用于构建 Web 应用程序。Struts2 框架提供了一些基本的组件和工具,帮助开发者快速构建 Web 应用程序。 Struts2 框架引入到 Web ...
ssh中,Struts2的基础知识,是ssh的基础,教科书,请放心使用。
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用。...熟练掌握Struts2的基本知识和使用技巧,对于提升Web开发效率和项目质量具有重要意义。
### Struts2基础知识点详解 #### 一、Struts2框架概述 Struts2是Apache组织维护的一个开源项目,它是Struts1的升级版本,在设计理念和技术实现上都有了很大的改进。Struts2采用MVC(Model-View-Controller)模式...
### Struts2基础知识点详解 #### 一、Struts2框架概述 Struts2是由Apache软件基金会维护的一个开源Web应用程序框架,它继承和发展了Struts1和WebWork框架的优点,采用了MVC(Model-View-Controller)设计模式,极...
2. **学习Struts2基础知识**:熟悉Struts2的基本概念、架构设计和核心组件,如Action、配置文件等。 3. **重构Action类**:将Struts1中的ActionForm类重构为Struts2的Action接口实现。需要注意的是,Struts2的Action...
### Struts2基础知识点详解 #### 一、Struts2的工作流程结构 Struts2作为JavaEE架构中的一款流行的MVC框架,其工作流程结构设计精妙,旨在简化Web应用程序的开发过程。以下是对Struts2工作流程的详细解析: 1. **...
### Struts2的基础知识及例子大全 #### 一、Struts2概述 **Struts2** 是一个基于 **MVC** (Model-View-Controller)设计模式的Java Web应用程序框架,它是由Apache软件基金会维护的一个开源项目。Struts2不仅继承...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它主要用来...以上就是关于“struts2基础jar包”所包含的主要知识点。掌握这些内容,将有助于理解并有效地利用Struts2框架开发Java Web应用。
本教程将介绍Struts2的基础知识,适合初学者入门。Struts2是在Webwork的基础上构建的,与它的前辈Struts1.x相比,虽然在大版本号上相同,但在配置和使用上有显著区别。 在开始之前,确保你有以下环境: 1. 开发工具...
这篇“Struts2基础应用二”着重介绍Struts2的核心概念、配置以及在实际项目中的应用。 首先,Struts2是一个基于MVC设计模式的开源框架,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。在Struts2中,...
— Web应用的发展 — Model 1和Model 2 — MVC思想 — MVC模式的优势 — 常用MVC框架及其特征 — Struts 1的基本结构及其存在的问题 — WebWork的基本结构 — Struts 2的起源 ...— Struts 1和Struts 2的对比
### Struts2基础知识详解 #### 一、Struts2简介与环境搭建 **Struts2**是Apache组织下的一个开源框架,它继承了Struts1的设计理念,但在很多方面进行了改进,提供了更丰富的功能和更好的灵活性。Struts2基于MVC...
在"Struts2权威指南前三章"中,我们可以预见到内容将涵盖Struts2的基础知识、安装配置以及核心概念。 首先,第一章可能会介绍Struts2框架的历史背景和它在Java EE应用中的地位。Struts2是Struts1的升级版,解决了...
### Struts2基础知识与实践 #### 一、为什么学习Struts2 - **提升编码效率**:Struts2提供了一套标准的MVC框架结构,能够帮助开发者快速地实现业务逻辑与视图分离,减少重复代码,从而提高开发效率。 - **框架特性...
struts的基础开发,可以帮助初学者学习struts2的相关知识。