Struts2(四)——页面相关内容
上篇博客总结了数据流转各个方面的内容,这篇重点说一下框架对于界面上知识。
一,说到页面,记得在总体介绍中,说到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进行设置如下:
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- </filter-mapping>
2,chain:专门提供Action之间进行转发操作的。表示同一次请求链。上边哪种情况很少使用的。设置如下:
a,如果两个action在同一个命名空间下进行转发:直接指定另一个action的名称即可。
- <package name="example" namespace="/user" extends="struts-default">
- <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
- <result name="success" type="chain">test</result>
- <result name="login">/login.jsp</result>
- </action>
- <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
- <result name="test" type="dispatcher">/test.jsp</result>
- </action>
- </package>
b,如果两个action不在同一个命名空间下进行转发,需要给result指定参数:
- <package name="example" namespace="/user" extends="struts-default">
- <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
- <result name="success" type="chain">
- <param name="namespace">/test</param> <!-- 参数名称需要参考API-(ActionChainResult)文件的说明 -->
- <param name="actionName">test</param>
- </result>
- <result name="login">/login.jsp</result>
- </action>
- </package>
- <package name="test" namespace="/test" extends="struts-default">
- <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
- <result name="test" type="dispatcher">/test.jsp</result>
- </action>
- </package>
3,redirect:表示重定向到jsp页面,设置较简单:
- <package name="example" namespace="/user" extends="struts-default">
- <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
- <result name="success" type="redirect">/success.jsp</result>
- <result name="login">/login.jsp</result>
- </action>
- </package>
redirect也可以重定向到action,在重定向action时,不管action是否在同一个命名空间下,只要指定重定向action的完整路径即可,例如:
- <package name="example" namespace="/user" extends="struts-default">
- <action name="login" class="com.ljh.struts2.action.LoginAction" method="login">
- <!-- 路径指定时需要增加合法的扩展名,但是项目中的扩展名一旦改变会影响我们的路径配置。 -->
- <result name="success" type="redirect">/user/test.action</result>
- <result name="login">/login.jsp</result>
- </action>
- <action name="test" class="com.ljh.struts2.action.TestAction" method="test">
- <result name="test" type="redirect">/test.jsp</result>
- </action>
- </package>
4,redirectAction:专门用来重定向Action的。这个的设置和chain,专门用来转发action的设置一样,不在演示。
三,result中还有包括我们特殊的文件下载,文件下载就是服务器将资源文件以流的方式传递给浏览器。
1,在配置文件以流的方式作为结果类型进行跳转,不同于上边的几种,例如:
- <result name="success" type="stream">
- <!-- 内容类型可以参照:CATALINA_HOME\conf\web.xml -->
- <param name="contentType">image/gif</param>
- <param name="inputName">imageStream</param>
- <param name="contentDisposition">attachment;filename="${filename}"</param>
- <param name="bufferSize">1024</param>
- </result>
2,在action中增加输入流属性,其名和配置文件中的要一样,一遍反射获取,还有就是文件名属性,
- private String filename ;//获取文件名
- private InputStream imageStream; // 读取下载的文件
- //从WebRoot目录下读取文件
- imageStream = ServletActionContext.getServletContext().getResourceAsStream("文件名");
3,当然下载时 ,我们会先生成excel表格,或者其他office文档,进行处理,这是就涉及到JAVA和office的联合处理,这里给大家推荐一个很好用的第三方组件POI,进行对Office文档的生成。首先引进其jar包,这里几个简单例子:
- //使用特殊的方式来操作Excle文档:(将生成的文档输出到缓冲区中)
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Workbook wb = getWorkBook();
- wb.write(baos) ; //将文档对象数据生成到内存中(相当于存储到缓冲区中)
- imageStream = new ByteArrayInputStream(baos.toByteArray());
综上为页面相关内容的一些知识,主要是页面的跳转,下载跳转等,都是非常基础的知识,这里需要我们多看struts-default.xml文件中知识,通过了解其中的一些配置,以及其对应的类,是非常有意思的。
Struts2(四)——页面相关内容的更多相关文章
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容
后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...
- scrapy(四): 爬取二级页面的内容
scrapy爬取二级页面的内容 1.定义数据结构item.py文件 # -*- coding: utf-8 -*- ''' field: item.py ''' # Define here the m ...
- seo一些相关内容
PR值算法原理总体上基于下面2个前提: 1.一个网页被多次引用,则它可能是很重要的: 一个网页虽然没有被多次引用,但是被重要的网页引用,则它也可能是很重要的:一个网页的重要性被平均的传递到它所引用的网 ...
- web页面相关的一些常见可用字符介绍——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1623 正文开始之前先 ...
- 对MYSQL注入相关内容及部分Trick的归类小结
前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- jQuery实现页内查找相关内容
当需要在页面中查找某个关键字时,一是可以通过浏览器的查找功能实现,二是可以通过前端脚本准确查找定位,本文介绍通过jQuery实现的页面内容查找定位的功能,并可扩展显示查找后的相关信息. 本文以查找车站 ...
- web页面相关的一些常见可用字符介绍
首先是一张图片,是一张一些字符以及想对应的HTML实体表示的对照图片.如下: 一.引号模样或内心的些字符 请选择该表格要呈现的字体: 字符以及HTML实体 描述以及说明 " " 这 ...
随机推荐
- Session,有没有必要使用它?
阅读目录 开始 Session的来龙去脉 Session对并发访问的影响 Session的缺点总结 不使用Session的替代方法 Asp.net MVC 中的Session 现有的代码怎么办? 今天 ...
- hdu 4923 Room and Moor (单调栈+思维)
题意: 给一个0和1组成的序列a,要构造一个相同长度的序列b.b要满足非严格单调,且 值为0到1的实数.最后使得 sum((ai-bi)^2)最小. 算法: 首先a序列開始的连续0和末尾的连续1是能 ...
- [Immutable.js] Working with Subsets of an Immutable.js Map()
Immutable.js offers methods to break immutable structures into subsets much like Array--for instance ...
- 解决ERROR 2006 (HY000): MySQL server has gone away
刚把博客从百度云搬到腾讯云,发现文章少了几篇.当时在导入dump数据的时候,就曾经发现mysql提示: ERROR 2006 (HY000): MySQL server has gone away N ...
- JavaScript ----------------- 原型式继承
思想:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型.为了达到这个目的,看看下面的实现方式 function object(o){ function F(){ } F.protot ...
- 修改sqlserver2008中表的schema
schema类似命名空间,相同schema中不能有同样的表名,不用schema下可以有相同的表名 修改schema的方法: 在数据库的 安全性->架构 中添加一个新的架构 找到要修改的表,右击设 ...
- 关于uisliderview 监听停止滑动的状态
今天遇到一个问题,做颜色控制的时候,通过slider 改变颜色的亮度.如果直接在slider 上绑定事件,则改变一次就需要向服务器发送一次请求.这种是显然不合理的. 所以使用了下面的解决方法 先将sl ...
- Struts 2读书笔记-----Action访问Servlet API
Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...
- 如何利用自己的电脑做服务器发布tomcat的WEB项目供外网访问
1.首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址,然后继续下面操作. 2.拿到外网IP地址,进行tomcat的server.xml文件的配置. ...
- noip2015 提高组day1、day2
NOIP201505神奇的幻方 试题描述 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3,……,N∗N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方 ...