Struts1与Freemarker整合:详解配置与源码示例
在Struts1框架中,与Freemarker结合使用是创建动态网页的一种常见方式。Freemarker是一种强大的模板语言,用于Java应用程序中的视图层,它允许开发者将HTML、XML等静态结构与数据动态绑定,提高开发效率和代码的可维护性。 首先,让我们理解这段配置文件的核心部分。它定义了一个名为"freemarker"的Servlet,这是由`freemarker.ext.servlet.FreemarkerServlet`类实现的。这个Servlet负责处理由Struts1 Action转发过来的数据,并将其渲染成Freemarker模板。 1. `<servlet>`标签下,`<servlet-name>`属性设置为"freemarker",表示这个Servlet的名称。`<servlet-class>`指定了FreemarkerServlet的全限定类名。 2. `<init-param>`标签用于设置Servlet的初始化参数。例如: - `TemplatePath`:设置了模板文件的根目录,值为"/",意味着所有的模板文件都位于应用的根目录下。 - `NoCache`:设置为`true`,表示请求的页面不被缓存,每次请求都会重新渲染,有利于实时更新。 - `ContentType`:设置输出内容的MIME类型为"text/html",表明返回的是HTML页面。 - `template_update_delay`:为0表示在开发环境中模板更改会立即生效,但在生产环境应设置为较高的值避免频繁刷新。 - 其他参数如`default_encoding`、`locale`和`number_format`分别用于设定默认编码、语言和地区以及数字格式。 3. `<load-on-startup>`标签指定Servlet的加载时机,值为1表示在服务器启动时立即加载,这样可以确保FreemarkerServlet尽早初始化。 4. `<servlet-mapping>`标签用于映射URL模式到这个Servlet,但这里的这部分配置信息缺失,通常会包含一个`servlet-name`和一个URL模式,比如`<servlet-mapping><servlet-name>freemarker</servlet-name><url-pattern>/freemarker/*</url-pattern></servlet-mapping>`,用于将所有以"/freemarker/"开头的URL请求路由到Freemarker Servlet。 在Struts1中,当Action完成业务逻辑后,会调用相应的ActionForward对象,该对象会指定要跳转到哪个页面,如果页面是基于Freemarker的,那么就会将数据放入Action的模型(Model)中,然后由FreemarkerServlet接收到并进行渲染。Freemarker模板中可以使用`<#assign>`或`${}`语法来访问模型中的数据,实现动态内容的插入。 总结起来,这段配置文件是在Struts1环境中启用Freemarker模板引擎的关键步骤,通过设置Servlet和初始化参数,为动态页面渲染提供了基础。开发人员需要配合Action的Model来创建和传递数据,最终实现Web应用的视图层动态展示。
<servlet-name>freemarker</servlet-name>
<servlet-class>
freemarker.ext.servlet.FreemarkerServlet
</servlet-class><!-- FreemarkerServlet settings: -->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html</param-value>
</init-param><!-- FreeMarker settings: -->
<init-param>
<param-name>template_update_delay</param-name>
<param-value>0</param-value><!-- 0 is for development only! Use higher value otherwise. -->
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>gbk</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>zh_CN</param-value>
</init-param>
<init-param>
<param-value>0.##########</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
结果是这么一句话,显示session是存在的,上网查了下,原来struts对session进行了包装,我们取到的其实不是HttpSession,而是struts包装之后的session。这样的话,要想取得session,只有这样做:
stack.context["session"]
修改ftl文件,输入下面内容:
[html] view plaincopy
<#if stack.context["session"]?exists>
<#assign s = stack.context["session"]>
<#if s["user"]?exists>
session : ${s["user"]}
</#if>
<#if s["age"]?exists>
session : ${s["age"]}
</#if>
</#if>
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