Servlet:Java服务器端小应用

一、JavaEE开发介绍

1.什么是JavaEE

  • JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发(不需要使用控制台)平台。最早由Sun公司定制并发布,后由Oracle负责维护。

  • JavaEE平台规范了在开发企业级web应用中的技术标准。

  • 在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会有增多)。它们分别是:JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JPA、JTA、JavaMail和JAF。

 1.JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。

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

使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  • 性能明显更好。
  • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
  • Servlet 是独立于平台的,因为它们是用 Java 编写的。
  • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
  • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

 3.JSP(Java Server Pages),是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

2.JavaEE的版本

注意: Servlet2.5及以前是使用web.xml的配置方式,3.0及以后可以使用注解的方式进行配置。

3.结论

JavaEE与JavaSE做对比的话我们可以发现:

  1. JavaEE案例要使用到浏览器、服务器(Tomcat)、数据库。

  2. JavaEE案例程序不是通过main方法来运行,而是要放在服务器(Tomcat)来运行。(必须通过服务器来运行)服务器有很多种,我们学的Tomcat是其中的一种。

  3. JavaEE案例要使用到Servlet和jsp两个技术,而且多了一个web.xml文件做配置。

  4. JavaEE案例是将结果响应到了浏览器上,而不是打印在控制台上!

  5. JavaEE案例可以让更多的人去访问它、使用它!

 4.JavaEE大概的执行流程

 二、HTTP协议

        浏览器与服务器之间发送数据的时候,是要有格式的,是双方约定好的格式。只有根据约定好的格式双方才能进行数据的传输。就像两个人打电话一样,手机号码就相当于是协议,只有遵循相同的协议才能进行通话。

        而我们学的是Tomcat服务器,Tomcat服务器使用的是http协议。

1.HTTP协议介绍

1.什么是HTTP协议

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写, HTTP是万维网(WWW:World Wide Web)的数据通信的基础。简单来说就是客户端和服务端进行数据传输的一种规则。

  • HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)。

  • HTTP 是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。

 什么是超文本呢?

        超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。这里的“超文本”指的不光是这些,还指超过文本,意思是还有其他的文件,像视频、音频、图片等什么的。

回顾:网络分层模型各个层的作用。

作用举例说明
物理层负责光电信号的传输以太网线、同轴电缆
数据链路层负责设备之间数据帧的传送和识别网卡设备驱动、帧同步、冲突检测、CRC
网络层负责地址管理和路由选择IP标识主机、路由表规划传输路线
传输层负责两台主机之间的数据传输传输控制协议(TCP)
应用层负责应用程序间沟通Http、SMTP、FTP、Telnet、网络编程主要针对应用层

 

 回顾:TCP与UDP的区别?

TCP“三握手”

UDP模型图

TCP协议UDP协议
面向连接非面向连接
点到点的通信可以广播发送
高可靠性:三次握手、四次挥手传输不可靠、可能丢失
占用系统资源多、效率低非常简单的协议、开销小
生活案例:打电话生活案例:发送短信

2.HTTP协议的特点

  • 支持客户端/服务器模式

  • 简单快速

  • 灵活(传输的数据类型多样)

  • 短连接 :短链接是指每次请求响应完成后,连接会自动断开。从http1.1开始,我们使用的是长连接,长连接是每次请求响应完成后,连接会保持一小段的存活时间,供之后的请求使用。长连接要比短连接的效率高!

  • 单向性 :服务端永远是被动的等待客户端(浏览器)的请求。

  • 无状态 :无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,用户体验度也不好。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

Cookie:Cookie实际上是一小段的文本信息(key-value格式)。 客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。 客户端浏览器会把Cookie保存起来。 当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。 

Session: session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。 

3.HTTP协议的版本发展

 目前的话我们用的还是HTTP1.1的版本

4.HTTP协议中的URL、URI

1.URL介绍

 URL(Uniform Resource Location统一资源定位符),可以帮助我们唯一定位互联网上的某一个资源,相当于是互联网资源的身份证号。URL由五个元素组成:

  • 传送协议

  • 域名或者IP地址

  • 端口号(以数字方式表示,若为HTTP的默认值“:80”可省略)

  • 请求资源路径

  • 传递数据(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开通常以UTF8的URL编码,避开字符冲突的问题)

举例:https://127.0.0.1:8080/acg/forum?mod=forumdisplay&fid=37&typeid=4&filter=typeid&typeid=4&page=2

http:// 是协议

127.0.0.1是ip地址,也可以是域名

8080 是端口号(端口号我们也可以自己改)

/acg/forum是请求资源路径,也就是URI

mod=forumdisplay&fid=37&typeid=4&filter=typeid&typeid=4&page=2是请求传递的参数

2.URI介绍

URI:(Uniform Resource Identifier),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。

URI主要用于区分资源,它包含了URL与URN的概念,主要是用于取代URL和URN的概念

换句话说,URI可以是URL/URN,但URL/URN不一定就是URI,也就是说URI是URL/URN的超集

(超集定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集。)

5.HTTP协议的请求(必须掌握)

http协议就是用来规范请求与响应的数据格式的。

Request 消息分为3部分:

  • 第一部分叫Request line 请求行

    • 请求方式

    • uri

    • 协议及版本号

  • 第二部分叫Request header 请求头

    • key:value

  • 第三部分是Request body 请求体

    • get请求没有请求体,将数据通过url直接传递

    • post有请求体,将数据通过请求体传递

Request header和Request body之间有个空行。

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

 1.请求行

有两种一种是GET

 

另一种是POST 

请求行中含有:请求的方式、URI、协议/版本。

2.请求头

请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。

请求头中信息的格式为key:value。

 3.请求体

客户端传递给服务器的数据。比如:表单使用post方式提交的数据、上传文件数据等。

注:GET没有请求体

4.请求方式

  • GET 向指定的资源发出“显示”请求。 GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。 GET请求传递数据时要求数据必须是ASCII字符。 GET请求可以被浏览器缓存。

  • POST 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。 数据被包含在请求体中。 POST请求传递数据时,数据可以是ASCII字符也可以是字节型数据,默认为字节型。 POST请求默认情况下不会被浏览器所缓存。

  • HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。

  • PUT 向指定资源位置上传其最新内容。

  • DELETE 请求服务器删除Request-URI所标识的资源。

  • TRACE 回显服务器收到的请求,主要用于测试或诊断。

  • OPTIONS 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

  • CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意:

1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。

2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

4.GET和POST的区别(重中之重)

1.get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。

2.get因为参数会放在url中,所以隐私性、安全性较差,请求的数据长度是有限制的,
post请求是没有的长度限制,请求数据是放在body中;

3.get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。

4.get请求可以被缓存,post请求不会被缓存。

5.get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。

6.get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。

6.HTTP协议的响应(掌握)

Response消息也由三部分组成:

  • 第一部分叫Response line

  • 第二部分叫Response header

  • 第三部分叫Response body。

1.响应行

 

和请求消息相比,响应消息多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。  

HTTP状态码分类,共分为5种类型:

 常见状态码及含义

  • 200 - 请求成功,已经正常处理完毕

  • 301 - 请求永久重定向,转移到其它URL

  • 302 - 请求临时重定向

  • 304 - 请求被重定向到客户端本地缓存

  • 400 - 客户端请求存在语法错误(客户端传递的数据类型不是后端想要的类型)

  • 401 - 客户端请求没有经过授权

  • 403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限

  • 404 - 资源未找到,客户端请求的URL在服务端不存在

  • 405 – 请求方式不支持

  • 500 - 服务端出现异常

 2.响应头

响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。

  • Date 响应的Date使用的是GMT时间格式,表示响应消息送达时间。

  • Content-Encoding 文档的编码(Encode)方式。用gzip压缩文档能够显著地减少HTML文档的响应时间。

  • Content-Length 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。

  • Content-Type 表示响应的文档属于什么MIME类型。

  • MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 MIME作用:HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢?HTTP协议采用MIME协议来规范正文的数据格式。 在服务端我们可以设置响应头中Content-Type的值来指定响应类型。

3.响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

 三、服务器介绍

