1.什么是servlet?
3点:* 是用java编写的web应用组件
* 主要用于实现动态网页的输出
* 由servlet容器管理
2.servlet的生命周期?
答:intit(),service(),destroy()
init()
* init方法第1个执行,执行一次
* * 该方法有servlet容器调用
* * 初始化方法,serlvet启动的时候,执行一次
* * servletConfig是接口,由tomat服务器的开发者实现
* * 对应的对象org.apache.catalina.core.StandardWrapperFacade@1712b3a
* * 底层的代码:public final class StandardWrapperFacade implements ServletConfig
* * servlet容器先创建servletConfig[StandardWrapperFacade]对象, 该对象中封装了servlet的初始化信息
* 然后servlet容器调用init方法时,把该对象作为实参传递给该方法的形参
service()
* service方法第2个执行,执行多次,请求一次执行一次
* * 该方法有servlet容器调用
* * ServletRequest:接口
* * req:请求的对象,该对象中封装了客户端传递过来的所有的信息
* * org.apache.catalina.connector.RequestFacade@74cb02
*
* * public interface HttpServletRequest extends ServletRequest
* public class RequestFacade implements HttpServletRequest
*
* * ServletResponse:接口
* * res:响应的对象:该对象封装了服务器要传递给客户断的所有的信息
* * org.apache.catalina.connector.ResponseFacade
*
* * public interface HttpServletResponse extends ServletResponse
* public class ResponseFacade implements HttpServletResponse
*
* * servlet容器先创建两个对象,一个请求对象request,一个响应对象response
* servlet容器调用service,传递请求对象request,响应对象response作为该方法实参传递给该方法的形参
3.注意这几个接口:Servlet,GenericServlet,HttpServlet以及他们之间的关系
接口HttpServlet实现了GenericServlet,GenericServlet实现了Servlet
4.servlet的运行过程
5.servlet的在web.xml中的配置,同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
servlet的注册:
* 配置一
* 一个servlet配置一种访问路径/xxx格式
<servlet>
<!--配置servlet的注册名称,起个别名-->
<servlet-name>TestServlet</servlet-name>
<!-- 配置servlet的完整类路径 -->
<servlet-class>cn.itcast.web.TestServlet</servlet-class>
</servlet>
<!-- 配置serlvet映射 -->
<servlet-mapping>
<!-- 引用上面配置好的servelt的注册名称 -->
<servlet-name>TestServlet</servlet-name>
<!-- 配置对外访问路径,就是地址栏中写的路径,直接映射到根路径下 -->
<url-pattern>/testSerlvet</url-pattern>
</servlet-mapping>
* 使用方式 http://localhost:808/day05/testSerlvet
* 配置二
* 配置格式*.do *.action格式 ,前面不用加"/"
<servlet>
<!--配置servlet的注册名称,起个别名-->
<servlet-name>TestServlet</servlet-name>
<!-- 配置servlet的完整类路径 -->
<servlet-class>cn.itcast.web.TestServlet</servlet-class>
</servlet>
<!-- 配置serlvet映射 -->
<servlet-mapping>
<!-- 引用上面配置好的servelt的注册名称 -->
<servlet-name>TestServlet</servlet-name>
<!-- 配置对外访问路径,就是地址栏中写的路径,直接映射到根路径下 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
* 使用方式 http://localhost:808/day05/testSerlvet.do
* 配置二
* 配置格式/*,此时路径任意
<servlet>
<!--配置servlet的注册名称,起个别名-->
<servlet-name>TestServlet</servlet-name>
<!-- 配置servlet的完整类路径 -->
<servlet-class>cn.itcast.web.TestServlet</servlet-class>
</servlet>
<!-- 配置serlvet映射 -->
<servlet-mapping>
<!-- 引用上面配置好的servelt的注册名称 -->
<servlet-name>TestServlet</servlet-name>
<!-- 配置对外访问路径,就是地址栏中写的路径,直接映射到根路径下 -->
<url-pattern>/*</url-pattern>
</servlet-mapping>
* 使用方式 http://localhost:808/day05/xxxx
* 同一servlet可以配置多个映射
* 配置如下:
<!-- 配置serlvet映射 -->
<servlet-mapping>
<!-- 引用上面配置好的servelt的注册名称 -->
<servlet-name>TestServlet</servlet-name>
<url-pattern>/testSerlvet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/xxx</url-pattern>
</servlet-mapping>
* 使用方式 http://localhost:808/day05/xxx
http://localhost:808/day05/testSerlvet
6. //从响应对象中获取字符输出流
PrintWriter out=response.getWriter();getOutputStream字节流
7.* 所以在开发中如何使用servlet的init方法时, 建议重写init()不带参数的方法