上篇博客总结了数据流转各个方面的内容,这篇重点说一下框架对于界面上知识。

一,说到页面,记得在总体介绍中,说到Struts2比Struts1的一方面优势就是它支持更多的视图技术(Freemarker,Volicity),而,不仅仅是JSP。先简单看一下Freemarker吧!

1,简单介绍:

FreeMarker是一个“模板引擎”,生成静态页面,XML等,一个基于模板生成文本输出的第三方工具。可以实现生成HTML网页,设计人员可以用它改变外观,而无需更改或重新编译代码,因为此应用将程序逻辑(Java程序)和网页设计(FreeMarker模板)隔开。运行时可以不依赖Web服务器。也不需要编译。效率比JSP高。文件的扩展名:.ftl   文件的存放位置,一般是在WebRoot目录下。看这张图:

可以看出FreeMarker的主要思想是:模板+数据模型=输出。

2,需要我们了解此知识,使用时具体语法,参考此文:Freemarker使用

综上为页面相关内容的一些知识,主要是页面的跳转,下载跳转等,都是非常基础的知识,这里需要我们多看struts-default.xml文件中知识,通过了解其中的一些配置,以及其对应的类,是非常有意思的。

二,框架中页面跳转问题,对应Servlet+JSP开发中的重定向和转发。框架提供了四种result结果的跳转方式,分别为dispatcher,chain,redirect,redirectAction,其中dispatcher为默认的,是转发到jsp页面的意思。这些信息在struts-default.xml文件中都有设置。

1,dispatcher:为框架默认的,表示转发到期望的jsp页面。由于框架提供了拦截器,每次执行action需要执行过滤器,如果非得用dispatcher来进行action转发时,需要我们在web.xml进行设置如下:

  1. <filter>
  2. <filter-name>struts2</filter-name>
  3. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>struts2</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. <dispatcher>REQUEST</dispatcher>
  9. <dispatcher>FORWARD</dispatcher>
  10. </filter-mapping>

2,chain:专门提供Action之间进行转发操作的。表示同一次请求链。上边哪种情况很少使用的。设置如下:

a,如果两个action在同一个命名空间下进行转发:直接指定另一个action的名称即可。

  1. <package name="example" namespace="/user" extends="struts-default">
  2. <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
  3. <result name="success" type="chain">test</result>
  4. <result name="login">/login.jsp</result>
  5. </action>
  6. <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
  7. <result name="test" type="dispatcher">/test.jsp</result>
  8. </action>
  9. </package>

b,如果两个action不在同一个命名空间下进行转发,需要给result指定参数:

  1. <package name="example" namespace="/user" extends="struts-default">
  2. <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
  3. <result name="success" type="chain">
  4. <param name="namespace">/test</param> <!-- 参数名称需要参考API-(ActionChainResult)文件的说明 -->
  5. <param name="actionName">test</param>
  6. </result>
  7. <result name="login">/login.jsp</result>
  8. </action>
  9. </package>
  10. <package name="test" namespace="/test" extends="struts-default">
  11. <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
  12. <result name="test" type="dispatcher">/test.jsp</result>
  13. </action>
  14. </package>

3,redirect:表示重定向到jsp页面,设置较简单:

  1. <package name="example" namespace="/user" extends="struts-default">
  2. <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
  3. <result name="success" type="redirect">/success.jsp</result>
  4. <result name="login">/login.jsp</result>
  5. </action>
  6. </package>

redirect也可以重定向到action,在重定向action时,不管action是否在同一个命名空间下,只要指定重定向action的完整路径即可,例如:

  1. <package name="example" namespace="/user" extends="struts-default">
  2. <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
  3. <!-- 路径指定时需要增加合法的扩展名,但是项目中的扩展名一旦改变会影响我们的路径配置。 -->
  4. <result name="success" type="redirect">/user/test.action</result>
  5. <result name="login">/login.jsp</result>
  6. </action>
  7. <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
  8. <result name="test" type="redirect">/test.jsp</result>
  9. </action>
  10. </package>

4,redirectAction:专门用来重定向Action的。这个的设置和chain,专门用来转发action的设置一样,不在演示。

三,result中还有包括我们特殊的文件下载,文件下载就是服务器将资源文件以流的方式传递给浏览器。