1.服务器简介

  1. 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。

  2. 软件服务器(英文名称Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。

 2.JavaEE应用服务器

应用服务器是Java EE规范的具体实现, 可以执行/驱动基于JavaEE平台开发的web项目。绝大部分的应用服务器都是付费产品。

四、Tomcat容器的使用

Tomcat是一款绿色软件,我们下载压缩包,解压即可使用!

注意:一定要配置正确JDK(JAVA_HOME、path),否则Tomcat服务器是不能正常使用!!!

1. Tomcat的初步使用(掌握)

 1.Tomcat目录结构与介绍

  • bin:用来存放Tomcat服务器的可执行程序,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。

  • conf:用来存放Tomcat服务器的配置文件

  • lib:用来存放Tomcat服务器的jar包

  • logs:用来存放Tomcat服务器运行时输出的日志信息

  • temp:用来存放Tomcat服务器运行时产生的临时数据

  • webapps:用来存放Tomcat服务器部署的工程(可以手动在里面方式资源,也可以通过IDEA自动向里面加载)

  • work:是Tomcat工作时的目录,用来存放Tomcat运行时jsp翻译为Servlet的源码和编译后的文件

 2.Tomcat启动与关闭

 

 Tomcat的启动与关闭需要执行bin目录中的命令脚本。 注意: 如果启动时闪退,是因为JDK的环境变量配置不规范,需要重新配置。

访问Tomcat(*)

2.Tomcat的常见配置(掌握)

 1.Tomcat配置文件介绍

 Tomcat 的配置文件由4个xml组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。

context.xml

        context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。

web.xml

        Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。

server.xml

        是 tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件(pojo对象),通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。

tomcat-users.xml

        配置访问Tomcat的用户以及角色的配置文件。

2.解决控制台乱码

控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。

解决方式:修改conf目录中的logging.properties文件重新指定的编码方式。如果还是不行,那么 就删除该行即可

java.util.logging.ConsoleHandler.encoding = GBK

3.修改Tomcat监听端口

 Tomcat默认监听端口为8080。可通过修改server.xml文件来改变Tomcat监听端口。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

4.配置Tomcat并发数

 Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。

这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是非常高的。 对于单台数据库服务器来说,允许客户端的连接数量是有限制的。并发能力问题涉及整个系统架构和业务逻辑、系统环境不同、Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。并发量的差异还是满大的。并发数设置参数有如下几个:

  • 最大并发数: maxThreads="1000"

  • 初始化时创建的线程数: minSpareThreads="100"

  • 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程:maxSpareThreads="500"

  • 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理: acceptCount="700"

  • 配置示例 

<Connector port="8080" protocol="HTTP/1.1"  minSpareThreads="100" 
 maxSpareThreads="500" maxThreads="1000" acceptCount="700" 
connectionTimeout="20000" redirectPort="8443" />

 3.Tomcat中配置虚拟主机(Host)

 1.Host组件

虚拟主机(英语:virtual hosting),又称虚拟服务器, Host组件位于Engine(执行引擎)中用于接收请求并进行相应处理的虚拟主机。

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

name:虚拟主机的名称,Tomcat通过在请求URL中的域名与name中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在Engine中defaultHost指定的主机处理;

appBase:此Host的webapps目录,即指定存放web应用程序的目录的路径;

autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy(部署);默认为true;

unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;

2.创建页面

 创建index.html页面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BJSXT</title>
</head>
<body>
    Welcome to Bjsxt
</body>
</html>

3.修改server.xml, 新添加Host配置

<Host name="www.bjsxt.com" appBase="d:/bjsxt" unpackWARs="true" autoDeploy="true">
</Host>

4.修改windows的Host文件

 修改Windows系统中的Host文件做域名与IP的绑定。

Host文件位置 C:\Windows\System32\drivers\etc

修改内容:

127.0.0.1	www.bjsxt.com

 注意:如果不能修改或不能保存该文件,请设置一下权限。右击该文件,点击属性,然后:

5.启动服务器,访问资源测试结果

注意:

  1. 一定要先启动服务器,再访问

  2. tomcat的默认配置, 自动寻找指定路径下的index.html

6.添加Context

  • Context是Host的子组件,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或文件的目录。

<Host name="www.bjsxt.com"  appBase="d:/bjsxt"
      unpackWARs="true" autoDeploy="true">
    <!-- 配置了Context, 可以自动到D:\bjsxt\test中寻找访问的资源 -->
    <Context path="/" docBase="D:\bjsxt\test" />
</Host>

 五、Servlet引入(理解)

1.Servlet的概念

  • Servlet是Server Applet的简称,称为服务端小程序,是JavaEE平台下的技术标准,基于Java语言编写的服务端程序。 Web 容器或应用服务器实现了Servlet标准所以Servlet需要运行在Web容器或应用服务器中。Servlet主要功能在于能够在服务器中执行并生成数据。

  • Servlet指的是一个接口规范,具体的体现为接口及其接口的实现类。该接口的名字就是Servlet

  • Servlet是JavaWeb开发的三大组件之一(另外两个是过滤器filter与监听器listener)

  • Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理 的所有web资源:例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。

  • Listener(监听器):可以 监听 JavaWeb 中的三大域对象:HttpServletRequest、HttpSession、ServletContext (创建和销毁),一旦被监视的对象发生相应的变化,应该采取相应的操作。

 Servlet在应用程序中的位置

 六、编写Servlet的基本步骤

  1. 自定义一个类,继承HttpServlet

  2. 重写service方法(写的就是业务处理的代码)

  3. 在web.xml中对Servlet进行配置

配置Servlet

在web.xml中对写好的Servlet进行配置:
            servlet-name:配置Servlet在容器中的一个代号,可以随便写。一般写成类名即可
            servlet-class:配置你的Servlet所在的全路径名字

            servlet-name:这里的名字一定要和上面配置的servlet-name 一样!!!
            url-pattern:配置url的映射路径,也就是你的这个Servlet需要浏览器通过什么请求路径访问你
            浏览器路径需要这样写:http://ip地址:端口号/项目名/你的url-pattern

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值