您的位置:首页 > 其它

【HM】第7课:Servlet

2015-07-02 22:55 609 查看
<pre>

day07

上节内容回顾
(1)xml的语法

(2)xml的解析
*xml解析的技术有哪些:dom、sax、pull
*dom和sax的原理

(3)tomcat的目录
bin、conf、webapps

(4)虚拟路径的配置

(5)http请求

(6)http响应

(7)pull解析xml代码
思维导图

1servlet的快速入门
(1)servlet是javaweb中的一个组件(帮我们实现好了一些功能,可以直接使用这些功能进行操作)。
*通过api文件进行查看(javaee的api文档)
*javax.servlet包下面,是一个接口
**servlet是一个运行在web服务器的java程序,接受和响应来自浏览器的操作

(2)实现一个servlet有三种方式
第一种:实现servlet接口
第二种:继承GenericServlet类
第三种:继承HttpServlet类
**如果实现接口,需要把接口里面的所有的方法都实现;但是如果继承一个类,不需要都实现

(3)第一个servlet程序
*实现功能:向页面输出内容 hello servlet

*实现步骤:
1、创建一个servlet (继承GenericServlet类)
2、向页面输出内容(是一个响应操作)
*service(ServletRequest req, ServletResponse res)
3、让web服务器知道这个是一个servlet,而不是一个普通的java程序
*在配置文件中进行相应的配置
*找到web项目的web.xml进行相应的配置
*注意配置的时候一个servlet程序对应一个servlet标签和一个servlet-mapping
标签。
**
<servlet>
<servlet-name>servlet1</servlet-name>
<servelt-class>cn.itheima.servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

2servlet的执行过程
*画图分析servlet执行过程
*第一步:根据浏览器的地址栏输入的路径,到web项目中的web.xml中找url-pattern里面相同的名称
*第二步:找到url-pattern对应的servlet名称
*第三步:到另外一个标签servlet标签里面找servlet名称相同的servlet
*第四步:得到servlet的位置(包类路径)
*第五步:利用反射的原理,让servlet里面的service方法自动执行

3servlet的生命周期
*生命周期:比如一个人从出生到死的过程,这个是一个人的生命周期

*servlet从创建到销毁的全过程称为 servlet的生命周期

*在servlet接口里面有三个方法是与生命周期相关的方法
**init方法:初始化的方法,servlet创建时候执行这个方法
**service方法:每次访问servlet时候回执行这个方法
**destroy方法:servlet销毁时候会执行这个方法

*servlet在什么时候创建?
**在第一次访问servlet时候创建,执行init方法

*servlet创建几次?
**创建一次,init方法执行一次

*service方法会执行几次?
**每次访问servlet时候,会执行service方法,执行多次

*servlet在什么时候销毁?
**关闭服务器时候销毁,执行destroy方法,执行一次

4servlet开发中的细节问题
(1)代表servlet请求的对象
*ServletRequest和HttpServletRequest关系
**HttpServletRequest是ServletRequest子接口

(2)代表servlet响应的对象
*ServletResponse和HttpServletResponse关系
**HttpServletResponse是ServletResponse子接口

***sun公司设计的目的:认为未来互联网发展不仅仅限于一种http协议,可能还会有其他的协议,但是现在只有http,
设计了一个ServletRequest和ServletResponse,如果未来有了新的协议,不需要开发新的接口,可以直接使用。

(3)GenericServlet类里面init没有参数的方法和init有参数的方法的关系
*通过servlet的源代码查看
**init有参数的方法到servlet里面也要调用没有参数的init方法,所以直接使用没有参数的init方法就可以了

(4)HttpServlet类service方法和doXX方法的关系
*在service里面根据不同的提交方式调用不同的doxx方法
比如get提交方式调用doGet方法,比如post提交方式调用doPost方法

**表单提交方式有很多种,常用有get和post
**在实际开发中,一般都使用继承HttpServlet类实现servlet,在这个servlet里面直接写doget和dopost方法就可以了

**在实际开发中,一般可以直接通过myeclipse工具直接创建一个servlet

(5)简化编程
*在doPost方法里面调用doGet方法,无论是get请求还是post请求都会执行代码

(6)修改servelt的模板

