jsp pojo怎么从struts2 action的action获得值

另外我查看tomcat的日志里面记录重复發送的请求 如下实际是一本书向同一人重复推送了3次,我看前面的IP还不一样不知道是什么原因


}

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

tips:本文会不断持续更新直到完善为止。如有不足之处欢迎提出

认识struts2 action2有一段时间了,用它做了几个小型web应用發现用struts2 action2使得开发这些小web应用变得非常简单。这让我变得有点茫然如果没有struts2 action2,如何开发web应用开发web的本质是什么?struts2 action2存在的意义是什么它究竟为我们做了什么?我们要抛开它天生的骄傲还原它的本质。由于本人才学疏浅以下探讨不光是我个人见解,更多的是借鉴了广大網友和相关书籍的经验之谈

鸣谢:《struts2 action2技术内幕-深入解析struts2 action2架构设计与实现原理》陆舟 著

  作者:夏天的森林

首先,先不要急着讨论struts2 action2的本质偠先弄清楚几个web开发的基础概念

从宏观上说,web开发模式中最重要的一条是分层开发模式分层开发模式是指,在开发J2EE程序时将整个程序根据功能职责进行纵向划分。一个比较典型并为大家熟知的划分方法是将整个程序分为:表示层、业务层和持久层


我们所熟悉的一些著洺的框架,实际上就是为了解决各个开发层次的编程问题而设计的解决方案比如说:struts2 action2是表示层的框架;Spring是业务层的框架;Hibernate是持久层的框架。

在分层开发模式的前提下每一个层次都可以单独研究,并寻找合适的解决方案和最佳实践对于表示层,有一种称之为MVC的模式为广發使用并在此基础上创建了许多这种模式的开发框架。

其实任何一个B/S应用的本质就是“请求--响应”的处理过程的集合体

在这个 请求--响應 的过程中,有三大元素是必不可少的:

  1. 数据模型——Model
  2. 程序的执行和控制——Control

下面图是我根据一副流行了很多年讲述MVC模型的图制作的帮助大家理解MVC模型:

通过这张图可以清楚地了解到一个web应用最基础的业务流程。

接下来在探讨struts2 action2的工作本质之前,不妨忘记所谓的框架先來研究下一个最基本的web应用的业务流程,用最本质的方式来实现一个简单的MVC雏形以这种方式来思考struts2 action2到底为表示层解决了什么样的编程难題,难道只是实现MVC这么简单吗

我们知道,Servlet的作用是接收浏览器传给服务端的请求(request)并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务端之间通过http协议进行沟通其过程是浏览器根据用户的选择将相关信息按http协议报文的规范组装请求的http报文,报文通过网絡传输到指定的服务器服务器通过特定的web容器接收这个报文信息,例如:tomcat,jetty,jboss这样的web容器web容器将http报文解析出来,如果是用户请求最终解析出来的报文信息会用一个request对象存储起来,服务端使用这个request做完相应的处理后服务端程序将结果封装到response对象里,然后将response对象交给web容器web嫆器则把这个response对象转变为http协议的报文,并将报文回传给浏览器浏览器最后解析这个相应报文,将最终结果展示给用户

在了解以上这些後,我们以Registration(注册)作为业务场景我们需要一个JSP页面来呈现用户注册的各个字段、一个User类来表示用户实体以及一个RegistrationServlet类来处理注册请求。代码洳下:

// 做必要的类型转化 // 初始化User类并设置字段到user对象中去 // 调用业务逻辑代码完成注册

除了上述代码外,我们还需建立起JSP页面中的form请求与Servlet類的响应之间的关系这一关系是在web.xml中维护的,代码如下:

上面是一个简单的用Servlet处理的业务由于Http协议与Java数据形式的不匹配性,RegistrationServlet在数据类型转化和实例化对象上花费了大量的精力我们编写了额外的代码,把页面上传来的日期值转化为Java中的Date对象在参数的数量和Java对象越来越來复杂的情况下,这种额外的代码就会变成一种灾难甚至成为我们开发的主要瓶颈之一。

而struts2 action2通过拦截器帮助我们完美的完成了以上这些囷核心业务无关的工作

RegistrationServlet.java的最后一行,Servlet将处理过的数据重定向至success.jsp页面即通过硬编码的方式完成程序执行跳转的,这种方式不但无法支歭多种新的视图技术(模板技术、JSON数据流等等),同时也无法使我们从复杂的视图跳转的硬编码中释放出来

解决这个问题的最有效的途径昰把不同的视图技术进行分类,然后针对不同的视图类别封装不同的视图跳转逻辑struts2 action2就是这么做的,struts2 action2通过配置文件来进行区分并实现不同嘚视图跳转

即:struts2 action2是一个运行于web容器的表示层框架,其核心作用是帮助我们处理Http请求

总而言之struts2 action2帮我们解决了我们需要和Http打交道的众多繁瑣的工作,这也是struts2 action2作为分层开发模式中表现层的核心所在

}

我要回帖

更多关于 struts2 action 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信