Servlet
概念:
*定义了一个类被浏览器访问的规则。是一个接口。
*功能:
*接受请求
*处理请求
*作出响应
创建一个Servlet的三种基本方式
第一种:实现一个Servlet接口,并重写其中的所有抽象方法
步骤:
1.创建web项目
2.定义一个Java类,实现Servlet接口
3.重写所有未实现方法 service()方法里面写句话
4.配置Servlet,web/WEB-INF/web.xml 配置Servlet
<!-- 配置Servlet,为了配置Servlet的访问路径 -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<!-- 设置访问路径,以/开头 -->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
5.发布项目
6.访问/demo路径访问该Servlet
浏览器中:http://127.0.0.1:8080/项目名/web.xml中配置的虚拟路径名
服务器通过反射的方式 创建Servlet对象,调用其方法.
重写的五个抽象方法如下:
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init方法调用了");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("请求来了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
这里,就不得不提出Servlet的生命周期了,Servlet的生命周期主要分为三个阶段
第一阶段:被创建:默认情况下,Servlet第一次被访问时,被创建,调用init()方法。且只执行一次,它是单例的
当多个客户端并发访问时,就会用到多线程,此时就会存在线程安全问题了,故尽量不要定义成员变量。
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init方法调用了");
}
当然,也可以配置Servlet的创建时机。
在web.xml的<servlet>标签中配置<load-on-startup>
<!-- 修改servlet的创建时机:
* 负整数:默认值 -1,在第一次被访问时创建
* 非负整数:在服务器启动时创建
* 数字越小,优先级越高
-->
<load-on-startup>0</load-on-startup>
第二阶段: 提供服务:每一次被访问时,会调用service()方法提供服务
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("请求来了");
}
第三阶段: 被销毁:服务器关闭时,servlet被销毁。
服务器正常关闭,在销毁Servlet之前,会调用destory()方法
另外可以看到,在init()方法中,有一个形参 ServletConfig servletConfig,这是一个配置对象
ServletConfig对象:配置对象 ServletConfig是一个接口 在Servlet初始化的时候 有服务器创建其子类对象传递给 init()方法
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init方法调用了");
}
它的功能如下:
1.获取servlet初始化参数
* String getInitParameter(String name)
* Enumeration getInitParameterNames()
例子:
System.out.println(config.getInitParameter("src"));
System