您的位置:首页 > 编程语言 > Java开发

JavaWeb系列之八(Servlet的学习)

2015-06-08 14:16 405 查看

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: 所有的网络地址 比如
test@163.com

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,直接访问项目里面一个文件夹,可以把文件夹里面的所有的内容显示出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: