Skip to content

Jsp与Servlet

4502字约15分钟

javajspservlet

2024-10-24

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 方法。

序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

HTTP定义了与服务器进行交互的不同方法,的四种:GETPOSTPUTDELETE。其中,GETPOST最常用。

GET用来获取资源,它只是获取、查询数据,不会修改服务器的数据,从这点来讲,它是安全的(后面还会从另一方面分析它的不安全性)。由于它是读取的,因此可以对GET请求的数据进行缓存。

POST则是可以向服务器发送修改请求,进行数据的修改的。举个例子:比如说我们要在知乎、或者论坛下面评论,这个时候就需要用到POST请求。但是它不能缓存,为什么呢?设想如果我们将“评论成功”的页面缓存在本地,那么当我发送一个请求的时候,直接返回本地的“评论成功”页面,而服务器端则什么也没有做,根本没有进行评论的更新,岂不是难以想象

get与post区别

GET没有POST安全、GET请求时URL的长度是有限制的、GET没有bodyPOSTbody等等。这些都是针对浏览器中的要求, 在使用HTTP作为接口进行传输时,就没有这么多条条框框了,此时GETPOST只是HTTP协议中的两种请求方式,而HTTP协议是基于TCP/IP的应用层协议, 无论GET还是POST,用的都是同一个传输层协议,所以在传输上没有区别。

因此,在用作为接口进行传输时,最大的不同就在于报文格式上的不同了

POST /url HTTP/1.1 GET /url HTTP/1.1

上面所示的分别为POST方法请求的报文第一行和GET请求的报文第一行, 显而易见的区别就是方法名不同。除此以外,就没有那么多要求了,GET也可以有bodyPOST也不一定非要使用body,只要客户端和服务器端确定好规范即可,至于形式则你们随意。只不过现在已经习惯了现有的规则,再去改变有些麻烦,毕竟客户端和服务器端要花时间去探讨具体的对接形式。

5.http的响应

image-20211101185429930

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)直接写在注解内

属性名类型标签描述是否必需
nameString<servlet-name>指定 Servlet 的 name 属性。 如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。
valueString[ ]<url-pattern>该属性等价于 urlPatterns 属性,两者不能同时指定。 如果同时指定,通常是忽略 value 的取值。
urlPatternsString[ ]<url-pattern>指定一组 Servlet 的 URL 匹配模式。
loadOnStartupint<load-on-startup>指定 Servlet 的加载顺序。
initParamsWebInitParam[ ]<init-param>指定一组 Servlet 初始化参数。
asyncSupportedboolean<async-supported>声明 Servlet 是否支持异步操作模式。
descriptionString<description>指定该 Servlet 的描述信息。
displayNameString<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 代码,适合页面的显示 内置对象不同,获取内置对象的方式不同