Servlet的介绍
1.1servlet的介绍
定义:一个实现了servlet接口的普通类,在于交互式地浏览和修改数据,生成动态的web内容。
浏览器(www.xxxxx)向服务器里面的servlet发送请求
servlet//接受请求 //处理请求 //返回响应(返回的页面就是动态的页面)
1.2servlet的简易入门
1.2.1创建servlet的第一种方式
- 实现servlet的接口
- 重写接口提供的方法
- 映射servlet(name class)
- 绑定路径(url)
34为编写的配置文件
实现servlert的接口重写提供的方法
package com.dzu.cn;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class demo1 implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@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 config) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("程序接受到请求");
}
}
编写xml配置文件
<!--
映射servlet类
servlet-name给当前的servlet定义一个名字
servlet-class当前的servlet的带包的路径
-->
<servlet>
<servlet-name>Demo1</servlet-name>
<servlet-class>com.dzu.cn.Demo1</servlet-class>
</servlet>
<!-- 绑定路径
servlet-name 对应的servlet的实体类的名称
url-pattern当前的servlet的路径
-->
<servlet-mapping>
<servlet-name>Demo1</servlet-name> <!-- 文件访问的路径 -->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
测试的格式
协议://主机:端口号/项目名/绑定路径
1.2.2创建servlet的第二种方式(继承httpservlet)
httpservlet是tomcat中实现的源码
httpservlet继承了GenericServlet
而GenericServlet实现了Servlet的接口
结论:httpServlet间接的实现了servlet的接口所以可以运行实现servlet的功能
package com.dzu.cn;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/demo2")//注解直接配置路径
public class Demo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
System.out.println("hellow");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.3servlet的体系结构
1.3.1servlet接口方法
void init(ServletConfig config) :初始化方法
void service(ServletRequest req, ServletResponse res):服务方法
void destroy() :销毁方法
ServletConfig getServletConfig():获取当前的servlet的配置对象
String getServletInfo() :获取当前servlet的信息
1.3.2servlet的生命周期
void init(ServletConfig config) :初始化方法
void service(ServletRequest req, ServletResponse res):服务方法
void destroy() :销毁方法
这三个方法是servlet的初始 使用 销毁 称为servlet的生命周期
@Override
/**
* 执行时机:服务器正常关闭或项目移除的时候
* 执行次数:1
* 执行者:服务器
*/
public void destroy() {
// TODO Auto-generated method stub
System.out.println("执行销毁");
}
@Override
/**
* 执行时机:第一次访问的时候
* 执行次数:1次
* 执行者:服务器
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("执行初始化操作");
}
@Override
/**
* 执行时机:每次访问的时候
* 执行次数:执行的次数=访问的次数
* 执行者:服务器
*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("执行服务");
}
servlet只出生一次是单实例多线程的方法
默认第一次请求的时候服务器创建servlet的对象且调用init方法实现初始化的操作,且调用一次service方法,每当请求来的时候服务器获取一个线程,调用service方法完成具体的业务逻辑(编写的代码)当servlet被移除的时候或者服务器正常关闭的时候服务器调用destory方法实现销毁操作。
1.3.3servlet的具体实现
GenercServlet抽象类:实现了servlet接口除了service没有实现其他的都实现了
HttpServlet抽象类:实现了service方法:强转了两个参数调用了重载的servlet方法----获取请求方式的不同调用不同的doxxx方法
1.4web.xml文件的学习
url-pattern的配置
完全匹配:以"/"开始例如:/aa /bb /hellow /aa目前使用这种的形式
目录匹配:以“"/"开始以*结束 例如/aa / * / *
后缀名匹配:以“*”开始例如 *jsp *action *do
优先级:完全匹配>目录匹配>后缀名匹配
注意:一个路径对应一个servlet一个servlet对应多个路径
load-on-startup的配置
作用:修改servlet的初始化时机,会随着服务器启动而创建servlet
使用格式:
<load-on-startup>正整数</load-on-startup>
路径的写法
相对路径和绝对路径
http://localhost:8080/xxxx/xxx
/xxx/xxx