`
xt00002003
  • 浏览: 21110 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

对web项目写法的一点点领悟

    博客分类:
  • Java
阅读更多

我们访问一个web应用系统的流程一般是这样的:

1.用户输入相应的url地址,web容器首先接受到了用户的请求。然后根据加载的web.xml中映射的地址把请求的参数封装到相应的对象中,然后以方法参数的方式传递给应用程序。

2.应用程序接受到了参数进行一系列的逻辑处理然后再返回给用户。

 

这个过程基本上所有的java开发人员都很熟悉。我以前对于网上说的一些结论不是很好的能理解。结论如下:

1.Servlet是线程不安全的

2.Servlet是单例的

 

以前没有仔细去思考这些,只是把结论记住了。今天来好好分析和梳理下为什么是这样的。

什么是线程安全的,网上答案很多。其中有一个比较重要:局部变量。局部变量是各个线程私有的。也就是通常所说的线程安全的。为什么呢?因为局部变量是在方法中定义的变量。局部变量保存在栈区中。

 



 

根据上面的jvm内存结构说明可以看出,栈区是每个线程私有的。所以局部变量才能保证是线程安全的。

而方法的参数同样是每个线程私有的。

 

理解了上面的原理,再来想想我们平时的web项目。在使用了mvc框架的时候,一般习惯的写法都是:

controller层把service层的变量定义成成员变量、service层把dao层的变量定义成成员变量。然后使用spring的注入方式去实例化成员变量。而且需要注意的是:serlvet并不是每次都创建一个新的对象的,在web容器中使用了单例模式。spring实例化类的时候如果没有特殊配置,默认也是单例模式的。

 

这样问题就出现了:成员变量不是线程安全的,但为什么我们在编写web项目的时候都这样写呢?单例本身有可能会造成线程不安全为什么web容器和spring都会使用呢?

 

我的理解是:单例虽然可能线程不安全,但是性能要高。因为只创建了一个对象。然后再仔细想想我们的使用过程,spring注入bean之后我们一直在使用很少去修改。再想想什么情况下会产生并发问题:当多个线程对同一资源进行变更的时候会出现问题。如果多个线程对同一个资源只是读取是不会有任何问题的。所以我们这样的编写习惯是不会产生并发问题的。

 

当然如果自己去定义成员变量,要对成员变量去变更操作的话。还是需要考虑并发问题的。 

  • 大小: 22.4 KB
0
4
分享到:
评论

相关推荐

    科技申报项目写法.pptx

    科技申报项目写法.pptx

    各类科研基金项目中英文名称写法

    一个关于中国各类科研基金项目中英文翻译名称写法的整理文档,希望对大家有帮助。

    PostController--控制器调用webapi方法.zip_7AIL_C# webAPI_C# webapi_LY6_

    在.NET框架中,C#是一种常用的编程语言,用于构建各种应用程序,包括WebAPI服务。WebAPI是ASP.NET框架的一部分,允许开发人员构建RESTful服务,这些服务可以接收和响应HTTP请求,通常用于创建数据驱动的Web应用。在...

    HTML规范及正确写法

    8. 事件处理:使用 `onclick` 属性时必须和 `onkeypress` 属性成对出现。 9. URL 传值:使用 `&` 替换 `&` 传值。 四、缩近规则 缩近规则是指编写 HTML 代码时的缩进格式,以 `Tab` 键为准,保持代码的美观和...

    项目章程的具体写法,里面有表格

    "项目章程的具体写法,里面有表格" 项目章程是项目管理中的一份重要文件,用于记录和指导项目的实施过程。下面是项目章程的具体写法,包括标题、描述、标签和部分内容。 一、项目章程的标题 项目章程的标题通常...

    SSH项目实例,有不同写法模板

    SSH,全称Spring、Struts...总的来说,这个SSH项目实例是一个实用的学习和参考工具,涵盖了Java Web开发中的关键技术和最佳实践。通过对不同模板的探索和实践,开发者能够提升自己的技能,更好地应对实际项目中的挑战。

    c#写的webServer网页可以调用串口

    弄了三种webServer的写法,简单、复杂的,感觉国外这个开源的最好。 我在他基础上测试了通过网页调用串口。 网页本身是不能控制串口的,这样调用: 在js里这样调用: http://127.0.0.1:8080?method=gaizhang 这个cs...

    一个项目的通用Makefile的写法

    通过这样的结构,你可以创建一个灵活且可扩展的构建系统,方便管理和维护大型项目。确保每个Makefile都明确其职责,保持代码清晰,并利用Makefile.build来实现代码复用,这将大大提高开发效率。同时,良好的文档(如...

    bootstrap 期末项目 设计报告 模板

    Bootstrap 是一个流行的前端框架,用于构建响应式、mobile-first 的 Web 应用程序。它提供了一些常用的 HTML、CSS 和 JavaScript 组件,可以快速构建现代化的 Web 应用程序。Bootstrap 的主要特点是响应式设计,可以...

    一年级数学日记的写法.pdf

    一年级数学日记的写法.pdf

    Group BY 的另一种写法

    在SQL查询中,`GROUP BY`语句是一个非常重要的部分,它用于对数据进行分组,以便我们可以对每个组执行聚合函数(如COUNT、SUM、AVG、MAX、MIN等)。`GROUP BY`通常的写法是直接指定需要分组的列名。然而,还有其他...

    Delegation委托写法项目实例

    在“Delegation委托写法项目实例”中,通过实践自定义方法的委托调用,你将更熟练地掌握这一重要技巧。通过学习和分析压缩包中的"DelegationClass",你可以深化对委托的理解,并将其应用到实际的开发工作中。

    web前端开发音乐播放器网页代码

    在web前端开发中,创建一个音乐播放器网页是一项常见的任务,它涉及到HTML、CSS和JavaScript等核心技术。HTML用于构建页面的基本结构,CSS负责样式和布局,而JavaScript则为页面添加交互性和动态功能,如播放、暂停...

    jsp_web.rar_WEB开发实例_university system_web开发_大学_web

    5. **web**:这是“Web”的另一种写法,再次确认项目的Web背景。 【压缩包子文件的文件名称列表】仅列出了一项 "jsp_web",这可能是项目的源代码目录或者包含JSP文件的主文件夹。通常,一个JSP项目会包含多个JSP...

    C#委托的另一种写法

    在探讨C#中的委托及其不同写法之前,我们先来简要回顾一下委托的基本概念...此外,还介绍了一种使用Lambda表达式的简化写法,使代码更加简洁高效。通过理解和掌握这些技术,开发者可以更好地应对复杂的多线程编程场景。

    关于网站项目策划书的写法

    关于网站项目策划书的写法

    make写法

    make写法

    HTML5基础写法

    HTML5是第五代超文本标记语言,主要用于Web内容的展示,它是构建Web应用程序的基础。HTML5相较于之前的...对于初学者来说,掌握HTML5的基础写法是学习前端开发的第一步,也是构建网页和Web应用不可或缺的基本技能。

    struts2标签写法

    Struts2是一个强大的MVC框架,它极大地简化了Java Web应用程序的开发。在Struts2中,标签库是其核心特性之一,它提供了一系列预定义的JSP标签,用于简化视图层的开发,使代码更加简洁、易读。本文将深入探讨Struts2...

    易语言写法

    易语言写法

Global site tag (gtag.js) - Google Analytics