JavaWeb系列之八(Servlet的学习)



1.Servlet的快速入门

什么是servlet?

servlet就是java程序,可以接受和响应来自客户端的请求。

实现servlet:(1)实现Servlet接口(2)继承GenericServlet类(3)继承HttpServlet类

如果实现Servlet接口,需要把接口里面的方法都实现,使用继承类,就不用。

例子:向页面输出内容hello servlet

(1)开发步骤

继承GenericServlet类实现servlet

向页面

配置web.xml

<servlet-name>hello</servlet-name>

<servlet-class>包名.类名</servlet-class>

2.servlet执行过程

servlet执行过程图解

http://1127.0.0.1/servlet/hello

第一布:根据地址栏输入的地址找到servlet配置文件中url-pattern里面相同地址

第二步:去找地址对应servlet-name

第三步:找到另外一个servlet标签里面和相同的servlet名称

第四步:找到servlet包类的路径,利用反射得到类所有的内容,反射里的invoke

3.servlet的生命周期

就是servlet的生命周期:就是从创建到销毁的生命周期

servlet接口有五个方法:有三个方法与生命周期相关的

init方法:servlet创建的时候来执行这个方法,servlet在第一次访问时候创建,创建一次

service方法,处理客户端请求的时候执行这个方法,每次请求时候都执行,都执行

destroy方法,销毁servlet的时候执行这个方法,关闭服务器时候销毁servlet,执行一次

4.接口的继承关系

GenericServlet,HttpServlet,里面的方法参数是HttpServletResponse,HttpServletRequest,

ServletRequest HttpServletRequest:提供请求信息为servlet提供

ServletResponse HttpServletResponse:响应请求信息 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。

HttpServletRequest和HttpServletResponse是ServletRequest ServletResponse的子接口

HttpServletRequest和HttpServletResponse专注于http协议的接口

ServletRequest ServletResponse

5.注意事项

(1)GenericSerclet里面init有参数和没参数的:init有参数的方法最终也会执行没参数的方法

(2)HttpServlet里面的service和doXX方法:根据提交方式执行相应的doxx方法,比如提交get方法,执行doGet()

在实际开发中一般都是实现HttpServlet方法实现

(3)简化编程:

无论什么提交方式,都会执行照这个代码

在doPost方法里面调用doGet():this.doGet(response,request);

(4)Servlet启动时候创建,在服务器启动时候创建,而不是第一次访问

在web.xml中找到启动的servlet,<load-on-startup>

(5)修改模板

6.url-pattern的配置

第一种:完全路径匹配:使用/开头/hello/aa/hello

