外观
Jsp与Servlet
1.http协议
1.http是网络的一个应用层协议
2.http是超文本传输协议,一定是基于请求响应过程,发起请求,产生响应。
3.基于TCP协议
4.一次请求一次响应,有求必应
2.http的客户端
浏览器
IE/Edge、chrome、safiy、opel、firefox......
Java
URLConnection
HTTPClient
OKHTTP
wget/curl
3.http的服务端
网络应用的服务端
1.启动监听服务,等待连接
2.进行网络通信,接受请求,发送响应(使用对象流)
3.应用服务器(JavaEE)
3.1Tomcat(开源,市场占有高)
3.2Jetty(内嵌应用服务器,主要用来内部测试)
3.3Negix(反向代理,主要用来负载均衡)
3.4Apache(处理静态应用,php最好搭配)LAMP(Linux、Apache、MySQL、Php)
3.5JBoss(功能强大,开源)EJB容器
3.6GlassFish(sum公司开发)
3.7WebLogic/WebShare(EJB支持,服务器集群支持)商用
4.http的请求方法
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
HTTP
定义了与服务器进行交互的不同方法,的四种:GET
、POST
、PUT
、DELETE
。其中,GET
和POST
最常用。
GET
用来获取资源,它只是获取、查询数据,不会修改服务器的数据,从这点来讲,它是安全的(后面还会从另一方面分析它的不安全性)。由于它是读取的,因此可以对GET
请求的数据进行缓存。
POST
则是可以向服务器发送修改请求,进行数据的修改的。举个例子:比如说我们要在知乎、或者论坛下面评论,这个时候就需要用到POST
请求。但是它不能缓存,为什么呢?设想如果我们将“评论成功”的页面缓存在本地,那么当我发送一个请求的时候,直接返回本地的“评论成功”页面,而服务器端则什么也没有做,根本没有进行评论的更新,岂不是难以想象
get与post区别
GET
没有POST
安全、GET
请求时URL
的长度是有限制的、GET
没有body
而POST
有body
等等。这些都是针对浏览器中的要求, 在使用HTTP
作为接口进行传输时,就没有这么多条条框框了,此时GET
和POST
只是HTTP
协议中的两种请求方式,而HTTP
协议是基于TCP/IP
的应用层协议, 无论GET
还是POST
,用的都是同一个传输层协议,所以在传输上没有区别。
因此,在用作为接口进行传输时,最大的不同就在于报文格式上的不同了
POST /url HTTP/1.1 GET /url HTTP/1.1
上面所示的分别为POST
方法请求的报文第一行和GET
请求的报文第一行, 显而易见的区别就是方法名不同。除此以外,就没有那么多要求了,GET
也可以有body
,POST
也不一定非要使用body
,只要客户端和服务器端确定好规范即可,至于形式则你们随意。只不过现在已经习惯了现有的规则,再去改变有些麻烦,毕竟客户端和服务器端要花时间去探讨具体的对接形式。
5.http的响应
MIME (多用途互联网邮件扩展类型)
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式 验证码
- image/png:png图片格式
以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/vnd.ms-excel excel文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded :
<form encType="">
中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
- multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
6.Tomcat服务器的安装与部署
1.Tomcat是一个java程序必须使用JDK(Tomcat需要编译jsp程序)
2.需要配置JAVA_HOME环境变量(jdk的安装路径)
3.解压即可使用
4.启动:
4.1安装目录下/bin目录打开cmd窗口,输入startup
4.2启动的标志:启动时间,启动端口号
Tomcat的目录结构
/bin这个目录下存放着Tomcat的一些可执行文件,包括启动、停止等
/conf这个目录下存放着Tomcat的配置文件,常用的有
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限
/webapps这个目录下存放网站的文件夹
一个主机可以装多个Tomcat(区分端口,部署不同的网站)
协议(http/https)、IP、端口只要有一个不一样就是不同的网站(域)
部署网站
1.自动部署(将网站文件夹放在Tomcat的webapp文件夹下)
2.server.xml配置
<Context docBase="你的项目路径" path="浏览器要输入的路径">
3.web.xml
在\conf\Catalina\localhost:添加testA.xml
添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\test\dubbo-admin-2.5.10" reloadable="false" />
docBase还是指向WEB工程的绝对路径。
此时启动tomcat,浏览器输入:localhost:8080/testA,说明部署成功!(访问路径为此XML的名称)
7.JSP与HTML的区别
1.html可以直接被浏览器打开,而JSP不行
2.Jsp可以把java代码嵌入到heml中(脚本代码)
3.Jsp为什么要嵌入到java代码
利用Java代码动态生成HTML
4.动态网页技术(动态生成网页的技术)代码根据实际情况临时线现场产生的网页
常用的动态网页技术
C++,ASP(vb,ASP.NET C#)
ASP、PHP、JSP、Python、Go
里面都可以嵌入html、css、js(模板)
8.Jsp的内部元素
1.编译元素
影响jsp编译为java的class文件
1.page
<%@ page contentType="text/html;charset=UTF-8"/*响应类型*/ language="java" %>
<%@ page import="java.util.LinkedList" %>/*导入包*/
2.include
3.taglib
3.模板元素
HTML
CSS
JS
3.脚本元素
1.普通脚本元素
<% /*普通java代码*/ %>
2.声明式脚本
<%! /*全局变量的定义,函数的定义等*/%>
3.表达式脚本
<%= serviceType.getTitle()/*相当于out.println(serviceType.getTitle()),直接输出一个元素*/%>
4.注释元素
<%--<td><%= serviceType.getTitle()%></td>jsp的注释--%>
<!-- html注释 -->
(1)html注释: html注释又称为显示注释,是指包含在“<!--”和“-->”
之间的内容,在客户端源代码中显示注释内容,但不被浏览器直接显示。“<!--”和“-->”
之间可以包含jsp表达式,并被jsp容器解释。
(2)jsp隐藏注释: 隐藏注释写在jsp程序中,用<%--隐藏注释--%>标记的字符在jsp编译时被忽略。它不会显示在客户端浏览器中,也不会出现在客户端源代码中。
html注释与jsp隐藏注释的区别在于: html是显示注释,注释内容可以在客户端源代码中看到,而jsp隐藏注释的注释内容不能传输到客户端,即在客户端源代码中不能产看到jsp隐藏注释内容;html注释还可以在注释中使用表达式,而在jsp隐藏注释中不能使用表达式。html注释和jsp隐藏注释都不能显示在客户端浏览器中,所以这里的“显示”和“隐藏”是指注释内容是否显示在客户端源代码中。
5.动作指令
使用jsp标签代替java代码
作用:
1.jsp作为一种模板技术,用来显示数据
2.数据与显示分离开
3.被JSTL、EL表达式所替代
4.jsp的include是在运行时包含,而include编译元素是在编译时包含
6.其他模板技术(freeMark、themeleaf、relocity)
Servlet
1.Servlet简介
servlet:服务端脚本技术,它是Java EE技术的一个组成
JavaEE组成:
1、JDBC(Java Database Connectivity) JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。
2、JNDI(Java Name and Directory Interface) JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。
3、EJB(Enterprise JavaBean) JAVAEE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现JAVAEE的唯一途径。正是由于JAVAEE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。
4、RMI(Remote Method Invoke) 正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。
5、Java IDL/CORBA 在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。
6、JSP(Java Server Pages) JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
7、Java Servlet Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
8、XML(Extensible Markup Language) XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。 XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。
9、JMS(Java Message Service) JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另 一种方式来对您的应用与旧的后台系统相集成。
10、JTA(Java Transaction Architecture) JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。
11、JTS(Java Transaction Service) JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。
12、JavaMail JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。
13、JAF(JavaBeans Activation Framework) JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF
2.Servlet的创建
1.Servlet是一个特殊的类
1.实现了Servlet接口
2.继承了GenericdServlet类
3.继承了HttpServlet类
2.配置
1.web.xml文件配置
servlet
servlet-mapping
<servlet>
<servlet-name>GetServiceType</servlet-name>
<servlet-class>com.lixxing.web.GetServiceType</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetServiceType</servlet-name>
<url-pattern>/GetServiceType</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>xxxpackage.xxxServlet</servlet-class> <!--Servlet的类-->
<init-param> <!--初始化一个变量,可看成全局变量,可省略-->
<param-name>参数名称</param-name> <!--变量名称-->
<param-value>参数值</param-value> <!--变量值-->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/aaa/xxx</url-pattern> <!--映射的url路径 -->
</servlet-mapping>
1.精确匹配:/浏览器要访问的路径
2.路径匹配:/路径/*
3.文件匹配:*.扩展名
4.默认匹配:/
2.@WebServlet注解
1.与 XML 不同,注解不需要依赖于配置文件,它可以直接在类中使用,其配置只对当前类有效,这样就避免了集中管理造成的配置冗长问题。
2.@WebServlet 用于将一个类声明为 Servlet,该注解会在部署时被容器处理,容器根据其具体的属性配置将相应的类部署为 Servlet。
3.@WebServlet 属于类级别的注解,标注在继承了 HttpServlet 的类之上。常用的写法是将 Servlet 的相对请求路径(即 value)直接写在注解内
属性名 | 类型 | 标签 | 描述 | 是否必需 |
---|---|---|---|---|
name | String | <servlet-name> | 指定 Servlet 的 name 属性。 如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。 | 否 |
value | String[ ] | <url-pattern> | 该属性等价于 urlPatterns 属性,两者不能同时指定。 如果同时指定,通常是忽略 value 的取值。 | 是 |
urlPatterns | String[ ] | <url-pattern> | 指定一组 Servlet 的 URL 匹配模式。 | 是 |
loadOnStartup | int | <load-on-startup> | 指定 Servlet 的加载顺序。 | 否 |
initParams | WebInitParam[ ] | <init-param> | 指定一组 Servlet 初始化参数。 | 否 |
asyncSupported | boolean | <async-supported> | 声明 Servlet 是否支持异步操作模式。 | 否 |
description | String | <description> | 指定该 Servlet 的描述信息。 | 否 |
displayName | String | <display-name> | 指定该 Servlet 的显示名。 | 否 |
注意事项:
- 通过实现 Serlvet 接口或继承 GenericServlet 创建的 Servlet 类无法使用 @WebServlet 注解。
- 使用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相关属性。若同时使用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中
<servlet-name>
的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。
3.@WebServlet 注解 和 web.xml 的优缺点
使用 web.xml 或 @WebServlet 注解都可以配置 Servlet, 两者各有优缺点。
1.@WebServlet 注解配置 Servlet
优点:@WebServlet 直接在 Servlet 类中使用,代码量少,配置简单。每个类只关注自身业务逻辑,与其他 Servlet 类互不干扰,适合多人同时开发。
缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。
2.web.xml 配置文件配置 Servlet
优点:集中管理 Servlet 的配置,便于查找和修改。
缺点:代码较繁琐,可读性不强,不易于理解。
3.Servlet的生命周期
二启三停,service()比doGet()执行的早
二启:
1.第一次网络启动
2.load-on-startup/loadonstartup>=0(应用程序启动时加载)
大于0时数值越小启动越早
三停:
1.应用程序停止
2.Tomcat服务器停止
3.服务器停止(物理机)
get请求的产生方式
1.点击链接
2.地址栏传参
3.提交表单(method=get)
4.src属性
post请求产生方式
提交表单(method=post)
4.JSP与Servlet的区别
Servlet
一种服务器端的Java应用程序 由 Web 容器加载和管理 用于生成动态 Web 内容 负责处理客户端请求
Jsp
是 Servlet 的扩展,本质上还是 Servlet 每个 Jsp 页面就是一个 Servlet 实例 Jsp 页面会被 Web 容器编译成 Servlet,Servlet 再负责响应用户请求
区别
Servlet 适合动态输出 Web 数据和业务逻辑处理,对于 html 页面内容的修改非常不方便;Jsp 是在 Html 代码中嵌入 Java 代码,适合页面的显示 内置对象不同,获取内置对象的方式不同