Java大数据之路--Servlet

  • Servlet

目录

Servlet

Servlet概述

实现Servlet

 Servlet继承结构和运行过程

Servlet细节 


  • Servlet概述

1、Sun公司提供的一个动态资源开发的技术。Servlet本质就是一个java文件。需要先编译后执行,并且需要存储在servlet容器中。

2、servlet容器:存储并运行servlet的环境称之为servlet容器,即 tomcat

3、web容器:存储并运行web资源的环境称之为web容器。即 tomcat

  • 实现Servlet

(不使用IDE)

1、创建一个类,实现servlet接口,即可编程一个servlet文件。 

package cn.zyj;
import java.io.*;
import javax.servlet.*;
res.getWriter().write("hello servlet");
public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
}
public class FirstServlet extends GenericServlet{
}

2、将编译后的文件放入classes目录

a.打开cmd窗口,临时引入环境变量 set classpath=%classpath%;[tomcat/lib下找到servlet-api拖动到cmd窗口] ,javac -d . FirstServlet.java。

b. 使用javac指令编译FirstServlet.java

c.将编译后的文件夹放入class目录中

3、为servlet添加配置文件。(web.xml)

<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.tedu.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/FirstServlet</url-pattern>
</servlet-mapping>

(使用IDE太过容易不再赘述)

4、在Myeclipse中添加tomcat

 

5、通过Myeclipse的tomcat发布web应用 

 

  •  Servlet继承结构和运行过程

1、Servlet继承结构

Servlet 基础servlet接口 需要重写全部方法 不适合广泛使用

|

|-------GenericServlet 通用Servlet 关注service()

      |

      |-----HttpServlet HTTPServlet 在通用servlet基础之上,添加了和HTTP协议相关的内容。更善于http协议相关开发

2. Servlet运行过程

a.HttpServletRequest 和HttpServletResponse两个接口如何创建对象的?

虽然上述两个接口定义了变量request,和response但是真正是实现对象创建的 应该是他们的两个子实HttpServletRequestWrapper和 HttpServletResponseWrapper。

b.页面中的静态资源为什么可以被直接访问?

页面中的静态资源和没有人要的资源都会交给conf/web.xml里的defaultServlet 来处理。defaultServlet也称之为缺省servlet。

地址栏中输入的任何内容都会作为虚拟路径使用,书写静态资源名称,如 (1.html)也是虚拟路径,这个路径如果没有和url-pattern相匹配,则会交给 defaultServlet处理。

defaultServlet会先在静态资源中作比对,如果有静态资源名称与之相同,则加 载显示,如果没有则会显示404页面。

  • Servlet细节 

1、Servlet细节一 

servlet组成:servlet标签和servlet-mapping标签,servlet标签称之为注册servlet标签,servlet-mapping标签称之为servlet映射标签。 注册servlet标签中添加子标签servlet-nameservlet-class,代表servlet的名称和具 体包名类路径。映射servlet标签中添加子标签servlet-nameurl-pattern

<servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>cn.tedu.FirstServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>/servlet/FirstServlet</url-pattern>

</servlet-mapping>

之所以书写成注册和映射servlet两部分,是因为考虑以后可能有多个虚拟路径同时映射到真实的servlet身上,以上形式只需要

书写映射servlet标签即可,相对来说,较为简单,同时servlet名称不允许重复。

2、Servlet细节二

servlet虚拟路径的通配形式--共两种:i. "/"开头,以"/*"结尾的通配形式。ii. "*.后缀"的通配形式。*.do

<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.tedu.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
--------------------------------------------------------------
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.tedu.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>*.do</url-patte

3、Servlet细节三-------通配路径的优先级

虚拟路径与通配路径越相似的路径越优先采用。

*.do永远匹配级别最低。

4、Servlet细节四-------load-on-startup标签

a.load-on-startup标签可以书写在注册servlet标签中。在load-on-startup标签中间可以 添加一个数字,如果这个数字大于等于0,那么当前servlet会随着web应用的启动 而加载。如果数字小于0,则servlet不会随着web应用的启动而加载,仍然需要访 问之后才会创建对象完成初始化。

b. 注意:load-on-startup标签中的数字表示优先级,数字越小,优先级越高,越优先 启动。

注意:load-on-startup,在服务器启动的时候会创建并初始化servlet对象,并不会请求servlet对象。

5、Servlet细节五------缺省servlet

在conf/web.xml中包含一个缺省servlet(defaultServlet),会随着tomcat服务器的启动而加载,负责所有web应用静态资源的加载,如果用户访问的资源路径不存 在或者服务器报错,都会交给缺省servlet来处理。 缺省servlet的url-pattern配置为一个"/"

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

"/"为缺省servlet特有的虚拟路径形式,任何一个servlet如果配置虚拟路径为"/", 那么当前servlet都会作为缺省Servlet进行工作。

问题:"/"和"/*"意义上的区别:

i. "/"是缺省servlet的虚拟路径,一旦servlet配置这个虚拟路径,则会作为缺省 servlet使用,负责静态资源和没人要的资源加载。

ii. "/*"是通配的虚拟路径形式,表示在*号的位置输入任意的内容都会与当前的路径匹配,所有的路径都会使用/*来通配,使用对应的servlet显示结果。

6、Servlet细节六----------线程安全问题

当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一 个线程,并在这个线程上调用Servlet的service方法,因此service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。

解决方案:

a.多使用局部变量,少使用成员变量和静态变量。因为成员变量和静态变量都会引发线程安全问题。

b.合理加锁。锁一定要锁住关键部分代码,否则会降低代码的执行效率。

7、Servlet细节七--------Servlet运行过程及生命周期

a>Servlet运行过程

①通过hosts文件或域名解析器,将域名解析为一个ip地址,找到对应的服务器,再通过端口号确定是哪一个服务器。

②通过Host请求确定是当前服务器的哪一台虚拟主机。

③通过请求行的请求资源名称部分,确定是哪一个web应用的虚拟路径。

④通过请求行的请求资源名称部分,确定是当前web应用的哪一个web资源的虚拟路径,再使用web资源的虚拟路径与web.xml文件中的url-patter作比较,确定是哪一个真是的servlet文件。

⑤servlet返回的结果会放在response缓冲区中,在服务器内组织成一定结构之后,在发送给浏览器展示。

b>Servlet的生命周期

在servlet被初次访问时,会创建一个对象驻留在tomcat内存中。这个对象会重复使用。在对象创建之后,会立刻调用init方法完成初始化操作。每一次访问servlet都会导致service方法执行,提供服务。在web应用被移除容器或者服务器关闭情况下,servlet对象会被销毁,在销毁之前那会自动调用destroy方法完成一些善后操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值