第二种:目录匹配:使用使用/开头/aa/*/*

第三种:扩展名匹配:不使用/开头*.action  *.do

配置优先级:完全路径匹配>目录匹配>扩展名匹配

7.开发中的路径问题

相对路径:和html的一样

绝对路径:一般开发中都使用绝对路径

第一种写法:http:127.0.0.1/day08/img/w10.png

第二种写法:直接访问/day08/img/w10.png(一般都用这种)

路径分类有两种

第一类:客户端 :带项目名称 一般重定向 /day08/img/w0.png

第二类:服务器端路径:不需要带项目名称 在服务器内部经行访问的操作,一般使用转发

8.ServletConfig对象的使用

第一个作用:

配置初始化参数:

在web.xml中找到servlet

配置初始化参数:

在web.xml中找到要配置servlet,只能在当前配置的servlet里面使用,不能再其他的servlet里面使用

<init-param>

<param-name>url</param-name>

<param-value>192.0.0.1</param-value>

</init-param>

方法:

getInitParameter(String name)获取初始化参数的值

getInitParameterNames():获取所有的初始化参数的名称

代码

//得到servletconfig对象

ServletConfig config =  getServletConfig();

//执行 getInitParameterNames()所有初始化参数的名称

Enumeration<String> enumeration =  config.getInitParameterNames();

//遍历

while(enumeration.hasMoreElements()) {

//得到每一个初始化参数的名称

String name1 = enumeration.nextElement();

//得到初始化参数的值

String value1 = config.getInitParameter(name1);

System.out.println(name1+" :: "+value1);

}

第二个作用:得到当前运行的servlet的名称<serlvet-name></serlvet-name>:getServletName()

第三个作用:得到servlet的对象 getServletContext();

9.servletContext对象

启动tomcat服务器,在tomcat里面可能有很多的项目,这个时候服务器会为每一个项目创建一个对象servletContext。

在这个项目里面,如果通过servlet1向servletContext里面存一个值,这个时候在项目里面其他所有的servlet里面都 可以取到这个值

servletContext域:在一定的范围以内,做存值和取值操作

servletContext域范围:整个的web项目

存值和取值

存值:setAttribute(String name, Object object) :两个参数,第一个参数设置值的名称,第二个参数是值

取值:getAttribute(String name) :参数是设置值的名称

10.通过servletContext对象读取全局的初始化参数

全局的初始化参数:所有的servlet里面都可以使用

配置全局初始化参数

在web.xml中,但是不能配置在任何的一个servlet里面

<context-param>

<param-name>url</param-name>

<param-value>192.0.0.1</param-value>

</context-param>

方法:

getInitParameter(String name) :得到全局初始化参数的值

代码

//得到servletContext对象

ServletContext context = getServletContext();

//得到username的值

String username = context.getInitParameter("username");

System.out.println("username: "+username);

getInitParameterNames() :得到所有的全局初始化参数的名称

代码

//得到servletContext对象

ServletContext context = getServletContext();

//得到所有的全局初始化参数的名称

Enumeration<String> enumeration = context.getInitParameterNames();

//遍历

while(enumeration.hasMoreElements()) {

//每一个全局初始化参数的名称

String namev = enumeration.nextElement();

//得到值

String valuev = context.getInitParameter(namev);

System.out.println(namev+" :: "+valuev);

}

12.读取web项目中的文件

properties文件格式

读取properties文件

使用load(InputStream )

classes/db.properties路径是一个相对路径,相对jvm的路径,web项目,tomcat启动时候创建jvm 而启动项在bin目录下,则是相对与bin目录的,而                                                  我们的项目不能放在bin目录下

inputStream getResourceAsStream("文件路径");

首先第一个位置是固定就是项目的路径/

在src的同级目录下面

//InputStream in= context.getResourceAsStream("/WEB-INF/classes/db.properties");

//在包下面

//InputStream in= context.getResourceAsStream("/WEB-INF/classes/cn/itcast/servlet/db1.properties");

//  放在webroot下面

//InputStream in= context.getResourceAsStream("/db2.properties");

和webroot同级目录下,无法读取到,根本就没有发布到tomcat里面去

使用传统方式,只要写完全路径

读取webroot下面的文件

使用getResourceAsStream("文件的路径")

首先第一个位置是固定 / : 理解为项目的名称,后面的部分是文件在tomcat里面具体的路径

//得到servletContext对象

ServletContext context = getServletContext();

//读取文件流

//第一个位置 /

//后面的位置 文件在tomcat里面具体的路径

InputStream in = context.getResourceAsStream("/db2.properties");

如果文件放到项目路径下(webroot在同一级目录),文件不能使用servletContext对象读取到

文件根本没有发布到tomcat里面

String getRealPath(String path)  :得到文件的完全路径 带盘符

13.反射的一个过程

反射是一些通用性比较高的代码,一般使用在框架里面

通过反射得到类里面的所有的内容

所有内容包含:构造方法(有参数和没有参数),属性,普通方法

画图分析反射的过程

创建一个java文件,

第一步:保存到本地硬盘,

第二步:编译成.class文件

第三步:使用类加载器加载到内存中(依赖于jvm)

class文件在内存中可以使用Class类进行表示

首先得到Class类

有三种方式

类名.class

对象.getClass()

Class.forName("包类路径")

构造方法使用Constructor类表示

属性使用Filed类表示

普通方法使用Method类表示

15.默认servlet

如果页面出现404问题,由默认的servlet操作

在tomcat的web.xml中招默认的servlet

需要把这个值设置成true,直接访问项目

16、url和uri的区别

url:专门指的是网络地址 比如 http://www.itcast.cn http://www.baidu.com

uri: 所有的网络地址 比如 [email protected]

17、类的加载器来读文件

使用类加载器使用范围:读取web项目中classes里面的文件

得到类加载器

首先Class类(有三种方式)

通过Class类里面.getClassLoader()得到类加载器

在类加载器里面使用方法 getResourceAsStream()得到文件的输入流

直接写classes里面的文件的名称

//得到Class类

//  Read4.class

Class clazz = this.getClass();

//得到类加载器

ClassLoader classLoader = clazz.getClassLoader();

//读取文件

InputStream in = classLoader.getResourceAsStream("db.properties");

8、默认servlet

如果页面出现404问题,由默认的servlet操作

在tomcat的web.xml中找默认的servlet

配置启动时候创建servlet ,使用<load-on-startup>这里面的值不能写成1,会与默认的servlet冲突

<url-pattern>/</url-pattern>

如果把项目里面的一个servlet里面url-pattern写成/,就会成为一个默认的servlet

在默认的servlet里面配置

<init-param>

<param-name>listings</param-name>

<param-value>false</param-value>

</init-param>

需要把listings值设置成true,直接访问项目里面一个文件夹,可以把文件夹里面的所有的内容显示出来

时间: 2024-10-10 02:16:11

JavaWeb系列之八(Servlet的学习)的相关文章

JavaWeb系列:Servlet

个人整理,欢迎转载与批评建议,转载请添加索引,谢谢. ---------------------------------------------------------------2017.06.10--------------------------------------------------------------- Servlet简介 Servlet是Java Web的技术核心之一,而且也是另一技术核心Java Server Pages(JPS)的支撑基础.文章的主要部分将介绍Serv

JavaWeb系列之八(Cookie&amp;amp;Session)

 1.jsp的入门 jsp就是一个servlet,终于会被编译成servlet,jsp:java server pages,java服务器端页面,包括html+java+jsp的指令 使用servlet向页面输出内容,须要使用字节流或者字符流向页面输出 jsp:java server pages.java服务器端的页面 运行过程:放到tomcat work文件夹,在訪问的时候,会编译成servlet. 嵌入java代码的三种方式 第一种: <%! int num=10 %>:表示的一个是成

JavaWeb系列之八(Cookie&amp;Session)

 1.jsp的入门 jsp就是一个servlet,最终会被编译成servlet,jsp:java server pages,java服务器端页面,包含html+java+jsp的指令 使用servlet向页面输出内容,需要使用字节流或者字符流向页面输出 jsp:java server pages,java服务器端的页面 执行过程:放到tomcat work目录,在访问的时候,会编译成servlet. 嵌入java代码的三种方式 第一种: <%!int num=10 %>:表示的一个是成员变

mongo 3.4分片集群系列之八:分片管理

这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全 4.mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域 5.mongo 3.4分片集群系列之五:详解平衡器 6.mongo 3.4分片集群系列之六:详解配置数据库 7.mongo 3.4分片集群系列之七:配置数据库管理 8.mongo 3

JavaWeb系列-JSP基础语法

JSP注释(页面中,右键->查看源代码是否可见) 1.客户端可见的显式注释 <!-- 注释内容 --> 2.客户端不可见的隐式注释 单行注释    //注释内容 多行注释    /*注释内容*/ JSP注释     <%-- 注释内容 --%> 显式内容会发送到客户端,而隐式内容不发送到客户端 Scriptlet 所有在嵌入在HTML代码中的Java程序都必须使用Scriptlet标记出来. <%%> 可在标记中定义局部变量.编写语句 <%!%> 可在

