1、servlet快速入门
1、在MyEclipse工具中创建web project
2、在工程中创建class并继承HTTPServlet
3、在Servlet中覆盖doGet和doPost方法
4、在web服务器中注册Servlet程序(在web.xml中注册)
注册方法:
<!-- 注册Servlet 程序, 为Servlet class 起一个名字 -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 配置Servlet 访问 路径 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
这样就可以通过/hello访问cn.itcast.servlet.HelloServlet 程序了
编写完web.xml后一定要重新启动服务器
servlet-name:写的是servlet的名称建议和类名相同
servlet-class:是对象的名称,名称要包含整个包名
url-pattern:映射的名称,可以自己起个名称,注意斜线
<servlet></servlet>是对servlet进行注册
<servlet-mapping></servlet-mapping>是对注册好的servlet提供对外访问的路径
注意:可以秒杀创建一个servlet类,直接在创建的时候选择servlet然后勾选doget和dopost方法选择下一步,然后将映射路径改为自定义一个就哦了点击完成就可以了
2、servlet编写步骤
1、编写class继承HTTPServlet
2、复写doGet和doPost方法
3、在web.xml中对方法进行注册
3、servlet注意事项
1、写servlet是没有主函数的应为servlet类是由服务器调用的
2、servlet API在哪里?
JDK导入包 来自JRE环境 rt.jar (java.iojava.util 来自rt.jar )
3、servlet导入包
1、MyEclipse Servlet 需要 jar 来自JavaEE 环境
右键工程属性 ---- buildpath ---- liberaries ----- add Liberary ---- MyEclipse Liberary
2、tomcat环境中 需要jarE:\apache-tomcat-6.0.14\lib\servlet-api.jar
4、servlet继承关系
Servlet接口=>实现类genericservlet=>子类HTTPservlet=>自定义的servlet类继承httpservlet
Servlet技术 sun公司最早推出时,并不是仅面向于HTTP协议的 ,Servlet接口规范与协议无关的
*Servlet技术基于请求-响应模型的
GenericServlet通用的Servlet,只是实现了与协议无关API ,并没有提供任何与协议相关API
HttpServlet是一个面向HTTP协议 Servlet程序,提供了与协议相关 API
5、servlet生命周期
servlet声明周期描述了servlet从创建到销毁的过程,servlet接口中定义了三个方法来描述servlet的生命周期
1、init((ServletConfig)):用于对servlet进行初始化用的,只执行一次
2、service(ServletRequest,ServletResponse):初始化完成后每当有请求时都会调用这个方法(提供服务)
3、destroy:用于销毁servlet程序的
servlet只有一个而它却被多条线程共同访问,那么会有线程安全问题吗?是不会有线程安全问题的,因为只要有请求servlet背后就会开启了一个新的线程去响应来自客户端的请求
6、service方法和doGet、doPost有什么关系
在httpservlet中的service方法内部就是根据请求方式来调用doget或dopost
当doget和dopost代码逻辑关系相同时可以互相调用以简化编程
如何让servlet在服务器加载的时候就创建对象呢?
可以通过<load-on-startup>值</load-on-startup>(这个值一般是在0-9范围内)
(定义在web.xml的servlet中)
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
7、init()和init(ServletConfig)的关系
init(ServletConfig)是servlet生命周期的方法
GenericServlet内部覆盖了init(servletconfig),在有参数init方法中调用了无参的init方法。所以建议在自定义servlet方法时只需要覆盖无参输的init方法就可以了
8、servlet中路径配置的问题
servlet中的路径配置方法有三种:
优先级是:完全匹配==>>目录匹配==>>扩展名匹配
1、完全路径匹配:以 / 开始,不能包含通配符 * 例:/hello、/init
2、目录匹配:以 / 开始,/* 结尾 例:/aa/*、/aaa/bbb/*
3、扩展名匹配:不能以 / 开始,是以 * 开始的 例:*.do,*.action,*.html
<url-pattern>……</url-pattern>
注意:经典的错误:/*.do,这个错误会导致整个web工程无法被加载,属于严重错误
9、servlet的初始化init(ServletConfig Config)===>>servletConfig对象
servletconfig对象是servlet的配置对象,用来在servlet初始化阶段向servlet传递信息
* GenericServlet中将 ServletConfig对象保存成员变量同时提供getServletConfig方法
* 自定义Servlet中 通过 getServletConfig() 获得ServletConfig 对象
ServletConfig 配置参数 相当于当前Servlet 局部变量,无法被其它Servlet访问的
10、servlet上下文对象ServletContext
1、servletcontext每一个工程对应一个
2、获得servletcontext==>>servletconfig.getservletcontext()
3、servletcontext也叫域对象。是一个容器,有大小(范围),存数据(获取数据,移除数据)
应用一:全局初始化参数配置
<context-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</context-param>
获得servletcontext对象:servletcontext context = getservletcontext();
通过stringgetinitparameter(String name)获得全局参数
* getMimeType(文件名) ----- 根据文件扩展名获得文件MIME类型
html --- text/html
自动读取tomcat/conf/web.xml(配置扩展名和MIME类型对应关系)
* log(String msg) ----- 记录信息到日志文件 (显示控制台上)
应用二:多个Servlet之间可以共享数据
应用:统计网站的访问次数
setattribute(name,object)
getattribute(name)===>>通过name获取object值
应用三:读取web工程中资源文件
在day04下创建四个文件
1、在day04工程根目录创建1.txt
2、在webroot下创建2.txt
3、在web—inf下创建3.txt
4、在src下创建4.txt
1.txt因为在WebRoot 外面 不会发布到tomcat服务器,无法在服务器端读取
2.txt --- >getServletContext().getRealPath("/2.txt");
3.txt --- >getServletContext().getRealPath("/WEB-INF/3.txt");
4.txt 位于src下,复制到WEB-INF/classes下 --->getServletContext().getRealPath("/WEB-INF/classes/4.txt");
11、用类加载器读取
通用classpath下文件读取方法 (用类加载器读取)
XXX.class.getResource("/4.txt").getFile();
这里 / 代表classpath根目录(src 、WEB-INF/classes)
12、缺省Servlet
1、将服务器静态资源读取到内存,发送给客户端
2、所以服务器静态资源都是通过缺省servlet返回的
3、缺省servlet配置url-pattern是 /
4、在tomcat/conf/web.xml中查看缺省servlet配置