(7)服务器启动的时候创建servlet
*如果张三第一个访问servlet,如果创建servlet时候做很多的操作,要查询数据库,读文件,谁第一个访问,会很慢
*进行相应的配置,在web.xml中进行操作
**使用一个标签 <load-on-startup>正整数的值</load-on-startup>
**在要启动的servlet标签里面进行配置
*** <load-on-startup>2</load-on-startup>
**配置启动时候创建值,不能写成1,在tomcat里面有默认的servlet值是1

5url-pattern的配置
*在浏览器输入的路径进行访问配置

*有三种:
第一种:完全路径匹配
**写法,首先/必须要有的,/hello , /aa/hello

第二种:目录匹配
**写法,首先/必须要有的,/bb/* , /*

第三种:扩展名匹配
**写法,首先不能有/,*.action, *.do

**在一个servlet里面可以写多个 <servlet-mapping>,最终只会有一个访问

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

**把ppt上面的例子看明白

6、开发中的路径问题
(1)相对路径
*在一个html中引入图片
**如果图片和html在一个目录下,直接写图片名称
**如果图片在html的上层目录,../图片名称
**如果图片在html的下层目录,目录名称/图片名称

(2)绝对路径(使用这种方式)
*写法一: http://127.0.0.1/day07/img/w02.jpg *写法二:/项目名称/路径
=/day07/img/w02.jpg

(3)绝对路径分成两种
第一种:客户端路径:在路径里面带项目名称 /day07/.....

第二种:服务器端路径: 在路径里面不带项目名称
**经常用在转发的操作里面
**重定向和转发的区别(重点掌握概念)

=========================================================================================
上午内容的总结
(1)servlet的实现方式有三种
(2)servlet代码实现的步骤
(3)servlet生命周期(记住)
(4)Servlet开发注意细节
(5)url-pattern配置(三种配置以及优先级)
(6)路径问题
*绝对路径
*重定向和转发区别(掌握)

7ServletConfig对象
*得到servletConfig的对象getServletConfig()方法

*可以做的事情
第一个:可以获得当前运行的servlet的名称 使用方法getServletName()
=<servlet-name>ServletDemo1</servlet-name>
//得到当前运行的servlet的名称 <servlet-name>ServletDemo5</servlet-name>
ServletConfigconfig = getServletConfig();
Stringname = config.getServletName();
System.out.println(name);

第二个:可以得到初始化参数,使用方法getInitParameter(String name)
=创建初始化参数,找到web.xml文件,进行相应的配置
*找到要配置的servlet标签,进行配置
<init-param>
<param-name>名称</param-name>
<param-value>值</param-value>
</init-param>

=//得到初始化参数 getInitParameter(String name)
publicvoid test2() {
//得到servletconfig对象
ServletConfigconfig = getServletConfig();
//得到初始化参数username
Stringvalue = config.getInitParameter("username");
System.out.println(value);
}

=Enumeration getInitParameterNames() :得到所有的初始化参数的名称
=// getInitParameterNames()使用
publicvoid test3() {
//得到servletconfig对象
ServletConfigconfig = getServletConfig();
Enumeration<String>enumration = config.getInitParameterNames();
//遍历得到每个名称
while(enumration.hasMoreElements()){
Stringname = enumration.nextElement();
System.out.println(name);
System.out.println("value:"+config.getInitParameter(name));
}
}

*使用范围:初始化参数配置在某个servlet标签里面的,所以只能在这个servlet里面获取到这些初始化参数

第三个:得到ServletContext对象,使用方法getServletContext()
*一般在实际开发中不用这个方法,得到ServletContext对象使用getServletContext();

8servletContext对象(****
第一件事情:获取全局的初始化参数(在项目里面的所有的servlet里面都可以得到参数)
不要写在任何的一个servlet标签里面。
<context-param>
<param-name>名称</param-name>
<param-value>值</param-value>
</context-param>
=getInitParameter(String name)
**//获取全局初始化参数
//servletContext对象
ServletContextcontext = getServletContext();
Stringurl = context.getInitParameter("url");
System.out.println(url);
=getInitParameterNames()
**//servletContext对象
ServletContextcontext = getServletContext();
Enumeration<String>enumration = context.getInitParameterNames();
while(enumration.hasMoreElements()){
Stringname = enumration.nextElement();
System.out.println("name:"+name);
System.out.println("value:"+context.getInitParameter(name));
}

