当前位置: 首页 > news >正文

Struts2总结


Struts2总结

接触Struts2已经接近一个月,与同样接触没有很长时间的Struts相比,也确实感觉到了很多令人耳目一新的感觉。今天有必要对Struts2的学习做一下总结。以前曾经写过一篇博文《Struts,Struts2WebWork的比较》,对这三种框架进行了综合性地叙述和比较。现在是对Struts2的总结。
Struts2的处理流程如下:
1.用户请求对Web应用执行某个动作后,Web浏览器将要求某些资源的请求发送到Web服务器。
2.服务器小程序过滤器调度程序接到请求后,分析请求,然后确定调用相应的动作,提供资源。
3.在Action被执行之前,经配置后把一些常见功能(如验证、工作流或者文件上传)作用到请求上的一组拦截器上,可自动作用到该请求上。
4Action类的一个新实例被创建,然后执行动作方法,用于把信息存储到数据库,或从数据库获取信息。
5.结果显示输出——无论输出的是HTML、图像、PDF还是其他某种格式。
6.然后,请求按照相反顺序通过拦截器传送。返回的请求允许执行其他的处理或者清理操作。
7.最后,容器把输出发送到浏览器。
 
Struts2Struts相比的的特点
1.struts2所用到的技术就是webwork的技术,它所用到的表达式语言是ognl语言,这是种非常强大的对象导航语言。(ognl-2.6.11.jar
2: struts2中不使用actionform管理表单,在struts2中用的action,整合了strtus中的actionactionform
3.struts2中是通过标签来对表单和实体bean进行管理的,在struts2中提供了一套标签非常灵活。
 
构建Struts2应用的步骤:
1.        将所需Struts2 jar包拷贝到WEB工程的/WEB-INF/lib目录下。
2.        配置web.xml文件,增加Struts2的映射。web.xml文件配置如下:
 
     < filter-mapping >
        < filter-name > characterEncoding </ filter-name >
        < url-pattern > /* </ url-pattern >
     </ filter-mapping >
-    < 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 >
     </ filter-mapping >
web.xml中定义了一个struts2FilterDispathcer(拦截器:Struts2 技术的核心)的filter FilterDispatcher用来初始化struts2并且处理所有的Web请求。
3.        编写Action类,DAObean类,整合HibernateSpring框架。
Struts.xml中的配置如下:
<? xml  version = "1.0"  encoding = "UTF-8"  ?>
   <!-- 设置编码方式,通常设置为中文编码 -->
<! DOCTYPE  struts  PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd" >
 
< struts >
 
     < constant  name = "struts.enable.DynamicMethodInvocation"  value = "false"  />
     < constant  name = "struts.devMode"  value = "false"  />
     < constant  name = "struts.custom.i18n.resources"  value = "globalMessages" />
     <!--  上传文件大小  -->
     < constant  name = "struts.multipart.maxSize"  value = "5242880"  />
      <!— 避免 Team 工作时系统资源的争夺  -->
     < include  file = "struts-example.xml" />
     < include  file = "struts-login.xml" />
 
   ...
 
     < include  file = "struts-personal.xml" />
   
     < package  name = "default"  extends = "struts-default" >
   
       < interceptors >
        < interceptor  class = "com.cumt.web.filter.LoginInterceptor"  name = "loginInterceptor"  />
        < interceptor-stack  name = "CheckLogin" >
              < interceptor-ref  name = "defaultStack"  />
              < interceptor-ref  name = "loginInterceptor"  />
        </ interceptor-stack >
       </ interceptors >
   
  
     <!--  这里放全局的  -->
     < global-results >
        < result  name = "login" > /loginError.jsp </ result >
        < result  name = "error" > /error.jsp </ result >
        < result  name = "index"  type = "redirect" > Index.action </ result >
        < result  name = "addLeader"  type = "redirect" > /public/addLeader.jsp </ result >
        < result  name = "addDepartment"
 
...
 
     </ global-results >
   
      < action  name = "Index"  >
           < result  name = "success" > /main.jsp </ result >
            < interceptor-ref  name = "CheckLogin"  />
      </ action >
   
    </ package >
 
</ struts >
 
Struts-login.xml中的配置如下:
<? xml  version = "1.0"  encoding = "UTF-8"  ?>
<! DOCTYPE  struts  PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
         "http://struts.apache.org/dtds/struts-2.0.dtd" >
 
< struts >
 
     < package  name = "login"  namespace = ""  extends = "default" >
      
  < action  name = "Login*"  method = "{1}"  class = "LoginAction" >
             < result  name = "input" > /login.jsp </ result >
             < result  type = "redirectAction" > Index </ result >
         </ action >      
 
     </ package >
</ struts >
4.        Struts2的类型转换,输入校验,核心拦截器,国际化,标签库以及对Spring,Hibernate,JSF的整合以后有时间还会做一个总结,大家可以参看这样一本书:
 
最后给大家推荐本书三扬科技编著,电子工业出版社出版:《开发者突击:Struts2核心技术与JavaEE框架整合开发实战》



     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/168300,如需转载请自行联系原作者

相关文章:

  • 数组扁平化
  • Lucene学习总结之二:Lucene的总体架构
  • [SHELL]shell scripts笔记(1)
  • 我所认识的git
  • Jmeter入门--性能测试实战
  • 缓存导致上线后,访问404
  • 学习笔记TF060:图像语音结合,看图说话
  • Win server 2012 R2 文件服务器--(二)权限设置
  • Ubuntu14.04下编译安装或apt-get方式安装搭建Apache或Httpd服务(图文详解)
  • 链接静态库的顺序问题
  • 设计模式命令
  • 垃圾回收机制及析构器原理解析
  • 基于Maven管理的JavaWeb项目目录结构参考
  • Excel Interactive View - 让页面表格的功能更强大
  • Nginx 错误集合
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【前端学习】-粗谈选择器
  • 5、React组件事件详解
  • Angular2开发踩坑系列-生产环境编译
  • CSS 提示工具(Tooltip)
  • input实现文字超出省略号功能
  • jquery ajax学习笔记
  • Material Design
  • 反思总结然后整装待发
  • 仿天猫超市收藏抛物线动画工具库
  • 工程优化暨babel升级小记
  • 用Python写一份独特的元宵节祝福
  • 智能合约开发环境搭建及Hello World合约
  • 白色的风信子
  • 你对linux中grep命令知道多少?
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 正则表达式-基础知识Review
  • ​Java并发新构件之Exchanger
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #if #elif #endif
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $(function(){})与(function($){....})(jQuery)的区别
  • (06)金属布线——为半导体注入生命的连接
  • (多级缓存)缓存同步
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)终结任务
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转载)Linux 多线程条件变量同步
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .htaccess配置常用技巧
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET多线程执行函数
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /etc/sudoers (root权限管理)
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解