您的位置:首页 > 运维架构 > Tomcat

Servlet详解

2015-10-16 15:08 501 查看

Servlet

Servlet介绍: Servlet 用来开发动态的web资源的技术

Servlet给予Request-Response,和Http一致

Sun公司给出了Servlet接口

Servlet快速入门

创建 Dynamic Web Project

普通类继承于HttpServlet

在web.xml文件中配置虚拟访问路径

先配置一个servlet下的servlet-name,servlet-class

<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.jack.servlet.MyFirstServlet</servlet-class>
</servlet>


servlet-name配置的是任意名称

servlet-class配置的是对应的servlet类,也就是我们所编写的应用程序类

然后配置一个servlet-mapping下的servlet-name,url-pattern

<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>


这里servlet-name与上面的配置对应servlet标签中的servlet-name对应,url-pattern对应到浏览器栏的访问地址

最后覆盖HttpServlet的doGet和doPost

Servlet的执行过程

首先提交路径在web.xml中对应的路径

然后通过Servlet-name找到对应的Servlet-class也就是找到我们编写的程序

提交的方式中有get和post两种,在对应的Servlet类中找到doGet和doPost方法

Servlet编译和运行

通常我们使用的Java SE时,自动导入的jre下的lib下的rt.jar

现在学习Java EE时,自动导入的Java EE 7 Library中存在Java ee.jar提供Servlet支持

开发时运行在Eclipse 中或MyEclipse中有javaee.jar,而Servlet运行在tomcat的环境中,在tomcat/lib/servlet-api.jar

servlet运行原理的剖析

自己编写的servlet中没有main,通过xml配置来获取类名,然后回调其中的doGet和doPost方法

Servlet的声明周期

Servlet接口类–>实现类GenericServlet–>子类 HttpServlet接口–>自定义的类

* 简化了servlet的开发

* Servlet接口提出,为了解决给予请求-响应模型数据处理

GenericServlet 实现接口Servlet接口,与协议无关

HttpServlet与Http协议相关的方法

这样即使后面出现了其他的协议,也可以不用改动上层

生命周期

init();//初始化

service(ServletRequest request,ServletResponse response);//服务

destory();//销毁

tomcat服务启动时,没有创建servlet对象

第一次访问,tomcat构造servlet对象,调用init,执行servlet

第二次以后访问tomcat不会创建对象,只会执行对应的service方法

destory方法是服务器正常关闭时调用

配置Servlet

启动配置

Servlet随着tomcat服务器启动时,进行初始化–《load-on-startup》

《load-on-startup》参数可以是一个数字0-9代表的是服务器加载的优先级别 0 most high

典型应用:在tomcat启动时,想要通过servlet加载一些配置文件,配置随着服务器启动(Struct1)

Servlet配置

一个Servlet配置可以对应多个访问路径(可以配置多个url-pattern)

web.xml中url的三种分配方式

完全路径匹配(以/开始) /hello , /init

目录匹配(以/开始) /,/abc/

扩展名匹配 (不能以/开头) *.do

Servlet作用

动态生成页面

掌握servlet程序的编写

servlet中三个方法

init();

service();

destory();

init(ServletConfig sc);

可以通过ServletConfig来获取Servlet的一些初始化参数

可以通过getServletConfig来获取对应的servlet中的ServletConfig对象获取初始化的参数init-param

ServletContext

每一个工程都会创建单独的ServletContext对象,这个对象代表当前工程

全局配置以及全局处理,全局数据共享

只能通过ServletConfig来获取ServletContext对象

ServletContext的功能

获取web应用初始化参数context-param标签

ServletContext对象实现数据共享

案例: 统计站点访问次数

ServletContext中可以通过设置setAttribute以及对应的getAttribute两种方法来设置网站的初始化访问次数和获取网站的访问次数

实现Servlet转发

案例: 统计字母出现的次数

//每个servlet都得写,或者说加载对应的次数

通过ServletContext对象读取资源文件

Servlet中获取资源,然而网站资源不一定在WebRoot下,我们一般都需要通过特殊的方法才能加载到对应的资源路径,不然访问不到对应的资源

Servlet中有两种获取资源的方法,我们可以通过ServletContext和虚拟路径去获取文件的真实路径,这样我们就可以实现对资源的读取了

另外一种方式,我们可以通过类的加载器去获取对应的资源,然后在获取对应的路径名,这个路径是绝对路径

在整个目录下我们需要通过对资源的访问,资源往往存在其他的目录下,所以我们需要通过获取绝对路径的方式才能获取到该资源

转发和重定向

转发产生一次请求,一次响应;重定向产生两次请求,两次响应

转发对客户端来说是不可见的,重定向客户端可以察觉到

转发时,请求发送至服务器后,服务器中对应的Servlet程序对其进行处理,然后进行转发,最后处理该请求的可能就是另外的程序了,转发可以无数次重叠

重定向,请求发送至服务器后,服务器给定响应,响应头中包括302的状态码和Location的头信息,客户端通过Location头信息来进行下次请求,服务器对该次请求当然也得有响应

所以转发和重定向中请求和响应的次数不一致

遗漏点

java 编译带三方jar包的类 javac -classpath 路径 类

java 编译带package的类 javac -d . 类

疑问

java 中多个文件的编译,是否可以向C语言中编写make命令一样,写成一个文件,然后执行该文件变可以编译整个文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet tomcat sun