2019独角兽企业重金招聘Python工程师标准>>>

一,说到页面,记得在总体介绍中,说到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());

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

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

转载于:https://my.oschina.net/huangcongcong/blog/504204

Struts2——学习(5):页面跳转相关推荐

  1. Struts2 学习系列 (3) 跳转类型与通配符映射

    2019独角兽企业重金招聘Python工程师标准>>> 跳转类型 chain:Action链式处理的结果类型,也就是将结果转发到这个action中. chart:整合JFreeCha ...

  2. 新浪微博客户端学习1--logo页面跳转login页面

    插入背景图片 Android使用的图片都是png格式的,使用时不必写.png Android:layout_gravity是的此标签的位置,android:gravity指的是此标签里面的组件 给图片 ...

  3. 微信小程序开发:学习笔记[8]——页面跳转及传参

    微信小程序开发:学习笔记[8]--页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...

  4. java拦截器跳转页面跳转页面跳转_java Struts2 在拦截器里的跳转问题

    前几天,自已写了一个拦截器,当在里面跳转时,报了一个如下异常,但页面能正常跳转 java.lang.IllegalStateException at org.apache.catalina.conne ...

  5. Silverlight学习笔记之页面跳转

    在进行项目开发的时候,经常遇到页面之间的跳转,包括silverlight之间以及silverlight和html之间的跳转. silverlight之间的页面跳转包含两点: 1.主窗体和子窗体 用户新 ...

  6. html5只能django来写if吗,(4)Django学习——模板标签定义及语法:for循环,if判断,页面跳转,开启关闭自动转义,ur...

    1.常用标签 (1)模板标签重要概念: 1.定义:标签在渲染的过程中提供任意的逻辑 注意:(这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结构,例如"if"语句或&q ...

  7. Axure 交互学习1 基础页面跳转、鼠标悬停样式

    这是一个非常简单基础的页面跳转 1.首先创建两个页面 page1和page2 page1放一个按钮    page2放一个按钮 2.为page1的按钮添加交互动作 1⃣️选中按钮 2⃣️在交互中选择  ...

  8. Android 学习(四)——Android Studio 页面跳转

    一.显式意图跳转 1.设置按键(参考第三次作业:设置按键的三种基本方式) 2.新建Activity2 3.按键侦听,设置页面跳转 Intent intent = new Intent(this,Mai ...

  9. 微信小程序学习之五种页面跳转方法.

    第一种:<navigator></navigator>标签. 这是最常见的一种跳转方式,相当于html里的a标签.但需要注意的是 该方法不能跳转tabbar页面. 格式为: & ...

最新文章

  1. activemq启动异常
  2. QML基础类型之vector4d
  3. Linux设置SFTP服务用户目录权限
  4. 【渝粤教育】21秋期末考试工程项目管理10324k2
  5. firefox火狐浏览器怎么清除缓存 火狐浏览器清理cookie教程
  6. 糖果传递(信息学奥赛一本通-T1432)
  7. mongoDB高级查询
  8. Swift中类与结构的初始化
  9. 用C语言实现:打印100-200之间的素数。
  10. 飞行器比赛制作过程中的资料搜集(2018.5~6月)
  11. 用命令关闭计算机,使用DOS命令关机的操作步骤
  12. js动态填充select
  13. qq最低Android版本,QQ精简版官方下载-QQ精简版低内存apkv3.2.0.361 安卓版-腾牛安卓网...
  14. depends-on
  15. echart柱状图和折线图混合
  16. 【原创】我所亲证的气功层次 ——了空居士
  17. mysql中的unix_timestamp函数
  18. 全国最新行政区划sql文件
  19. 基带信号、载波、带通信号
  20. 一份实用的seo整体优化方案

热门文章

  1. java open_java-OpenIMAJ Jar文件
  2. 倒梁法matlab,在编制措施项目清单时,关于钢筋混凝土模版及支架费项目,应在清单中列明(    )...
  3. java 泛型反射_Java使用反射来获取泛型信息示例
  4. 显示域用户登录的ip或计算机名,如何在使用PowerShell脚本或者VBS脚本,查看域内正在登录的域用户名、主机名和主机IP地址...
  5. linux字符串转为二进制,Linux printf将十进制转换为二进制?
  6. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
  7. 聊聊Mysql的那些破事儿
  8. nfs原理及安装配置
  9. 联想g400从u盘启动计算机,联想g400u盘装系统的方法
  10. python连接access数据库查询并打印出来_Python连接Access和读取Access数据库的例子