Java Home

Java技术修炼中...
posts - 20, comments - 22, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2007年6月6日

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写

FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

FreeMarker是免费的

1、通用目标

能够生成各种文本:HTML、XML、RTF、Java源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

2、强大的模板语言

所有常用的指令:include、if/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

3、通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

4、为Web准备

在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

能够集成到Model2 Web应用框架中作为JSP的替代

支持JSP标记库

为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

5、智能的国际化和本地化

字符集智能化(内部使用UNICODE)

数字格式本地化敏感

日期和时间格式本地化敏感

非US字符集可以用作标识(如变量名)

多种不同语言的相同模板

6、强大的XML处理能力

<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树

在模板中清楚和直觉的访问XML对象模型

posted @ 2007-06-19 08:26 Yemoo'S Java Blog 阅读(484) | 评论 (0)编辑 收藏

当jsp程序出现异常时,往往是直接输出到浏览器页面上的,这样以来,可能使最终用户感到不知所措,也可能因为暴露服务器某些信息而导致服务器的安全性问题。在jsp里我们可以通过制定errorPage="xxx"以使当程序出现错误时转向指定的错误页面,但如果前期没有考虑到这个办法而在系统完成后再去这些工作则工作量可能会很大,好在jsp规范提供了一种简单的解决办法,通过在web.xml中设定全局错误处理页面来对整个项目有效,web.xml中对于不同的http返回结果或异常类型可以有不同的处理方式。
在xml中配置如下:
<error-page>
   <error-code>500</error-code>
   <location>error.jsp</location>
</error-page>
<error-page>
   <error-code>404</error-code>
   <location>notfound.jsp</location>
</error-page>

通过以上配置,程序会自动根据错误类型转向不同的错误页面。

posted @ 2007-06-06 15:59 Yemoo'S Java Blog 阅读(1748) | 评论 (0)编辑 收藏

前段时间作了一个简单的系统,其中涉及到后台管理,当然也就遇到了权限验证的问题,由于初次做J2EE项目,所有这些东西懂我来说都是个开始。
对于权限验证,如果程序由目录划分,如管理员访问的页面都放在admin下,这样我们可以写一个权限验证的过滤器,然后配置admin目录都要经过这个过滤器即可。这样对于jsp页面的权限验证比较容易。但对于action(控制器类)就不好控制了,因为action是没有目录概念的,如我们访问action的地址为:http://xxx/sample/ac1.action,同时如果使用http://xxx/sample/xx/xx/ac1.action同样可以访问,这是因为只要在这个项目目录下,访问的页面如果为action则struts就会去查询这个action名字对应的类,而不管前面的目录结构。因此我们不能再用过滤器对管理员部分的action进行验证。经过查看struts2的相关资料发现了拦截器这个有用的东西。通过struts2的配置文件的包管理功能和拦截器可以轻松的对指定的action做管理(拦截),如
===================================================
<package name="user" extends="struts-default">
  <!-- 前台用户操作部分 -->
  <!-- 框架页,显示分类 -->
  <action name="queryCateForwardUI"
   class="com.topsoft.bookmanage.web.action.QueryCateForwardActionUI">
   <result>/mainPage.jsp</result>
  </action>
    。。。。。
</package>
<!-- 管理员操作部分 -->
 <package name="manager" extends="struts-default">
  <!-- 拦截器 -->
  <interceptors>
   <interceptor name="auth" class="com.topsoft.common.LogonInterceptor" />
   <interceptor-stack name="authStack"> 
                <interceptor-ref name="auth"/> 
                <interceptor-ref name="paramsPrepareParamsStack"/> 
            </interceptor-stack> 
  </interceptors>
  <!-- 默认执行的拦截器 -->
  <default-interceptor-ref name="authStack"/>
  <!-- 全局Action映射 -->
  <global-results>
   <result name="login" type="redirect">/managerLoginUI.action</result>
  </global-results>
  
  <!-- 后台管理首页面UI -->
  <action name="managerIndexUI"
   class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI">
   <result>/admin/index.jsp</result>
  </action>
 。。。。。。
</package>
=================================================

通过使用拦截器+过滤器可以完美解决权限验证的问题。

posted @ 2007-06-06 15:17 Yemoo'S Java Blog 阅读(4952) | 评论 (6)编辑 收藏