`

servlet和jsp的区别,servlet和Action的区别,servlet的线程安全性

 
阅读更多
servlet和jsp的区别,servlet和Action的区别,servlet的线程安全性
Posted on 2010-08-29 16:56 菜鸟都不容易 阅读(1761) 评论(1) 编辑 收藏 
最近学习Servlet和jsp,学习过程中有一些疑问和想法,上网找答案,下面是一些总结:
一、jsp和servlet的区别

在学习到jsp的时候,我发现jsp实际的概念和自己原来的理解有很大差异,我一直简单的以为jsp就是在html标签里签入了一些java和js代码而已,原来jsp其实本身就对应一个servlet。上网百度jsp和servlet的区别。利用servlet本身就可以完成网页的制作,利用它可以实现页面间的传值,页面的显示(利用response.write输出html标签)等操作。但是servlet把业务逻辑的处理和页面的显示代码混杂在一起,不易维护。于是Sun公司开发jsp用于独立显示页面,然后把业务逻辑层的信息放到JavaBean里。完全可以在jsp里嵌入java代码完成servlet的功能,jsp本身就对应一个servlet。所以学习servlet有利于更好的理解jsp,学习了jsp一定要学习JavaBean,单纯的学习jsp和单纯学习servlet一样没有什么意义。
在学习servlet的过程中我发现,servlet可以完成跳转页面的功能,和struct里面的Action比较类似。于是百度servlet和Action的区别。网上这方面的资料很少,可能是我的这个问题本身问的就不对。我自己理解为struct包中的Action有一个dispatchAction子类。在java web开发中,原始的配置action都是使用一个action类实现一个功能,如果工程项目够大,action类数目会很多,就增加了该项目后期的维护难度。DispatchAction继承自Action类,它是一个抽象类,封装了一些基础方法,来解决使用一个Action处理多个操作的能力,这就是DispatchAction最大的用途,它可以帮助我们用一个Action类,封装一套类似的操作方法,节省了类的数目,同时也减轻了后期维护的困难。
DispatchAction中主要包括以下几个方法:protected ActionForward dispatchMethod  protected java.lang.reflect.Method getMethod   protected java.lang.String getMethodNameDispatchAction,在配置上与标准的Action稍有不同,就是要在Action配置文件中多一个parameter属性,这个属性将指导DispatchAction找到对应的方法,例如这样配置:<action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/>parameter的属性值是可以任意起的,只要你记得在传参数的时候统一就可以了。比如我写了一个类似这样的Action,它继承自DispatchAction类,包含了三个操作方法,有Add(),Update(),Delete()。当我想要调用这个Action的Update操作时,提交的URL应该类似这样的:
saveSubscription.do?method=Update 就是这么简单,不过非常方便我们程序员了,开发中我感觉的确省了好多代码,至少以前的三个类文件变成了现在一个类了,而且在后期维护的时候感觉也是方便很多。 需要注意的是:在调用DispatchAction的时候method参数是不能为空的,如果空,DispatchAction会调用unspecified方法并抛出异常。但是可以不传递method这个参数,这样dispatchAction就会调用defaultforward方法。所以我感觉dispatchAction相当于servlet的功能(这种理解有待考证)。


二、servlet和Action的区别 servlet的线程安全的问题

在查找servlet和Action的区别的时候,搜索的资料大都是关于servlet的线程安全的问题,于是就顺便看了看。
http://terryjs.javaeye.com/blog/739167这个帖子讲了在大量用户访问同一个servlet的时候有可能会出现不同步的现象,每访问一次servlet,OS就会分配一个线程,虽然servlet只被实例化一次(这里也是相对而言,请看注释1),但是可能会出现数据不一致的情况,这个帖子还列举了一个实例以及如何设计线程安全的Servlet。
http://www.javaeye.com/topic/225749这个帖子从jvm的内存机制出发说明了为什么会出现数据不同步的现象。讨论了java的内存机制就是堆栈和帧的使用。
通过这两个帖子我理解到,java类被实例化后,类的实例和实例变量是放在堆里,而方法里的局部变量和形参以及一些引用,是放在各自的栈里,堆是共享的,而栈是不共享的。所以要设计线程安全的servlet就要尽可能少的使用共享资源,而是变量局部化。每一个方法里的变量只有被执行到的时候才会被创建,所以每一个线程都有各自的栈来存放这些局部变量。因此不存在共享的问题。而struts里的Action也和servlet类似也是线程不安全的。也要注意尽量不要使用实例变量。如果使用实例变量,但是实例变量是final型或者在方法里没有再赋值也是线程安全的。



【注释1】:Servlet的单例不由class来决定,而是由您在web.xml里配置的servlet-name来决定。也就是说每一个servlet-name只有1个单例。当你有3个不同的serlvet-name指定了相同的1个servlet-class时,容器会产生3个不同的servlet object。

分享到:
评论

相关推荐

    servlet与Struts action线程安全问题分析(pdf)

    #### 三、Servlet线程安全问题 线程安全问题主要发生在Servlet中使用实例变量时。当多个线程并发访问同一个Servlet实例时,如果这些线程试图同时修改实例变量,就可能发生数据不一致的情况。以下通过一个具体的示例...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    servlet jsp javabean 实现的文件上传

    在Java Web开发中,Servlet、JSP和JavaBean是三个核心组件,它们共同协作来构建动态网站应用。这里我们将深入探讨如何使用这三个技术实现文件上传功能。 Servlet是Java编程语言中的一个接口,由Java Servlet API...

    servlet jsp

    JSP页面在服务器端被转换成Servlet并编译执行,动态部分由Java脚本元素表示,如`&lt;%= expression %&gt;`、`&lt;jsp:scriptlet&gt;`和`&lt;jsp:action&gt;`。JSP标签库(Tag Libraries)进一步增强了可复用性和模块化。 3. **Servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    servlet和struts2笔记

    ### servlet和struts2笔记 #### 一、Servlet 基础 ...Servlet 可以看作是服务器端的小程序,它们能够动态地生成内容。...此外,掌握 Servlet 的路径配置和线程安全问题是确保应用程序稳定性和性能的关键。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    初学Jsp与JavaServlet(PPT)

    JSP(JavaServer Pages)和JavaServlet都是Java Web开发中的核心技术,它们协同工作,为开发者提供了构建动态网页的强大工具。 **JavaServlet**是Java平台上的一个服务器端编程接口,它扩展了Web服务器的功能,允许...

    JAVA+JSP+Servlet+android+SSH视频教程全集+项目视频 亲自总结

    ### JAVA+JSP+Servlet+Android+SSH视频教程全集+项目视频知识点解析 #### Java基础知识及应用 Java作为一门跨平台的高级编程语言,在软件开发领域占据着重要的地位。本教程将涵盖Java基础语法、面向对象编程(OOP)...

    Java_Servlet入门教程.pdf

    `ServletContext`允许在整个Web应用范围内共享数据,而`HttpSession`则是在一个用户的会话期间存储数据,确保数据的持久性和安全性。 #### 五、HttpServlet类详解 `HttpServlet`是Servlet的一种标准实现,它简化了...

    JSP+JAVABEAN+SERVLET

    - **线程安全性**:Servlet 是线程安全的,能够同时处理多个客户端请求。 - **高度可扩展性**:可以通过部署新的 Servlet 动态地添加新的功能。 **示例解析:** - 基于 JSP+JavaBean+Servlet 的系统架构中,通常会...

    Servlet和ssh方面的面试题

    - 解释一下Servlet的单线程模型和多线程模型。 - 如何实现Servlet的会话跟踪? - 举例说明Filter和Listener的应用场景。 掌握这些知识点对于理解Servlet以及在面试中脱颖而出至关重要。同时,对于SSH框架的理解...

    servlet 详细入门教程,工作原理、编译、通过 JSP 页面调用 servlet

    本文详细介绍了 Servlet 的基本概念、工作原理以及常见应用场景,包括编译和安装、通过 JSP 调用、共享变量、使用 `HttpServlet` 类、文件读写、数据库访问和会话管理等内容。Servlet 作为 Java Web 开发的核心技术...

    JSP教学课件PPT

    在本文中,我们将深入探讨Java服务器页面(JSP)和Servlet技术,这些是构建Web应用程序的基础。首先,我们回顾Servlet的基本概念,它是一种服务器端的Java程序,用于生成动态网页内容。 Servlet的生命周期包括初始...

    servlet struct J2EE 课件

    本套J2EE课件涵盖了Servlet的基本概念、会话管理以及Struts框架的应用,包括其配置、标签库和Action的使用。通过学习,开发者可以掌握Java Web开发中的关键技术和实践,为构建高效、可维护的企业级应用打下坚实基础...

    WEB多线程开发

    在处理并发请求时,JSP和其背后的Servlet容器(如Tomcat)会利用多线程来提高性能。 2. **Servlet**:Servlet是Java编写的小型服务器端程序,用于扩展服务器功能。它们在Web服务器内部运行,接收和响应HTTP请求。...

    Servlet面试题.pdf

    这是基于ActionServlet的工作原理,通常情况下,Struts框架会使用单例模式处理Action类。 - C. 每个子应用对应一个单独的RequestProcessor实例。RequestProcessor是Struts中的核心组件,每个子应用(或模块)都有一...

    servlet AND Struts2笔记

    - **线程安全性问题**: - 在多线程环境下,如果Servlet中有成员变量来保存用户数据,则可能存在线程安全问题。 - 解决方案: - 实现`SingleThreadModel`接口(不推荐,因为这会影响Servlet的性能)。 - 使用...

    Servlet学习必备

    - **多线程安全性**:`init()`方法在整个生命周期中只被调用一次,因此无需特别考虑多线程安全问题。 #### 九、多线程安全 - **重要性**:由于Servlet可能会同时处理多个客户端的请求,因此必须保证线程安全。 - *...

Global site tag (gtag.js) - Google Analytics