第二件事情:用于存值和取值的对象
在tomcat服务器启动的时候,tomcat里面可能有多个项目,服务器会为每一个项目创建一个对象servletContext,
在一个项目里面向这个对象里面设置一个值,在这个项目里面的所有的servlet里面都可以取到这个对象里面的值
*向servletContext里面设置值:setAttribute(String name, Object object)
=两个参数:第一个参数是值的名称,第二个参数具体值
*从servletContext里面获取值:getAttribute(String name)

**比如:通过servlet1向servletContext设置一个值,通过servlet2获取这个值

9、练习:使用servletContext统计网站的访问次数
*创建一个servlet,每次访问这个servlet,代表一次访问
*servletContext域对象:在一定的范围内,存值和取值,servletContext范围是整个web项目,只有服务器不关闭,一直存在。

10、使用servletContext对象读取web项目中的文件
(1)传统方式读取web项目中的文件

(2)servletContext对象读取web项目中的文件
*使用到这个对象里面的两个方法
=InputStream getResourceAsStream(String path) :得到web项目中文件的输入流

**操作一:读取web项目中src下面的文件
***使用servletContext里面getResourceAsStream(String path)得到文件的输入流
==path:首先第一个位置写 /,理解为项目名称;后面写文件在tomcat里面具体的路径的地址
=代码
//读取src下面的文件
//得到properties对象
Propertiesp = new Properties();
//得到servletContext对象
ServletContextcontext = getServletContext();
//首先第一个位置是固定的,写/ 理解为项目名称 ;后面文件在tomcat里面具体的路径地址
InputStreamin = context.getResourceAsStream("/WEB-INF/classes/db1.properties");
p.load(in);
Stringurl = p.getProperty("url");
Stringusername = p.getProperty("username");
Stringpassword = p.getProperty("password");
System.out.println(url+""+username+" "+password);

**操作二:读取包里面的文件
***首先第一个位置是固定的,写 / 理解为项目名称;后面文件在tomcat里面具体的路径地址
=InputStream in =context.getResourceAsStream("/WEB-INF/classes/cn/itcast/readfile/db2.properties");

(3)StringgetRealPath(String path) :得到文件的完全路径(带盘符路径)
** 首先第一个位置写 /,理解为项目名称;后面写文件在tomcat里面具体的路径的地址
//path路径和之前写getResourceAsStream原则是一样的
//I:\0621\apache-tomcat-7.0.53\webapps\day07\db3.properties
Stringpath = context.getRealPath("/db3.properties");

11、使用类的加载器来读文件
*使用范围:只能读取classes里面的文件
*要想使用类加载器读取文件,首先得到类加载器
**类加载器如何得到:
***首先得到Class类(有三种方式)
***其次使用Class类里面的方法

*代码
//得到Class类
Classclazz = this.getClass();
//得到类加载器
ClassLoaderclassLoader = clazz.getClassLoader();
//使用类加载得到文件的输入流
InputStreamin = classLoader.getResourceAsStream("db1.properties");

12urluri的区别
*url:指的是浏览器地址栏访问的地址,比如 http://127.0.0.1/day07/read4 *uri:包含url地址,uri里面也可以有其他网络的地址,比如 zhangsan@163.com thunder:// ed2k:///

13、默认Servlet介绍(了解)
*比如在浏览器的地址栏随便输入一地址,浏览器显示404,这个404的效果是默认的servlet实现的
*到tomcat的conf目录,找到web.xml
*配置<load-on-startup>值是1,自己要自己创建的servlet在服务器启动时候创建,值不能写1,大于1的值
*默认servlet的<url-pattern>/</url-pattern>,如果把一个servlet的<url-pattern>/</url-pattern>这个servlet就可以成为一个默认的servlet

14、反射的原理(掌握)
*反射:反射应用在通用比较高的代码里面,比如框架

*反射原理(画图分析)
**通过反射得到类中的所有的内容
***类中:构造方法,属性,普通方法

==================================================
完成的任务:
1、把今天我写的所有代码至少一遍
2、把servletContext里面代码至少写两遍
3、把反射的原理描述清楚

</pre>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马课程