JavaWeb总结(三)
什么是Servelt
- 是运行在Web服务器或应用服务器上的Java程序
- 在Web上创建动态内容的有效而强大的解决方案
- 由容器来管理生命周期与Web服务器交互
Servlet规范的组成
Java Servlet作为Java EE的一部分,Sun公司规范并定义了许多功能
- Web应用程序
- Servlet与HTTPServlet
- 过滤器
- 安全
- 国际化
Servlet API
- SUN公司定义的一套专门用于开发Servlet程序的Java类和接口
- Web容器和Servlet程序之间使用Servlet API进行通信
Servlet API类图
Servlet生命周期
- 控制Servlet运行的多线程环境
- 遵循初始化、服务器和销毁三个阶段
Servlet生命周期图
Servlet与HTTP协议
- 基本的Servlet对HTTP一无所知
- 以Javax.servlet.http.HttpServlet类的形式实现对HTTP协议的支持
HttpServlet生命周期
编译Servlet
将Servlet类库包含进来的方法
- 将servlet-api.jar 放置在CLASSPATH中
- 将servlet-api.jar 放置在 JDK安装目录\jre\lib\ext目录下
Servlet Api放置目录
部署Servlet
Servlet是作为容器管理的Web应用程序的一部分,要使Servlet能够运行,即被Web容器调用,以产生动态响应,就需要部署Servlet。
- 创建部署描述文件(web.xml)
创建的web.xml文件:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
</web-app>
- 在容器中注册Servlet
更改后的web.xml文件:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<description></description>
<display-name>ServletTest</display-name>
<servlet-name>ServletTest</servlet-name>
<servlet-class>java.com.test.ServletTest</servlet-class>
</servlet>
</web-app>
注册Servlet
- 映射Servlet
更改后的web.xml文件:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<description></description>
<display-name>ServletTest</display-name>
<servlet-name>ServletTest</servlet-name>
<servlet-class>java.com.test.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/ServletTest</url-pattern>
</servlet-mapping>
</web-app>
映射Servlet
Servlet URL映射路径
- 精确模式匹配:这种类型的模式用于将请求一对一映射到指定的Servlet。
- 扩展名匹配“*.扩展名”:在这种情况下,所有以指定扩展名结尾的URL都转向指定的Servlet。
- 路径映射:路径映射必须以'/'开始,以'/*'结尾,在这之间可以出现任意字符。路径匹配通常用于将对某个目录的所有请求转向一个指定的Servlet。
- 默认的Servlet,'/':默认的Servlet映射用于定义一个在没有给出路径信息时请求转向的Servlet。
Servlet配置
- 为Servlet提供初始化配置信息
- 配置信息由web.xml声明中的字符串组成
Servlet在编译的代码之外有初始化参数,当参数改变时,不需要重新编译Servlet,每个servlet都有一个与之相联的对象ServletConfig,Servlet对象提供了如下的方法来访问初始化数据
- getInitParameter(String name):这个方法返回指定参数的值,如果该值不存在就返回null;
- getInitParameterNames():这个方法以字符串对象枚举的方式返回Servlet初始化参数的名称,如果没有初始化参数,则返回一个空的枚举;
web.xml文件代码
<servlet>
…
<init-param>
<param-name>name</param-name>
<param-value>Tiger</param-value>
</init-param>
</servlet>
Java代码
//str的值为Tiger
String str = getServletConfig().getInitParameter("name");
ServletContext
在Servlet编程中,容器创建了应用程序上下文对象(ServletContext),用于描述Servlet运行坏境的环境,使得Servlet可以同容器进行通讯。
- 属于整个Web应用程序
- 可以访问到Web应用程序资源的本地输入流
- 把资源的虚拟路径转换为物理路径
- 记录事件日志
- 绑定一个对象在整个Web应用程序中共享
ServletConfig接口有一个方法getServletContext()返回一个ServletContext对象。然后就可以利用ServletConfig接口定义的方法获取在开发中需要的信息。ServletContext接口定义了主要方法有:
方法 |
描述 |
getMajorVersion() |
返回容器支持的Servlet API的主要版本 |
getResourceAsStream() |
返回资源对象的输入流 |
getAttribute() |
获得绑定在容器中的对象 |
setAttribute() |
通过名字把一个对象绑定在容器中 |
getInitParameter() |
获得容器的初始化信息参数 |
getRealPath() |
返回虚拟路径的物理路径 |
Log() |
把信息写入到Servlet日志文件中 |
ServletContext和ServletConfig的关系
在Servlet中共享信息
- 为所有的Servlet设置一个实时变化的参数值
- 在Web应用程序中共享一个对象
虚拟路径转换为物理路径
- Web应用程序的所有资源都被抽象到一个虚拟路径上
- 以根'/'开始,后面接上Web资源所在子目录的虚拟路径
http://localhost:8080/JavaWeb/servlet.html
- 不能直接使用虚拟路径来获得物理资源的位置
getResourcePaths(java.lang.String path):该方法返回指定路径下所有Web资源的列表。路径必须从Web应用程序的根"/"开始。
getResourceAsStream(java.lang.String path):该方法返回Web应用程序中一个物理资源的InputStream对象。对一个资源需要逐字节读取的时候该方法比较适用。
getResource(java.lang.String path):该方法返回一个Web资源的URL地址。
JavaWeb总结(三)的更多相关文章
- Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...
(一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...
- JavaWeb学习 (三)————Tomcat服务器学习和使用(二)
一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:
- java学习笔记-JavaWeb篇三
63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...
- JavaWeb总结(三)—JSP
一.JSP简介 1.基本认识 (1)JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp. (2)在JSP页面中编写的Java代码需要嵌套 ...
- JavaWeb 后端 <三> 之 Response Request 学习笔记
一.响应对象 Response(重点:HTTP协议响应部分) 查看
- JavaWeb(三)JSP概述
一.JSP概述 1.1.JSP简介 一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束.JSP是一种Java servlet,主要用于实现 ...
- JavaWeb(三)JSP之3个指令、6个动作、9个内置对象和4大作用域
前言 前面大概介绍了什么是JSP,今天我给大家介绍一下JSP的三个指令.6个动作以及它的9大内置对象.接下来我们就直接进入正题 一.JSP的3个指令 JSP指令(directive)是为JSP引擎而设 ...
- JavaWeb 后端 <三> 之 Response Request
1. 响应对象 Response(重点:HTTP协议响应部分) 查看
- 学习JAVAWEB第三天
## 数据库的设计· 1. 多表之间的关系 1. 分类: 1. 一对一(了解): * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人 2. 一对多(多对一): * 如:部门和 ...
- JavaWeb(三)servlet
Servlet * 什么是Servlet 是运行在web服务器端的Java应用程序,它使用JAVA语言编写,具有Java语言的优点.与Java程序的区别:Servlet对象主要封装了对Http请求的处 ...
随机推荐
- SQL Server 索引知识-结构,实现
索引的作用毋庸置疑,但他是如何组织,并实现提高语句访问效率的呢?本篇文章为大家做个详细的介绍. 聚集索引架构 B-tree 如图1-1 a.B-tree的结构,叶子节点为数据.数据按照聚集索引键有序排 ...
- SQL Server FOR XML PATH 和 STUFF函数的用法
FOR XML PATH ,其实它就是将查询结果集以XML形式展现,将多行的结果,展示在同一行. 下面我们来写一个例子: 假设我们有个工作流程表: CREATE TABLE [dbo].[Workfl ...
- 【转】什么是JavaScript
转自mdn学习网站-什么是JavaScript 什么是JavaScript? 欢迎来到 MDN JavaScript 初学者的课程! 在第一篇文章中,我们将会站在一定的高度来俯看 JavaScript ...
- C#综合揭秘——分部类和分部方法
在面向对象的“封装闭合性”开发原则中,一向提倡的是把独立的功能封装在一个类里面的!但从Visual Studio 2005开发,系统提供了一个分部类的开发方式一直受到争议,很多人认为把同一类的功能分布 ...
- 12-5 张雨RTCM3数据解码解不出的原因
数据大小:75kB 时间12-4 原因:二进制数据乱码,未通过电文头检验 2018-12-10 08:44:05 张雨RTCM32-MSM4无法固定,连差分都没有
- 使用MS的ScriptDom来拆解TSQL脚本
此处提供9.1.40413.0版本的DLL一共4个:Microsoft.Data.Schema.dll.Microsoft.Data.Schema.ScriptDom.dll.Microsoft.Da ...
- Spring-IOC bean 创建过程中的 ObjectFactory
AbstractBeanFactory中doGetBean方法里有一段拿到RootBeanDefinition后,实例化该bean的方法 // Create bean instance. if (mb ...
- 1192. [HNOI2006]鬼谷子的钱袋【进制】
Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会,其中有一 ...
- [CEOI2017]Building Bridges
题目 斜率优化思博题,不想写了 之后就一直\(95\)了,于是靠肮脏的打表 就是更新了一下凸壳上二分斜率的写法,非常清爽好写 就当是挂个板子了 #include<algorithm> #i ...
- C 六学家的困惑 【YY】 (2019年华南理工大学程序设计竞赛(春季赛))
冲鸭,去刷题:https://ac.nowcoder.com/acm/contest/625/C 小六喜欢两全其美的事情,今天就正好有一个这样的机会. 小六面前有两根管子,管子里面放满了数字为1到9的 ...