草庐IT

我的JSP&Servlet之旅、01 HTTP基础、模型架构

小能的博客 CanAngle's Blog 2023-04-16 原文

URL、URN、URI

URL的主要语法格式为,目的是以文字方式来说明互联网上的资源如何取得。

<scheme>:<scheme-specific-part>

协议特定部分又可以表示为

//<用户>:<密码>@<主机>:<端口号>/<路径>


URN代表某个资源独一无二的名称。

URL、URN都用来表示某个资源,后来指定URL标准,URL与URN成为URI的子集。

超文本传输协议HTTP(Hyper Transfer Protocol)

两个重要特性

  • 基于请求、响应模型。必须由浏览器主动发出请求。
  • 无状态协议。响应客户端后不会记得客户端的信息。

概念和传输过程

  • 在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。
  • HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。

  • 每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求。
  • 一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。
  • 最后,TCP 连接就被释放了。

HTTP报文格式

HTTP请求报文格式

注意:虽然在POST请求时,请求参数不会出现在地址栏上,而是写在信息体重,然而在非加密联机的情况下,若请求被第三方获取了,请求参数仍然是一目了然,机密信息请务必在加密联机下传送。

HTTP响应报文格式

浏览器快取是什么

所谓的快取,是指cache,就是缓存

你以前上过什么网,那个网站的一些基本元素会保留在本机,就是所谓的快取。
下次访问这个网站的时候,会从本机读取这些东西,而不是重新下载。能够明显的加速网页打开。

清除快取就是清掉那些下载过来的东西,让所有的东西都重新下载。

服务端可以指定适当Cache-Control标头来避免Get响应被快取,大多数浏览器不会对Post响应快取。

URI编码

Servlet/JSP

JVM 是JAVA程序唯一认识的操作系统,其可执行文件为.class文件。

  • 了解 JAVA程序如何与JVM通信
  • 了解JVM如何管理JAVA程序对象

Web 容器 是Servlet/JSP唯一认识的HTTP服务器。

  • 了解两者是如何通信
  • 了解容器是如何管理Servlet/JSP对象

什么是容器

容器是用来持有、保存对象的集合(Collection)对象。

Servlet/JSP的容器概念更广,不仅持有对象还负责对象的生命周期和相关服务的连接。

  • 具体层面,Servlet/JSP 的 Web 容器是JAVA写的程序。该容器负责将HTTP文字性的通信协议变成Servlet/JSP中可用的JAVA对象(剖析和转换的过程)

  • 抽象层面,Web 容器可以视为 HTTP服务器。Servlet/JSP撰写时需要符合Web容器的标准规范。

请求、响应过程

一个请求一个线程

Web容器运行在JVM上,当一个请求来到时,会为每个请求分配一个线程。当多个请求之下,会导致多个线程同时共享存取一个对象,发生数据竞争。因此要注意线程安全的问题。

关于内存访问同步可参考:我的Go并发之旅、01 并发哲学与并发原语 - 小能日记 - 博客园 (cnblogs.com)

Servlet类

  • 必须继承 HttpServlet
  • 输出HTML时必须通过JAVA的输入输出功能。

事实上,Servlet主要是用来定义Java程序逻辑的,应该避免直接在Servlet产生画面输出,比如直接编写HTML。应当适当分配JSP与Servlet的职责。

JSP网页最后会被转译成Servlet类然后编译并加载到容器中!

MVC

MVC 是 Model、View、Controller 的缩写,分别是模型、视图、控制器,分别代表应用程序中三种职责各不相同的对象。

MODEL 2

MVVM

MVVM是前端视图层的分层思想,主要把每个页面,分成了M、V和VM。其中,VM是MVVM思想的核心;因为VM是M和V之间的调度者。M保存的是每个页面中单独的数据,V就是每个页面中的HTML结构,VM它是一个调度者,分割了M和V,每当V层想要获取保存数据的时候,都要由VM做中间处理。前端页面中使用MVVM思想,主要是为了让我们开发更佳方便,因为MVVM提供了数据的双向绑定,双向绑定是由VM提供的。

MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 View 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉。因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理

MVC跟MVVM区别

mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。例如:vue数据驱动,通过数据来显示视图层而不是节点操作。场景:数据操作比较多的场景,更加便捷。

有关我的JSP&Servlet之旅、01 HTTP基础、模型架构的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  5. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  6. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  7. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  8. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  9. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  10. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

随机推荐