siteMesh
openfire简介
– 高度定制化线程模型(单线程/线程池)。 – 超载保护和传输流量控制
3、Openfire通信
——MINA流程
4、Openfire内部处理
• 自定义IQ处理器:处理自定义IQ包 • 自定义组件:自定义一个组件,名为 broadcast ,那么发送给子域 的消息,全部会路由 到该组件。 • 拦截器,全局拦截所有流经Openfire的 Packet包。用户拦截器拦截所有和该用户有 关的Packet包。 是Openfire扩展的主要三种方式
自定义组件 由路由表 查询得到
4、Openfire内部处理 ——Packet拦截
• 拦截管理器维护两个列表,一个是全局拦 截器列表,另一个是用户拦截器列表 • 全局拦截所有流经Openfire的Packet包。 • 用户拦截器拦截所有和该用户有关的Packet 包。
• 在所有送入和送出的包做处理前后,拦截 管理器都会拦截包做相关处理
Openfire简介
1、为什么选择Openfire?
• • • • • • 完全开源,GPL协议; 完全JAVA语言实现,不依赖任何系统平台; 基于成熟的XMPP协议; 基于可扩展的WEB控制管理界面; 基于插件的开发框架,高可扩展性; 稳定,支持上万并发用户。
2、Openfire框架
——模块图
当我们访问Plain Page, Web.xml里面配置的 Sitemesh过滤器会自动给 Plain Page装饰。这些装饰 一般都是菜单,通过定义 模板+配置文件可以实现。 为插件实现页面提供了可 能。
4、Openfire内部处理 ——Packet拦截程图
注册自定义 拦截器到拦 截管理器
项目开发经验总结(含5篇)
项目开发经验总结(含5篇)第一篇:项目开发经验总结项目开发经验总结本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳的就是完美主义倾向,尤其是做技术人员出身的,喜欢寻找标准答案,耽误了工作进度,也迷茫了自己。
项目开始阶段是一个最重要的阶段。
项目经理在接手一个新项目的时候,首先要尽可能地多从各个方面了解项目的情况,如:1.这个项目是什么项目,具体大概做什么事情,是谁提出来的,目的是解决什么问题。
在国内很多客户都很不成熟的情况下,千万不要根据项目的名称望文生义地去想象项目的目标。
一个名为“办公自动化”的项目很有可能在你进场以后一个月才发现客户其实需要的是一个计算机生产管理辅助信息系统系统。
前期了解情况的工作越详细,后面的惊讶就越少,项目的风险就越小。
2.这个项目里牵涉哪些方面的人,如投资方、具体业务干系方、项目建成后的运营方、技术监督方等等,很多项目里除了业主单位的结构很复杂以外,还有一些其他单位也会牵涉进来,如项目监理公司、业主的行业主管机构等。
项目经理需要了解每个方面的人对这个项目的看法和期望是什么。
事先了解各个方面的看法和期望,可以让你在做项目碰到问题的时候,就每件事情分析哪些人会在什么方面支持你,哪些人会出于什么目的反对你,从而提前准备联合朋友去对抗敌人,让事情向你所希望的方向发展。
没有永远的朋友,也没有永远的敌人,只有一致的利益,这句话作为项目经理是一定要记住的;3.基本了解了客户的情况后,下面的事情就是了解自己公司各方面对这个项目的看法。
4.在做整体项目计划前,还要大致计算一下你手上的资源。
首先是时间,现在市场竞争激烈,往往很多项目要求在几乎不可能的时间范围里完成。
对于这一点,你在做项目的风险控制计划的时候要充分考虑。
其次是人员,根据项目预算和已往经验,大致计算一下未来的项目小组有多少种角色,每个角色目前公司是否有人,是否能完全归这个项目使用,是否需要另外招聘一些人员,招聘的准备工作要尽早启动。
S2SH框架知识点总结
1,MVC分层MVC是一种分层架构的思想,采用这种分层思想可以降低各层次之间的耦合性,提高代码的灵活性M(Model),即为模型层,指的是Java代码中数据的模型以及对数据的处理V(View),即为视图层,指的是为用户提供的界面,通常我们使用JSP/html实现C(Control),即为控制层,用来完成视图层和模型层之间的数据交互以及数据流程的控制①反射:通过“包名.类名”的字符串能够完成类的加载、对象的实例化以及方法的调用②动态代理:在不改变原有代码流程的前提下,实现对业务逻辑的干预JDK动态代理:只能够代理实现了接口的类,因为JDK动态代理就是通过产生父接口对象来代理实现类的对象。
CGLib动态代理:不能够代理final类,CGLib动态代理是通过产生被代理类的子类对象,来完成代理的③XML解析:DOM:DocumentBuilderFactory DocumentBuilderSAX:SAXReader练习 把我们写过的MVC重新写一遍2,Hibernate(ORM:来完成Java代码到数据的映射以及数据的持久化工作)①框架的使用:a)添加JAR:hinernate3.jar/Lib文件夹下的jar包/对应数据库的驱动jar包b)创建核心配置文件hibernate.cfg.xml并进行配置c)创建HibernateSessionFactory、ExportTablesd)创建POJO(注意规范)e)创建映射文件Pojo.hbm.xmlf)将映射文件添加到核心配置文件中②对数据的增删查改:session.save(pojo);session.delete(pojo);session.update(pojo);session.saveOrUpdate(pojo);session.get(Pojo.class,id);session.load(Pojo.class,id);Query(HQL):list()---可以支持分页Crit…(模糊查询)③事务:在不使用Spring框架完成事务管理的情况下,我们需要手动对事务进行管理④映射关系:多对一/一对多/一对一/多对多/继承映射⑤延迟加载⑥悲观锁和乐观锁⑦缓存机制⑧Pojo的三种状态:瞬态、持久态、游离态3,Struts2(MVC):①框架的使用a)添加jar包:9个b)创建核心配置文件struts.xmlc)在web.xml中对Struts2的过滤器进行配置d)创建actione)在struts.xml中对action进行配置②Action创建的三种方式③在Action中接收数据的三种方式④Action配置的三种方式⑤从Action中传值到页面的两种方式:全局变量和web元素⑥如何在Action获取到web元素⑦如何在页面取到Action传递过来的值?(值栈和上下文:ognl)⑧数据类型转换⑨国际化⑩拦截器⑪数据校验:a)在action重写validate方法进行校验b)通过validate.xml进行校验⑫文件的上传和下载⑬了解sitemesh(模版装饰)配置⑭Struts2对ajax的支持4,Spring:Spring的核心思想:IoC和AOPSpring的MVC→Spring也有一个拦截器,可以拦截请求,封装数据…IoC:通过Spring的配置获取对象,并且给对象的属性赋值AOP:AOP的含义,连接点,切入点,切点,切面,织入配置:bean的配置,aop的配置Spring对Struts2的支持:通过Spring的MVC完成本应由Struts2完成的请求拦截与封装在struts.xml中对“对象工厂”的配置Spring对Hibernate的支持:帮助创建sessionFactory对象,完成事务管理在applicationContext.xml中sessionFactory配置和事务管理的配置→谈谈对Spring的理解→Spring的MVC→Spring对持久层的支持→SpringAOP可以做些什么:数据库操作的事务管理,日志记录。
sitemesh简介
Sitemesh页面装饰器简介(一般用在大量页面存在公共模块的情况)一、sitemesh的基本原理一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件,获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。
二、如何使用SiteMesh1、在工程中引入SiteMesh的必要jar包:struts2-sitemesh-plugin-2.0.8.jar;sitemesh-2.3.jar;2、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:<!-- 定义SiteMesh的核心过滤器 --><filter><filter-name>siteMesh</filter-name><filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter </filter-class><init-param><param-name>debug.pagewriter</param-name><param-value> true</param-value></init-param></filter><filter-mapping><filter-name>siteMesh</filter-name><url-pattern>/*</url-pattern><dispatcher>FORWARD</dispatcher><dispatcher>REQUEST</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher></filter-mapping>注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,否则会有问题;3、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有)将其拷贝到/WEB-INF目录下;<sitemesh><property name="decorators-file"value="/WEB-INF/decorators.xml"/> <excludes file="${decorators-file}"/><page-parsers><parser content-type="text/html"class="com.opensymphony.module.sitemesh.parser.HTMLPageParser"/> </page-parsers><decorator-mappers><mapperclass="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper"> <param name="property.1"value="meta.decorator"/><param name="property.2"value="decorator"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMappe r"></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper"> <param name="match.MSIE"value="ie"/><param name="match.Mozilla ["value="ns"/><param name="match.Opera"value="opera"/><param name="match.Lynx"value="lynx"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapp er"><param name="decorator"value="printable"/><param name=""value="printable"/><param name="parameter.value"value="true"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper"> <param name="decorator"value="robot"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapp er"><param name="decorator.parameter"value="decorator"/><param name=""value="confirm"/><param name="parameter.value"value="true"/></mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper"> </mapper><mapperclass="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper" ><param name="config"value="${decorators-file}"/> </mapper></decorator-mappers></sitemesh>4、在sitemesh.xml文件中有一个property结点(如下),该结点指定了decorators.xml在工程中的位置,让sitemesh.xml能找到他; 按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的value值与其匹配就行;<property name="decorators-file"value="/WEB-INF/decorators.xml"/>5、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:<%@page contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@taglib uri="/sitemesh/decorator"prefix="decorator"%><!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title><decorator:title/></title><meta http-equiv="Content-Type"content="text/html;charset=UTF-8"/><decorator:head/></head><body><div><%@include file="/up.jsp"%></div><div><decorator:body/></div><div><%@include file="/foot.jsp"%></div></body></html>这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了<%@include file="/up.jsp"%><%@include file="/foot.jsp"%>主页面区域用的是<decorator:body/>标签;也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body/>标签所在位置;<decorator:title/>读取被装饰页面的标题;<decorator:head/>读取被装饰页面的<head>中的内容;<decorator:body/>读取被装饰页面的<body>中的内容;下面是我的decorators.xml:<?xml version="1.0"encoding="UTF-8"?><decorators defaultdir="/decorators"><excludes><pattern>/index.jsp</pattern><pattern>/login!Te*</pattern></excludes><decorator name="requirement"page="requirementDec.jsp"><pattern>/*</pattern></decorator></decorators>decorators.xml有两个主要的结点:decorator结点指定了模板的文件名,通过pattern来指定哪些路径引用哪个模板<decorator name="requirement"page="requirementDec.jsp"> <pattern>/*</pattern></decorator>excludes结点则指定了哪些路径的请求不使用任何模板如上面代码,<excludes><pattern>/index.jsp</pattern><pattern>/login!Te*</pattern></excludes>另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录; <decorators defaultdir="/decorators">。
error
<td nowrap title="<c:out value="${bean.score}"/>"><c:out value="${bean.score}"/></td>
</tr>
</table>
<form id="publishedForm" name="publishedForm" action="?" onsubmit="return false;">
<table width="100%" cellspacing="0" cellpadding="0" border="0" >
</c:otherwise>
</c:choose>
</table>
<%@ include file="/include/common_pagination.jsp"%>
<c:if test="${not empty page && not empty page.row}">
<title>
<fmt:message key="courses.course.assignment"/>
Java常用的框架有哪些
Java常用的框架有哪些Java常用的框架包括有Spring、Hibernate、Struts、Play、Google Web 工具包、Grails、Blade、JavaServer Faces及Vaadin。
如果想具体了解Java常用的框架有哪些,那不妨接着往下看吧!1、SpringSpring具有出色的开发复杂 Web 应用程序的能力,并以高性能著称。
它使Java开发人员能够轻松地创建企业级应用程序。
Web 应用程序开发人员可以保证 Spring 框架的能力,这就是为什么spring 成为Java开发人员最爱的原因。
这是可以证明这一说法的统计数据。
在开发人员的选择中,Spring MNV 和 Spring Boot 先于其他Java技术。
对他们而言,Spring 的一大优势是他们可以释放其他模块并专注于一个模块,因为 spring 利用了控制反转 (IoC)。
该框架的其他优势是全面的配置模型、支持 NoSQL 等传统数据库和现代数据库,并通过支持面向切面编程来支持内聚开发。
它提供了一些模块,如Spring MVC、Spring Core、Spring Boost、SpringTransaction 等。
2、Hibernate作为一个对象关系映射(ORM)数据库,Hibernate 改变了我们以前查看数据库的方式。
尽管它不是一个完整的全栈框架,但它为转换多个数据库的数据提供了极大的便利。
它支持多个数据库的能力使得它很容易拓展,无论应用程序大小或用户数量如何。
它快速、强大、易于扩展、修改和配置。
3、Struts该框架帮助软件开发人员创建易于维护的企业级应用程序。
这个框架的USP 是它的插件。
它们是 JAR 包,这意味着它们是可移植的。
Hibernate 插件和 spring 插件分别用于对象关系映射和依赖注入。
使用此Java框架开发应用程序可以减少处理时间,因为它提供了组织良好的Java、JSP 和 Action 类。
struts2核心工作流程与原理
struts2核心工作流程与原理做为一名技术人员,听到太多关于.net和java的比较的话题。
我想对那些技术人员说,请先了解一下什么是java(或者.net)吧,其实你根本不了解。
这是Struts2官方站点提供的Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。
2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。
注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到 FilterDispatcher。
3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。
下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter其代码如下:public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;ServletContext servletContext = filterConfig.getServletContext();// 在这里处理了HttpServletRequest和HttpServletResponse。
SiteMesh的介绍
假设你打算结合多种技术来构建一个企业级web站点。
比如,你准备采用J2EE 技术往你的web站点里添加新内容,而这个系统的其他部分是用CGI或者微软的IIS Server搭建的。
在这种情况下,怎样让你的应用系统从外观和感受(look and feel)上保持一致呢?一种办案就是采用J2EE技术全部重写,然后选用一种框架,比如Struts-Tiles,但这种办案的开发成本太高,不太现实。
另一种可选方案是在你的应用系统的各个部分采用相同的Look and Feel。
但这种方案会使维护站点变成噩梦,因为每当一个应用系统里面的Look and Feel需要改变的时候,你就需要让系统里的其他web应用保持同样的改变。
大多数用于解决这种商务需求的可用框架都有一个共同的缺点,他们不是平台相关就是框架相关。
当你决定采用Tiles作为struts修饰器的时候,需要创建tiles定义文件tiles-defs.xml,然后在 struts-config.xml里面声明forwards,引用这些tiles以修饰原始的JSP。
最简单的一种可能的解决方案是,全部采用纯html方式来生成你的web应用,每一个html页面都不需要知道自己将会被如何修饰,而是在外部采用某种机制来选择合适的修饰器修饰它们。
这就是SiteMesh的功能。
SiteMesh是基于Java、J2EE和XML的开源框架,依赖于从Servlet 2.3版本里引入的新功能——过滤器(Filters)安装和设置按照以往的经验,学习任何新技术或新框架最好的办法,就是使用它来创建一个简单的应用程序。
所以,我们将使用SiteMesh来创建一个简单的Struts应用程序。
我们的应用程序包括三个页面:•一个登录页面•一个帮助页面,包括页头和页脚•一个主页面,包括页头、页脚和页边菜单下面是创建这个简单web应用程序的步骤:1.SiteMesh基于过滤器,所以我们需要把SiteMesh过滤器通知给我们的web 应用程序。
Struts2过滤器和整合Sitemesh插件
反向思维:在第一种情况当中,如果自定义过滤器当中把核心控制器要 做的事情全部做完了,这个时候核心控制器也不会执行。(也是在转 发的情况下。)
我们知道Struts2的核心控制器就是一个Filter, 我们又知道在Struts2 2.1.3版本之前是通过 FilterDispacher充当核心控制器,而之后是 通过StrutsPrepareAndExecuteFilter充当核心 控制器,那么,我们要问的是Struts2为什么 要做这样的改变?
Struts2过滤器及Sitemesh插件
在struts2中使用过滤器与我们之前在JSP、 Servlet中使用过滤器基本一致。我们今天 要探讨的是在Struts2中与我们之前使用过滤 器需要考虑或者注意的地方。
在Struts2中使用过滤器要注意的地方: 假设自定义控制器对所有的请求都进行过滤 1、如果自定义的过滤器放在核心控制器的前面,这个时候组成的过滤器 链是自定义过滤器-核心控制器,也就是说,肯定是先执行自定义控 制器,然后再执行核心控制器。 2、如果把自定义的过滤器放在核心控制器的后面,这个时候组成的过 滤器链就是核心控制器在前面,自定义过滤器在后面,由于在核心控 制器当中,最终会调用所请求的action的方法,如果对响应的结果是 转发的话,这个时候不是新的请求,自定义过滤器这个时候自始至终 都没有执行。
另外,由于是重定向,是一次新的请求,因 此,在请求的过程中我们可以传递参数: <action name="Login" class="actions.LoginAction"> <result name="success" type="redirect">A.action?age=${user.age}</result> </action> --------------------------------------------------<action name="Login" class="steven.actions.LoginAction"> <result name="success" type="redirectAction">A?age=${user.age}</result> </action>
JSP开发框架
7、 Nutz
Nutz是一组轻巧的开源框架,内容涵盖了:
1.数据持久化(Data Persistence)
2.反转控制(Ioc)
3.Web框架(MVC)
Nutz所有的功能均不依赖第三方的jar包,上面三个部分可以独立使用。
4、 Mantis
Mantis是一个基于Java的小型MVC Web框架,通过Mantis,您可以快速开发一个Web系统,它具有以下特点:
封装数据库访问,事务处理,连接池集成,封装分页控制
封装数据库缓存和刷新机
基于URL反射的方法调用,避免复杂的XML配置;
简化配置文件,只需要一个配置文件即可完成web应用的灵活配置
dtree:树 形显示,简单易用。
jfreechat:统计图表生成。
dwr:适 合java的ajax开发框架,新版本中实现了服务器推模式,颠覆传统的客户端拉模式。
FCKeditor:网 页的所见即所得编辑器,漂亮的外观,多语言支持等,很强大。
jsp layout:是一个用来实现 JSP 布局支持的简单示例项目。该项目只需要一个 Servlet 类,一些配置即可Apache Tiles是一个JavaEE应用的页面布局框架。Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布 局。布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用。
6、 LazyJ
LazyJ是一个Java Web应用程序开发框架。包括:
一个非常快的模板引擎,该引擎能够缓自动存编译过的模板。
提供响应缓存和数据缓存引擎。
封装常用的数据库操作功能,包括连接池。
基于SiteMesh框架的表示层开发应用
基 于 StMeh框 架 的表 示层 开 发 应 用 i e s
行 燕 , 荣芳 高
( 西安石 油大学 计算机 学院, 西 西安 7 o 6 ) 陕 10 5
摘 要: 主要从 可重用性 、 可维护性 和开发 效率等方 面, 论 了使 用 JP的 i l e指令、 t t T l 框 架和 StMeh 讨 S nu cd Sr s is u e i s e
成功 集 成 到 Srt 架 。Tl 框 架 是 建 立在 JP tus框 iS e S
到另一个 页面 , 以实现对代码 的“ 复用” S 。JP技术 和标记的引入 , 使得这种情况有所改善。 以一个典型的 We 页面布局( 图 1 b 如 所示) 为
例 , We 把 b页面 的这 些共 通 元 素 抽 取 出来 , 生成 新 的 JP文件 :edrj , oe.s S h e.s f t jp和 meu j 。新 a p o r n .s p 建 cnetj , 其 中适 当 的位 置 通 过 使 用 <j : ot .p在 n s s p
T l 框架为创建 we is e b页面提供 了一种模板机制 , 由于支持视图的继承和重载 , 以减少页面代码 的 可
作者简 介: 行
燕(9 5 )女 , 1 7 一 , 陕西西安人 , 西安石油大学计算机学 院硕士研究生 ;
高荣芳 (9 3 )女 , 1 6 一 , 陕西西安人 , 西安石油 大学计算机学 院副教授 。
框架这三种表 示层 开发方案。着重介绍 了 StMeh框架的基本原理及工作流程 , i s e 最后给 出一个 St sh框 架在项 i Me e
目 中的 应 用 实例 。 关 键 词 : 架 ;i Me ;t t Ti ; eo t 模 式 ;o oi 模 式 框 St s Sr s l D cr o e h u e s a r C mps e t 中 图分 类 号 : P 1 T 31 文献标识码 : A 文 章 编 号 :0 7 24 20 )3—0 1 10 —3 6 【0 8 0 18—0 4
IE下文本模式!DOCTYPE作用介绍
文档类型(英文简称!DOCTYPE,英文全称DOCumentTYPE),它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档继上一篇文章中谈到的表单自动填充问题解决后,接下来又遇到新的问题,就是页面在IE下部分样式显示不正确。
通过IE开发人员工具查看对应样式存在,对照能够正确显示的本地html页面,样式基本相同,除了一些font样式在开发人员工具中显示的是font-size样式,其他都一样,包括导致样式显示不正确的margin样式。
最后还是通过开发人员工具中发现两个页面的文本模式不同,能够正确显示的页面文本模式是标准模式,而显示异常的页面时杂项模式。
查看网页源码发现时因为异常的网页是通过sitemesh进行装饰的,而装饰页面没有定义文本模式!DOCTYPE,导致浏览器没有通过标准模式解析网页。
!文档类型(英文简称!DOCTYPE,英文全称DOCumentTYPE),一个!DOCTYPE是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档。
它出现如该文件的第一行,并具有如下形式:
<!DOCTYPE html
PUBLIC "引用的字符串">
“引用的字符串”是被调用壹个公共标识符,它指的是所需的文档类型定义(DTD)由一个“知名”的名字,通常是由一个相关的标准。
[1]
可用性:
指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。
国际互联网工程任务组(IETF)和万维网联盟(W3C)并非注册的ISO组织。
常用代码生成器集合(整理)
常⽤代码⽣成器集合(整理)1.1 CodeSmith⼀款⼈⽓很旺国外的基于模板的dotnet代码⽣成器官⽅⽹站:http://官⽅论坛:http:///default.aspx版权形式:30天试⽤开源:否需要先注册确认后才能下载1.2 MyGeneratorMyGenerator是⼜⼀个国外很不错的代码⽣成⼯具,有⼈觉得⽐CodeSmith简单、好⽤。
所有api可以在帮助菜单中找到。
官⽅⽹站:http:///portal/default.aspx官⽅论坛:版权形式:免费开源:否1.3 NHibernate.NHibernate是Hibernate公司在Java⾃动⽣成领域取得巨⼤成功后推出的⼀款ORM⼯具.官⽅⽹站:http:///官⽅论坛:版权形式:免费开源:否1.4 湛蓝.Net代码⽣成器⼀款基于软件⾃动⽣成理念,能直接⽣成应⽤的dotnet代码⽣成器官⽅⽹站:http://官⽅论坛:http:///版权形式:免费开源:否1.5 动软.NET代码⾃动⽣成器⼀款⼈⽓很旺的免费C#代码⽣成器官⽅⽹站:http://官⽅论坛:版权形式:免费开源:否1.6 CodePlus专为sql server c#语⾔设计的代码⽣成器,功能还是很强⼤官⽅⽹站:http://官⽅论坛:版权形式:需要少量的注册费⽤开源:否下载地址很神秘1.7 CodeMakerasp,jsp,php代码⽣成⼯具,⾃动⽣成维护数据库信息的动态⽹页的代码⽣成器。
它可以帮助ASP、JSP、PHP开发⼈员快速的开发简单的数据库维护程序。
⽆需任何编码,只需将数据库结构导⼊到CodeMaker中并做简单的设置,CodeMaker即可⽣成完整的数据库操作页⾯。
⽤ CodeMaker可以简单快速的创建⽹站后台维护程序。
提⾼开发效率数⼗倍以上。
官⽅⽹站:http://官⽅论坛:1.8 ⾮⾮.Net代码⽣成器可以使⽤本⼯具⽣成和C#语⾔的代码,以及三层架构与ORM架构代码,并且使⽤的ORM持久化组件是开源的,您可以在本软件的安装⽬录下找到它官⽅⽹站:官⽅论坛:版权形式:免费开源:否1.9 BMW业务模型及代码⽣成器⼀款⼈⽓很旺的免费C#代码⽣成器官⽅⽹站:官⽅论坛:版权形式:免费开源:否1.10 飞鹰CoolCoder专门为采⽤nhibernate做关系对象影射架构的系统提供代码的⼯具,简单易⽤,虽然不提供源码,我们可以⽤反编译⼯具对其反编译看源码。
开源框架之struts2笔记归纳
Struts部分: (1)1)为什么要学习Struts框架 (2)2)为什么使用MVC? (2)3)MVC在JavaWeb中的实现 (2)*4) Struts2的主要工作流程 (2)3.Struts2框架的历史 (4)*4.Struts2框架基本使用 (4)1.Struts2使用基本规则 (5)Struts2标签+OGNL表达式 (6)2)OGNL工作原理 (6)4.OGNL在Struts2中的应用 (8)1)xwork对ognl进行扩展和改造 (8)*2)ValueStack对象(参考valuestack.jpg) (9)*3)在JSP中访问ValueStack数据方法 (9)a.使用Struts标签+OGNL表达式 (9)b.使用EL表达式 (9)1.Struts2框架Action组件的核心应用 (10)1)Action组件基本原理 (10)*3)Action属性注入 (11)*4)如何利用一个Action处理多个请求 (11)1.前期课程回顾 (11)1.Result组件原理 (12)1)Result组件的作用 (12)2)Result组件实现规则 (12)*2.常用的几种Result组件 (13)2)Action响应 (13)1.Struts2标签 (14)1)通用标签 (14)2)表单标签 (15)2.拦截器组件 (15)*2)掌握自定义拦截器的使用 (16)Struts部分:======================Day01=========================1)为什么要学习Struts框架Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
2)为什么使用MVC?MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。
3)MVC在JavaWeb中的实现Servlet,JSP,Filter,JDBCa.原ShoppingCart程序就是一个MVC结构实现View实现部分:采用JSP组件实现Model实现部分:采用DAO、Entity等组件实现Controller实现部分:采用ActionServlet组件实现b.ShoppingCart程序虽然基于MVC,但结构还有一些问题:当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。
SiteMesh介绍
•
原理
• 配置文件 sitemesh.xml,用来定义使用哪个页面解析器来解析指定的内容类型或者使用哪种修 饰器映射方案
原理
配置文件sitemesh.xml <property name="decorators-file">指定了用于定义修饰器的文件。<page-parsers> 定义了SiteMesh可以处理的内容类型。每一个<parser>子元素指定哪一个解析器解析 哪一种特定的内容类型。在我们的示例sitemesh.xml文件里,我们告诉SiteMesh使用 FastPageParser解析text/html类型的内容。默认地,SiteMesh只可以处理HTML,但我 们可以创建自己的解析器来处理其他的内容类型。
<decorator-mappers>子元素定义了映射方案,SiteMesh使用这个映射方案来查找修饰 指定页面的修饰器。你可以使用<param>子元素来配置每一个映射器。SiteMesh会把这 些配置信息包装成 java.util.Properties对象传递给映射器的init()方法。
原理
解析阶段 当控制返回给PageFilter的时候,它会检查web应用生成响应的内容类型 (content type),然后基于响应类型,生成不同的解析器来解析响应。比如,如果应用返回 text/html类型的内容,SiteMesh会生成一个 FastPageParser实例,并把பைடு நூலகம்eb应用生成 的页面传递给它。FastPageParser会解析这个页面,提取出这个页面的header、 footer、title 等内容。 修饰阶段 解析结束后,SiteMesh开始修饰页面。这一阶段分成两部分。
SiteMesh页面组合利器
方法二:INCLUDE
<jsp:include page=“head.jsp” /> Content…. <jsp:include page=“foot.jsp” />
方法二:INCLUDE 缺点
子页面需要手动的引入 head和foot页面?难维 护!
SiteMesh 能帮助我们解决问题!
1、SITEMASH介绍!
Step2:Add the SiteMesh filter to web.xml
<filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Step3: 创建一个空的decorators.xml 放在WEBINF下面
<?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/decorators"> </decorators>
到此 添加成功! 只不过目前SiteMash还没有帮我们做任何事情!
3、SITEMASH原理
4、5分钟添加SITEMASH功能
基于Struts与SiteMesh框架的Web应用研究
b sdo b v atr , t d h wof e o k i h p cs f x a s it , ua i y, itn n e n ae na o ep t r S u ytet e ̄ r w r nt e s et o p n i l y r s b i mane a c dma a e n . t at icr m a s a e bi e l t a n g me t A l , o — s n
XUE Li g GE W e , a , iHAO -a g n Keg n
(mto ot r n .D p.f o p tr c , otw s Un e i , ’n7 0 6 , h a I ,f f e g , e to m ue i N r et i r t Xi 1 0 9 C i ) S wa E C S. h v sy a n
prt h w f me r dfr anw rpeettefa wok,n hsf me r i sa odwa n 0 drfrn mo et oaetet r w k a om e ersnai rme r adti r wokgv go o a o s n v a e ya dag0 eeec e d lo
模型 ( d )就 是封 装 数 据 和所 有 基 于 对这 些 数 据 Mod :
那样,每一个模式描述了一个在我们周 围不断重复发生 “
的问题 , 该 问题 的解决 方 案 的核 心 。这样 , 以及 你就 能 一
sitemesh用法
sitemesh用法(最新版)目录1.Sitemesh 简介2.Sitemesh 的使用方法3.Sitemesh 的优点与局限性正文【Sitemesh 简介】Sitemesh 是一个用于网站开发的开源框架,主要用于生成静态网站。
它可以帮助开发者快速构建网站的基本结构,包括导航栏、页面布局和内容等。
Sitemesh 不仅可以提高开发效率,还可以降低维护成本,使得网站开发更加简单和快捷。
【Sitemesh 的使用方法】Sitemesh 的使用方法分为以下几个步骤:1.下载和安装 Sitemesh:首先,需要在官方网站上下载 Sitemesh,并按照提示进行安装。
安装完成后,即可开始创建网站。
2.创建网站:在 Sitemesh 中,可以通过配置文件创建不同的网站。
每个网站都具有独立的配置和内容,可以满足不同的需求。
3.编辑网站内容:在 Sitemesh 中,可以通过编辑配置文件来修改网站的内容。
包括导航栏、页面布局和内容等,都可以轻松地进行修改。
4.生成静态网站:当网站内容编辑完成后,可以使用 Sitemesh 的命令行工具生成静态网站。
这个过程非常快速,可以在短时间内完成。
【Sitemesh 的优点与局限性】Sitemesh 的优点主要有以下几点:1.高效:Sitemesh 使用静态网站生成技术,可以大幅提高网站的加载速度,提升用户体验。
2.简单:Sitemesh 的配置文件非常简单,容易上手。
开发者只需要编辑配置文件,就可以轻松地创建和修改网站。
3.可维护性强:Sitemesh 生成的网站是静态的,因此,网站的维护成本非常低。
同时,Sitemesh 也支持多语言和多用户的管理,方便进行维护。
然而,Sitemesh 也存在一些局限性:1.功能限制:Sitemesh 主要用于生成静态网站,对于一些复杂的功能,如动态内容、数据库操作等,可能无法满足需求。
2.主题限制:Sitemesh 提供的主题有限,可能无法满足所有开发者的需求。
开源社区介绍
著名的开源社区介绍一.Apache1.Apache简介:Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为运作一个开源软件项目的Apache的团体提供支持的非盈利性组织,这个开源软件项目就是Apache 项目。
这个组织把自己作为有着相同目标的开发者与用户的团体,而不是简单的共享在一个服务器上的一组项目的组织团体。
在它所支持的Apache 项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。
Apache软件基金会正式创建于1999年,它的创建者是一个自称为"Apache组织"的群体。
这个"Apache 组织"在1999年以前就已经存在很长时间了,这个组织的开发爱好者们聚集在一起,在美国伊利诺斯大学超级计算机应用程序国家中心(National Center for Supercomputing Applications,简称为NCSA)开发的NCSA HTTPd 服务器的基础上开发与维护了一个叫Apache 的HTTP服务器。
最初NCSA HTTPd 服务器是由Rob McCool 开发出来的,但是它的最初开发者们逐渐对这个软件失去了兴趣,并转移到了其他地方,造成了没有人来对这个服务器软件提供更多的技术支持。
因为这个服务器的功能又如此强大,而代码可以自由下载修改与发布,当时这个服务器软件的一些爱好者与用户开始自发起来,互相交流并分发自己修正後的软件版本,并不断改善其功能。
为了更好进行沟通,Brian Behlendorf 自己建立了一个邮件列表,把它作为这个群体(或者社区)交流技术、维护软件的一个媒介,把代码重写与维护的工作有效组织起来。
这些开发者们逐渐地把他们这个群体称为"Apache 组织",把这个经过不断修正并改善的服务器软件命名为Apache 服务器(Apache Server)。
面试题集—武汉光谷中心整理
(电话面试)01. String和StringBuffer的区别?从回收的角度上来讲的话,显然StringBuffer对内存的消耗要小的多,如果你用到了类似于我在上面那篇文章中举的例子:String s="Hello Baidu";s=new String("Hello Baidu");s=s.concat("!"); 在内存中会有两个空间是没有指向的,也不会被回收,因为它们都还不是Null.只有等到代码结束的时候才会被回收.在我们小的程序中这样的开销还可以忽略,但是大型的工程中,大量的开销会对代码运行的速度带来很大的影响.而StringBuffer因为它支持修改字符串的值,所以用它来作为应用是安全的02. List,Map和Set之间的区别?set--其中的值不允许重复,无序的数据结构list--其中的值允许重复,因为其为有序的数据结构map--成对的数据结构,健值必须具有唯一性在java中,接口java.util.Set定义了Set的行为。
类java.util.HashSet实现了Set的接口,但是HashSet的内部实现方式是哈希表,而哈希表中判断两个对象是否重复的依据是hashcode,所以“试图把一个重复的元素插入到Set中,Set 会拒绝此类操作”中的重复是指hashcode的重复。
03. 请你使用面向对象的思想给我谈谈你对这次通话的理解?对象的理解:Person ,Phone方法的理解:Person{say(){},answer(){}}Phone{dial(){},pick(){}}04. servlet的生命周期?Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SiteMesh用法一、SiteMesh项目简介OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。
它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。
它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。
甚至于它能将HTML文件象include 那样将该文件作为一个面板的形式嵌入到别的文件中去。
所有的这些,都是GOF的Decorator模式的最生动的实现。
尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。
官方:/sitemesh/下载地址:/sitemesh/download.action 目前的最新版本是Version 2.3;二、为什么要使用SiteMesh?我们的团队开发J2EE应用的时候,经常会碰到一个比较头疼的问题:由于Web页面是由不同的人所开发,所以开发出来的界面通常是千奇百怪,通常让项目管理人员苦笑不得。
而实际上,任何一个项目都会要求界面的统一风格和美观,既然风格统一,那就说明UI层肯定有很多可以抽出来共用的静态或动态部分;如何整合这些通用的静态或动态UI呢?Apache Tiles 框架站了出来很好的解决了这一问题,再加上他与struts的完美集成,导致大小项目都把他作为UI层的首选框架,但是:Tiles确实有着它很多的不足之处,下文我会介绍,本文想说的是,除了Apache Tiles框架,其实我们还有更好的解决方案,那就是:SiteMesh;本文介绍了一个基于Web页面的布局、装饰以及应用整合的框架Sitemesh,它能帮助你为你的应用创建一致的外观,很好的取代Apache Tiles;三、SiteMesh VS Apache Tiles用过struts的朋友应该对Apache Tiles的不会陌生,我曾经有一篇文章介绍过struts中tiles框架的组合与继承,现在怎么看怎么觉得复杂;从使用角度来看,Tiles似乎是Sitemesh标签<page:applyDecorator>的一个翻版。
其实sitemesh最强的一个特性是sitemesh将decorator模式用在过滤器上。
任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装璜来自php、asp、CGI等产生的页面了。
你可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足你的需求。
它也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。
相比较而言,在这方面Tiles就逊色许多。
个人觉得在团队开发里面,Apache Tiles框架会导致所有人不仅仅要了解并且清楚Apache Tiles的存在,并且要特别熟悉每一个Tiles layout模板的作用,否则就可能出现用错模板的情况;除此之外,每个人涉及到的所有WEB页面都需要去配置文件里面逐个配置,不仅麻烦出错的几率还高;而以上所有的不足都是SiteMesh所不存在的;四、SiteMesh的基本原理一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。
五、如何使用SiteMesh这里以struts2+spring2+hibernate3构架的系统为例1、下载SiteMesh下载地址:/sitemesh/download.action 目前的最新版本是Version 2.3;2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:<!-- sitemesh配置 --><filter><filter-name>sitemesh</filter-name><filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class></filter><filter-mapping><filter-name>sitemesh</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,org.apache.struts2.dispatcher.FilterDispatcher过滤器之前,否则会有问题;4、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有)将其拷贝到/WEB-INF目录下;5、在sitemesh.xml文件中有一个property结点(如下),该结点指定了decorators.xml在工程中的位置,让sitemesh.xml能找到他;按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的value值与其匹配就行;<property name="decorators-file"value="/WEB-INF/sitemesh/decorators.xml"/>6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:我的模板:main.jsp<%@ page language="java" pageEncoding="UTF-8"%><%@taglib prefix="decorator"uri="/sitemesh/decorator"%><%@taglib prefix="page"uri="/sitemesh/page"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);%><html><head><title><decorator:title default="kangxm test" /></title><!-- 页面Head由引用模板的子页面来替换 --><decorator:head /></head><body id="page-home"><div id="page-total"><div id="page-header"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><div class="topFunc">我的账户|退出</div></td></tr></table></div></div><!-- end header --><!-- Menu Tag begin --><div id="page-menu" style="margin-top: 8px; margin-bottom: 8px;"><div>这里放菜单</div></div><!-- Menu Tag end --><div id="page-content" class="clearfix"><center><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td><decorator:body /><!-- 这里的内容由引用模板的子页面来替换 --></td></tr></table></center></div><!-- end content --><div id="page-footer" class="clearfix">这里放页面底部<!-- end footer --></div><!-- end page --></body></html>这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了,主页面区域用的是<decorator:body />标签;也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body />标签所在位置;<decorator:title default="Welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。