Servlet

Servlet

1.什么是servlet

Servlet是Server和Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务程序,可以生成动态的web页面,Servlet主要运行在服务器端,由服务器调用执行,是一种按照Servlet标准开发的类。

Servlet本质上也是java类,但要遵循Servlet规范进行编辑,没有main方法,它的创建、使用、销毁。都由Servlet容器进行管理(如Tomact服务器),写自己的类,不用写main方法,别人自动调用。,由服务器统一调用和执行。

在这里插入图片描述

2.Servlet做了什么

本身不做任何业务处理

只是接收请求并决定调用哪个JavaBean去处理请求

确定用哪个页面来显示处理返回的数据

3.JSP与Servlet之间关系

在这里插入图片描述

(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
①Servlet是一个特殊的Java程序,它运行于服务器的JVM中,依靠服务器的支持向浏览器提供显示内容;

②JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成;

③Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件(有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然,这个说法还是很片面的);

4.Servlet API

主要Servlet API介绍

javax.servlet.Servlet接口

所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集

javax.servlet.GenericServlet类

是Servlet的通用版本,是一种与协议无关的Servlet

javax.servlet.http.HttpServlet类

在GenericServlet基础上扩展的基于Http协议的Servlet

5.如何创建Servlet

@WebServlet

URL映射,用于servelt类上@WebServlet(“/login”);

方式一:实现Servlet接口
@WebServlet("/test1")
public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        //s使用ServletConfig对象初始化我们的Servlet
        //执行了,从这个地方可以说明一个问题 Servlet已经被实例化了
        System.out.println("init方法执行");
    }
 
    @Override
    public ServletConfig getServletConfig() {
        //获取servlet配置信息对象
        //没有执行
        System.out.println("getServletConfig方法执行");
        return null;
    }
 
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //核心方法  类似于我们的doGet()方法,和doPost()方法 请求和响应
        //一定执行的
        System.out.println("service");
    }
 
    @Override
    public String getServletInfo() {
        //获取Servlet的详细信息
        //没有执行
        System.out.println("getServletInfo方法执行");
        return null;
    }
 
    @Override
    public void destroy() {
        //当tomcat关闭的时候,执行销毁这个servlet的方法
        System.out.println("destroy方法执行");
        //只有当tomcat关闭的时候,才会执行这个方法
        
    }
}

xml配置文件

<servlet>
        <servlet-name>hello</servlet-name>
        <!--     servlet-name要和servlet-mapping所对应,映射的关系-->
        <servlet-class>com.by.servlet.HelloServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
方式二:继承GenericServlet抽象类
/*
* 第二种方式:继承GenericServlet
*
* */
@WebServlet("/test2")
public class GenericServlet extends GenericServlet {
    //只有一个方法是必须重写的,抽象方法
    //为什么?service是核心方法,因为请求和响应就是执行这个方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //解决中文乱码问题
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.getWriter().append("我是第二种创建Servlet的方法");
 
    }
}

xml配置文件

<servlet>
        <servlet-name>generic</servlet-name>
        <servlet-class>com.by.servlet.GenericServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>generic</servlet-name>
        <url-pattern>/generic</url-pattern>
    </servlet-mapping>
方式三:继承HttpServlet
@WebServlet("/test3")
public class HttpServletDemo extends HttpServlet {
    //因为在前端的时候,有两种请求方式get和post
    //doGet和doPost方法写在了Service方法中了
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("我是HttpServlet创建的Servlet");
    }
}

xml配置文件

<servlet>
        <servlet-name>http</servlet-name>
        <servlet-class>com.by.servlet.HttpServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>http</servlet-name>
        <url-pattern>/http</url-pattern>
    </servlet-mapping>

最好的方式是继承HttpServlet

1.可以减少对其他方法的要求 init destroy

2.可以根据前端的要求进行分门别类 doGet doPost

6.Servlet生命周期

Servlet生命周期各个阶段

加载和实例化

初始化

处理请求

销毁

构造方法   实例化
init   初始化
service 判断请求类型  get|| post
加载 get||post方法
destroy 销毁
生命周期谁来做何时做
实例化Servlet 容器当Servlet容器启动或者容器检测到客户端请求时
初始化Servlet 容器实例化后,容器调用Servlet的init()初始化对象
处理请求Servlet 容器得到客户端请求并做出处理时
销毁Servlet 容器当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候

在这里插入图片描述

部署运行Servlet

修改web.xml(部署描述文件)

添加:把Servlet内部名映射到一个Servlet类名

添加:把用户访问的URL映射到Servlet的内部名

<servlet-mapping>与<servlet>中的<servlet-name>必须一致

通过URL访问Servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值