1,在配置文件以流的方式作为结果类型进行跳转,不同于上边的几种,例如:

  1. <result name="success" type="stream">
  2. <!-- 内容类型可以参照:CATALINA_HOME\conf\web.xml -->
  3. <param name="contentType">image/gif</param>
  4. <param name="inputName">imageStream</param>
  5. <param name="contentDisposition">attachment;filename="${filename}"</param>
  6. <param name="bufferSize">1024</param>
  7. </result>

2,在action中增加输入流属性,其名和配置文件中的要一样,一遍反射获取,还有就是文件名属性,

  1. private String filename ;//获取文件名
  2. private InputStream imageStream; // 读取下载的文件
  3. //从WebRoot目录下读取文件
  4. imageStream = ServletActionContext.getServletContext().getResourceAsStream("文件名");

3,当然下载时 ,我们会先生成excel表格,或者其他office文档,进行处理,这是就涉及到JAVA和office的联合处理,这里给大家推荐一个很好用的第三方组件POI,进行对Office文档的生成。首先引进其jar包,这里几个简单例子:

  1. //使用特殊的方式来操作Excle文档:(将生成的文档输出到缓冲区中)
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. Workbook wb = getWorkBook();
  4. wb.write(baos) ; //将文档对象数据生成到内存中(相当于存储到缓冲区中)
  5. imageStream = new ByteArrayInputStream(baos.toByteArray());

更多POI知识,请参考:POI百科     POI中文帮助文档

综上为页面相关内容的一些知识,主要是页面的跳转,下载跳转等,都是非常基础的知识,这里需要我们多看struts-default.xml文件中知识,通过了解其中的一些配置,以及其对应的类,是非常有意思的。

Struts2(四)——页面相关内容的更多相关文章

  1. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  2. Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

    后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...

  3. scrapy(四): 爬取二级页面的内容

    scrapy爬取二级页面的内容 1.定义数据结构item.py文件 # -*- coding: utf-8 -*- ''' field: item.py ''' # Define here the m ...

  4. seo一些相关内容

    PR值算法原理总体上基于下面2个前提: 1.一个网页被多次引用,则它可能是很重要的: 一个网页虽然没有被多次引用,但是被重要的网页引用,则它也可能是很重要的:一个网页的重要性被平均的传递到它所引用的网 ...

  5. web页面相关的一些常见可用字符介绍——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1623 正文开始之前先 ...

  6. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

  7. 6月15日 python学习总结 Django模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  8. jQuery实现页内查找相关内容

    当需要在页面中查找某个关键字时,一是可以通过浏览器的查找功能实现,二是可以通过前端脚本准确查找定位,本文介绍通过jQuery实现的页面内容查找定位的功能,并可扩展显示查找后的相关信息. 本文以查找车站 ...

  9. web页面相关的一些常见可用字符介绍

    首先是一张图片,是一张一些字符以及想对应的HTML实体表示的对照图片.如下: 一.引号模样或内心的些字符 请选择该表格要呈现的字体: 字符以及HTML实体 描述以及说明 " " 这 ...

随机推荐

  1. yii2学习的论坛

    http://www.yiifans.com/forum.php http://www.yiichina.com/ http://www.yiichina.com/

  2. 《招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  3. openldap---ldapsearch使用

    ldapsearch 參数表 下表描写叙述能够用于 ldapsearch 的区分大写和小写的參数. 參数 用途 -? 打印关于使用 ldapsearch 的帮助. -a deref 指定别名反向引用. ...

  4. iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

    iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...

  5. Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...

  6. vue 单页面应用实战

    1. 为什么要 SPA? SPA: 就是俗称的单页应用(Single Page Web Application). 在移动端,特别是 hybrid 方式的H5应用中,性能问题一直是痛点. 使用 SPA ...

  7. java 中打印调用栈

    source-code: public class A { public A() {} private static void printStackTrace() {         StackTra ...

  8. Android 加速Gradle构建项目

    1. 升级gradle 进入项目文件夹$project/gradle/wrapper/gradle-wrapper.properties, 使用最新的gradle. 修改替换为最新的 distribu ...

  9. uva 12100 Printer Queue

    The only printer in the computer science students' union is experiencing an extremely heavy workload ...

  10. poj 3158kickdown

    我是来吐槽poj的!!! 第一次做poj,被题目中的输入输出格式打败了 ,醉了醉了 Description A research laboratory of a world-leading autom ...