JavaWeb总结

1、WEB开发基本知识

HTTP协议:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。


HTTP协议

静态web资源(如html 页面):客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来一般供人们浏览的数据是不变的。

动态web资源:客户端请求的动态资源,先将请求交于web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。不同时间点访问web页面看到的内容可能各不相同。



Http请求(请求报文): 

(1)请求行(请求方式 资源文件路径 协议/版本号)

(2)请求头 (以键值对组装的信息,对客户端方面的描述)

(3)空行(标志请求头的结束)

(4)请求体 (请求数据)

Http响应(相应报文):

(1)状态行(协议/版本 状态码 信息)

(2)响应头(以键值对组装的信息,对服务端数据的描述)

(3)空行

(4)响应体(响应的具体数据)



请求方式:

GET 请求方式传递参数:

在浏览器地址栏中输入某个 URL 地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为 GET 请求

如果页面中的<form>表单元素的 method 属性设置为“ GET ”,浏览器提交FORM表单时生成的 HTTP 请求消息的请求方式为 GET 请求

使用 GET 请求方式给 WEB 服务器传参的格式:(http://127.0.0.1/project?name=tom&pass = 123456)请求数据会以 ? 的形式隔开拼接在请求头中,数据以键值对的形式存在

使用 GET 请求方式传递的数据量一般限制在 1KB 以下

POST 请求方式传递参数:

POST 请求方式主要用于向 WEB 服务器程序提交 FORM 表单中的数据:FORM 表单中的元素 method 设置为 POST

POST 方式将各个表单中字段元素及其数据作为 HTTP 消息的数据内容发送给 WEB 服务器,传送的数据量要比使用 GET 方式传送的数据量大得多

数据一般在请求体中传送



Java Servlet:

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

工作原理:

  Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例(单实例)。

    用户请求使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

    ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

    对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。



2、Web服务器

Web服务器一般指网站服务器,是指驻留于网络上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。

Web服务器



常见状态码:

404 -Not Found 代表客户端错误,指的是服务器端无法找到所请求的资源

400 -请求无效,服务器不理解请求的语法

403 - 禁止访问 ,服务器拒绝请求

500 - 内部服务器错误,无法完成请求

200 - 服务器已成功处理了请求

3xx - 重定向


3、Java Servlet开发

在进行Servlet开发的时候,我们首选需要实现HTTPServlet。这是一个抽象类,servlet.http包中定义了采用HTTP通信协议的HttpServlet类。

继承HttpServlet抽象类重写HttpServlet的部分方法,如doGet()或doPost()方法获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

代码实例:

Servlet实例

web.xml文件

web.xml文件

解读上述实例:

Servlet生命周期:分为实例化阶段、初始化阶段、服务阶段和销毁阶段。Servlet 被tomcat容器装载后,根据web.xml配置,创建一个 servlet 实例并且调用 servlet 的init() 方法进行初始化;用户发起请求,容器响应客户端的请求,调用 service() 方法,根据请求提交方式选择执行 doGet() 方法或者 doPost()方法;终止阶段,调用 destroy() 方法

用户请求通过servlet-pattern(servlet-mapping) —>找到 servlet-name(servlet-mapping) —> servlet-name(servlet) —>进而找到 servlet-class(servlet),然后去执行对应的Get/Post方法。


九大内置对象

 (1)Request对象

1、request是javax.servlet.httpServletRequest类型的对象。

2、代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。

3、request对象的作用域为一次请求。

(2)Response对象

1、response代表的是对客户端的响应,将容器处理过的对象传回到客户端。

2、response对象也具有作用域,只在JSP页面内有效。

(3)Session对象

1、session对象是在服务器创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

2、session对象以键值对的形式保存数据,并且session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

(4)Application对象

1、application对象将信息保存在服务器中,直到服务器关闭,保存的信息会在整个应用过程中都有效。可以将保存在application的数据当作全员共享的数据。

(5)Out对象

1、out对象用于Web浏览器内输出信息,管理应用服务器上的输出缓冲区。

2、数据输出完毕后,要及时关闭输出流。

(6)Config对象

1、config对象的主要作用是取得服务器的配置信息。

2、Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。

3、在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数

(7)Page对象

page对象代表JSP本身,只有在JSP页面内才是合法的。类似于Java编程中的this指针。

(8)Exception对象

1、exception作用是显示异常信息,只有在包含isErrorPage=true的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

2、在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。

(9)PageContext对象

1、pageContext 对象的作用获取JSP页面的out、request、reponse、session、application 等对象。

2、pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。


重定向和转发:

重定向:HttpServletResponse提供的sendRedirect(String path)方法用于实现重定向功能。重定向可以跳转至到同一个容器(服务器tomcat)中的其他应用程序的资源,甚至可以使用绝对路径的URL重定向到其他站点的资源。

重定向原理

转发:Servlet API中定义了一个RequestDispatcher接口,该接口中的forward()方法用于将请求转发至RequestDispatcher实例指定的资源。请求转发只能在同一个容器内的资源之间进行跳转,但可以通过请求转发将请求向下传递。

转发原理

区别:

重定向:地址栏发生改变,跳转发生在客户端,用的不是同一HttpServletRequest对象,可以跳转到外部。请求转发:地址栏不会改变,跳转发生在服务器端,用的是同HttpServletRequest对象,只能在内部跳转。


JSP:

JSP全称Java Server Pages,是一种服务器端动态页面技术的组件规范,是以“.jsp”为后缀的文件,在该文件中主要是前端代码和少量的java 代码构成,标签通常以<%开头以%>结束,该文件在容器中会转换成Servlet执行。Jsp 在本质上也是Servlet,用Jsp 实现的页面用Servlet也能实现。

jsp执行原理

弊端:由于Jsp页面同时包含前后端代码,甚至操作数据库代码也写在页面里,要求开发人员前后端都需要懂,导致维护成本增加,而且如果内容过多,由于是同步加载,服务器压力会增大,由于以上原因提出了前后端分离技术。这样子:

1. 用户发送请求直接到达html页面服务器或中间件

2. 请求路由规则由前端制定,整个项目开发的权重前移

3. 前端负责调用服务端接口产生数据,展现动态效果,不需要关心后端实现

4. 业务分离,实现前后端解耦

5. 减轻后端服务器压力

6. 提高后端开发人员效率


EL表达式和JSTL标签:

从本质上来讲这两者是一样的,都是JSP中为了简化Java语言部分的编写而生的,但是两者的侧重点不一样。EL的主要功能是简化JSP开发中对对象的引用,更侧重于数据交互。JSTL的主要功能对Java中常用语句的封装,比如你可以用类似HTML那样标签来做一个for循环,而不用像Java代码中那样手写循环。


4、JavaWeb三层架构

由于初代javaweb所有代码都放在jsp中,所有的东西都耦合在一起,对后期的维护和扩展极为不利,于是javaweb演进到了第二代,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工作,后来到了第三代,为了解决视图与业务分离,演变出了经典的三层架构,而三层架构中的佼佼者当属mvc模式,mvc模式即视图层,业务逻辑层,持久化层。

M = JavaBeans:用于传递数据,拥有与数据相关的逻辑处理。

V = JSP:从Model接收数据并生成HTML

C = Servlet:接收HTTP请求并控制Model和View


MVC三层结构

5、JavaWeb数据流程

用一张流程图表示吧:

JavaWeb数据流程
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容