Servlet的学习(十一)

在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用HttpServletRequest可以防止盗链行为,什么是盗链行为,比如说在一个别的网站上超链接,指向我们的网页中的某个数据,这样从他的网页上就可以直接进入到我的某个页面,无需从我的指定路口进入: 例如在一个简单的1.html文件中加入了我的[myservlet]web应用下的某个Servlet访问的超链接:

Servlet的学习(四)

在本篇的Servlet的学习中,主要来学习由使用MyEclipse来开发Servlet的一些小细节. 细节一:在web.xml中可以对同一个Servlet配置多个对外访问路径,并如果在web.xml中配置的信息服务器会自动加载部署,而如果是在Servlet中进行程序代码的修改,则每次都要重新部署. 首先,在使用MyEclipse创建Servlet后,会根据所创建的Servlet进行到web.xml文件的映射,如下图所示: 经过这个映射之后,在web.xml文件中就自动生成了这个Servlet的配

Servlet的学习(二)

本篇接上一篇<Servlet的学习(一)>,讲述如何利用MyEclipse来创建web工程, 同时讲述如何在MyEclipse中配置Tomcat服务器. 在MyEclipse中,新建“Web Project”,会看到: 我们需要注意的有以下几点: [Project Name]:工程名,代表了这个web应用所在目录名,当在服务器中发布这个web应用时,在Tomcat的[webapps]目录下,就会产生这个目录,所以对于截图来说,就会有一个[myservlet]目录. [Source folder

Servlet的学习之Request请求对象(3)

本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看RequestDispatcher对象的“转发”功能: 在<Servlet的学习(五)>中说过,使用ServletContext对象的getRequestDispatcher方法可以获得转发对象RequestDispatcher对象,将请求进行转发给其他的Servlet或者JSP处理,同时在该篇的结