首页 > 代码库 > Java基础——Servlet(一)
Java基础——Servlet(一)
在学习Servlet之前,需要首先学习一些关联性的知识。
一、动态网页程序
动态网页:它是网页中的偏功能性的部分也是最重要的部分。它不是我们平时所看见的页面特效,展示的效果。而是,一种交互行为。比如,用户注册一个账号的过程中,注册格式的提示与最后的提交等工作。
动态网页程序:它是web服务器的作用,是接收用户请求,并将响应结果返回浏览器,对于静态HTML的访问,web服务器可以直接从文件系统中读取文件内容(html文件)后返回给浏览器(象以前做的socket程序),但对于那些要根据条件去动态创建内容的访问请求,web 服务器本身不具备处理的能力,而且要专门的web服务器处理程序模块来处理。因此 动态网页内容的创建分为两个步骤:
1.使用某种编程语言写出相应的程序
2.需要一个专门的web服务器程序模块来解释执行该动态网页程序
这个专门的web服务器程序模块,称为引擎 ,常用的有 ASP 引擎,Servlet 引擎,JSP引擎。引擎 以web 服务器扩展模块的形式提供,通常是由那些提供动态网页解决方案的公司开发的。引擎要与动态网页程序进行通讯,必须要提供一些API给动态网页程序调用。
引擎 提供的API 有两方面的作用:
1.将访问请求的相关信息传递给动态网页程序 //访问者的IP,请求消息头
2.将动态网页程序产生的结果传给浏览器
我们以前讲过URL ,它不仅可以指向一个静态html文件,还可以指向服务器端某种可被解释运行的程序文件。如果URL 后缀名为.html 或.htm,则web服务器直接在本地文件系统中找这个文件,并且原封不动的传回给客户端,这样产生的网页文档总是相同的。如果URL 后缀名不是html,而是符合某种引擎所处理的资源名的特征,web服务器就会把请求交给相应的引擎去处理,然后由引擎调用某个程序文件,并将程序生成的结果返回给客户端。目前,不少公司提供了动态网页技术的解决方案,称之服务端的web编程技术,常见的有ASPNET、Servlet / jsp、PH。
下面用一张图来解释上面的内容:
了解了动态网页程序,有助于我们接下来的学习。尤其是,一些工作原理,方便我们理解,自己做的事情在整个更需当中的位置。
二、Servlet简介
(SUN公司制定的规;按 servlet 规范开发;在java ee 之前就存在了,在开发动态网页程序中广泛应用;是学习jsp的基础)
一个Servlet 程序,就是一个实现了特殊接口的java类,它由支持Servlet的服务器(具有servlet引擎)调用和运行。
一个Servlet程序,负责处理它所对应的一个或一组URL地址的访问请求,接收客户端请求,产生响应内容。
Servlet 和普通程序相比,只是输入信息的来源和输出结果的目标不同,所以.普通程序能完成的功能 ,Servlet 也能完成。
三、Servelt 程序具有如下功能
1.获取客户端通过form表单提交的数据,还有URL后面的参数信息
2.创建客户端的响应消息的内容
3.访问服务器的文件系统
4.连接数据库,开如基于数据库的应用
5.调用其他java类
等
SUN 公司制定了一套专门用于Servlet程序开发的java类和接口,统称为Servlet API,支持Servlet的服务器软件。通常带有ServletApi的jar包。
经如说Tomcat 这个包在 C:\Tomcat6\lib\servlet-api.jar
四、安装Tomcat
一台计算机,只要装了web服务器软件(IIS ,TOMCAT等) 就成了服务器。(现在我的电脑已经安装了Tomcat,成为服务器了呀,嘻嘻~~)
最简单的网站只要一台web服务器,复杂的网站,包扩多台web服务器组成的集群系统,负载均衡设备,具有缓存的代理服务器(可能有多级),数据库系统等。
(一)安装Tomcat有两种方法:
1.到官网直接下载即可:https://tomcat.apache.org/
2.如果你有压缩包,将它直接解压就可以用了。
(二)Tomcat简介
它是 Apache jakarta项目中的了一重要子项目;
它是 Sun 公司推荐的运行 Servlet 和 JSP 的容器(引擎)
Tomcat 是开源的
Tomcat 还具有普通 Web 服务器的基本功能
安装之后设置一下路径,方便以后在cmd中调用(或者你可以直接到安装包中直接点击startup.bat)
下面是回顾一下设置path的方法:
或者你可以直接到安装包中直接点击startup.bat
(三)安装tomcat要注意的
-- 在安装之前,要先装jdk
-- 一台机器上可以安装多个tomcat ,但要注意端口号不能冲突
-- 它的默认端口号是 8080
-- 安装路径下,尽量不要用中文和空格
-- 启动方式 动行 bin 目录中的 startup.bat
-- tomcat不能同时启动两次,否则端口出现冲突 //JVM_BIND
-- 在服务器上的tomcat,千万不要用空密码(安全性)
-- 访问 http://localhost:8080/
五、第一个Servlet 程序
手动创建Servlet程序的步骤
1) 固定结构
-- 在tomcat 的 webapp 目录下,建一个 myweb的 文件夹
-- 在myweb这个文件夹里,建一个WEB-INF的文件夹 //大小写一点不能错
-- 在这个 WEB-INF 中,建一个classes文件夹 //大小写不能错
-- 在WEB-INF 中,建一个lib文件夹 //不是绝对的
-- 在 WEB-INF 中建一个 web.xml的文件
2) 开发Servlet程序
导Jar包:
开发程序设置:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; //用的是实现Servlet接口的方式 public class Test implements Servlet { @Override public void destroy() { // reload该Servlet和关闭tomcat时被调用 // TODO Auto-generated method stub System.out.println("--------destroy----------"); } @Override public ServletConfig getServletConfig() { // TODO Auto-generated method stub return null; } @Override public String getServletInfo() { // TODO Auto-generated method stub return null; } @Override public void init(ServletConfig arg0) throws ServletException { // 用于初始化该Servlet // 只会被调用一次,(用户第一次访问该Servlet的时候) // ServletConfig config, servlet 引擎将 Servlet容器的对象和 Servlet 的配置参数进行传入 // TODO Auto-generated method stub System.out.println("----config----"); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // 最主要的业务方法,每次请求,都会调用 // arg0 代表客户端的请求信息 // arg1 代表服务器返回的信息 // TODO Auto-generated method stub System.out.println("----service----"); PrintWriter out = arg1.getWriter(); out.print("service is calling "); } }
讲上面的test.class文件复制到C:\apache-tomcat-7.0.79\webapps\myweb\WEB-INF\classes
3) 布署描述
4) 访问
六、 servlet的生命周期
servlet部署在容器里(我们使用的是Tomcat,也可是别的容器,比如jboss,weblogic。。。),它的生命周期由容器来管理。
servlet的生命周期分为以下几个阶段:
1.装载servlet,由相应的容器来完成
2.创建一个servlet实例
3.调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次
4.服务:调用servlet的service()方法,一般业务逻辑在这里处理,该方法在访问该servlet时,会被调用
5.销毁:调用servlet的destroy()方法,销毁该servlet实例,该方法在以下情况被调用:
1)tomcat重新启动
2)reload该webapps
3)重新启动电脑
Java基础——Servlet(一)