Java类必须符合一定的 规范:
a.必须继承 javax.servlet.http.HttpServlet
b.重写其中的 doGet()或doPost()方法
- doGet(): 接受 并处 所有get提交方式的请求
- doPost():接受 并处 所有post提交方式的请求
Servlet要想使用,必须配置
- Serlvet2.5:web.xml
- 项目的根目录:WebContent 、src(所有的构建路径)
<a href="WelcomeServlet">所在的jsp是在 WebContent目录中,因此 发出的请求WelcomeServlet 是去请求项目的根目录。
例子:
WebContent中有一个文件index.jsp
src中有一个Servlet.java
如果index.jsp中请求 <a href="abc">...</a> ,则寻找范围:既会在src根目录中找,会在WebContent根目录中找
如果index.jsp中请求<a href="a/abc"></a>,寻找范围:先在src或WebContent中找a目录,然后再在a目录中找abc
- 项目的根目录:WebContent 、src(所有的构建路径)
- Servlet3.0:@WebServlet
-
Servlet3.0不需要在web.xml中配置,但需要在 Servlet类的定义处之上编写注解@WebServlet("url-pattern的值")
-
匹配流程: 请求地址 与@WebServlet中的值进行匹配,如果匹配成功 ,则说明 请求的就是该注解所对应的类
-
2个/:
- jsp服务器根路径 localhost:8888
- web.xml项目根路径 http://localhost:8888/项目名/
Servlet流程:
请求 ==> <url-pattern> ==> 根据<servlet-mapping>中的<servlet-name> 去匹配 <servlet> 中的<servlet-name>,然后寻找到<servlet-class>,求中将请求交由该<servlet-class>执行。
纯手工方法创建第一个Servlet
步骤:
- 编写一个类,继承HttpServlet
- 重写doGet()、doPost()方法
- 编写web.xml 中的servlet映射关系
借助于Eclipse快速生成Servlet
直接新建Servlet即可!(继承、重写、web.xml 可以借助Eclipse自动生成)
Servlet生命周期:5个阶段
1、加载
2、初始化: init() ,该方法会在 Servlet被加载并实例化的以后 执行
a、默认第一次访问 Servlet 时会被执行 (只执行这一次)
b、可以修改为 Tomcat 启动时自动执行
i、Servlet2.5:web.xml(其中的“1”代表第一个)
<servlet>
...
<load-on-startup>1</load-on-startup>
</servlet>
ii、Servlet3.0
@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1 )
3、服务:service() ==> doGet() doPost,调用几次,则执行几次
4、销毁:destroy(), Servlet被系统回收时执行,关闭tomcat服务时,执行一次。
5、卸载
Servlet API
由两个软件包组成
1、对应于HTTP协议的软件包
2、对应于除了HTTP协议以外的其他软件包
即Servlet API可以适用于 任何 通信协议。 我们学习的Servlet,是位于javax.servlet.http包中的类和接口,是基础HTTP协议。
Servlet继承关系
ServletConfig:接口
ServletContext getServletContext():获取Servlet上下文对象 application
getContextPath():相对路径
getRealPath():绝对路径
setAttribute() 、getAttribute()
String getInitParameter(String name):在当前Servlet范围内,获取名为name的参数值(初始化参数)
Servlet 3.0方式 给当前Servlet设置初始值:
@WebServlet( .... , initParams= {@WebInitParam(name="serveltparaname30",value="servletparavalue30") } )
// 注意,此注解只 隶属于某一个具体的Servlet ,因此无法为 整个web容器设置初始化参数 (如果要通过3.0方式设置 web容器的初始化参数,仍然需要在web.xml中设置)
HttpServletRequest中的方法:(同request),例如setAttrite()、getCookies()、getMethod()
HttpServletResponse中的方法:同response
Servlet使用层面:
Eclipse中在src创建一个Servlet,然后重写doGet() doPost()就可以 (doGet() doPost()只需要编写一个)。