Servlet

一、概述

全称:server applet

java服务器的小程序,是javaweb非常重要的环境。主要作用是完成html和java后台代码的交互(请求《====》响应)

servlet是需要运行在java服务器(Tomcat)中的,符合http协议的

servlet的核心类核心接口:
​ javax.servlet和javax.servlet.http
​ javax.servlet.ServerException
​ javax.servlet.http.HttpServlet
​ javax.servlet.http.HttpServletRequest
​ javax.servlet.http.HttpServletResponse
​ javax.servlet.http.Session
​ javax.servlet.http.Cookie

二、创建servlet的三种方式

实现Servlet接口进行创建servlet

示例:

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


//注解,告诉服务器这个是我的servlet
@WebServlet("/Demo2")
public class Demo2 implements Servlet {

    //此方法为使用ServletConfig这个对象初始化的servlet
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init方法");
    }

    //此方法为获取配置信息对象
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("取配置信息对象");
        return null;
    }

    //核心方法,包含了doGet() 和doPost()方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法");

        //处理页面的乱码
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.getWriter().append("哈哈哈");
    }

    //此方法为获取servlet详细信息的
    @Override
    public String getServletInfo() {
        System.out.println("获取servlet详细信息");
        return null;
    }

    //在tomcat关闭的时候进行销毁
    @Override
    public void destroy() {
        System.out.println("销毁servlet");
    }
}

继承GnericServlet创建servlet

示例:

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * @author xue_yun_xiang
 * @create 2021-04-08-17:55
 */
@WebServlet("/Demo3")
public class Demo3 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.getWriter().append("哈哈哈");
    }
}

继承HttpServlet创建servlet

优点:
1.可以减少对其他方法的要求 init destroy
​ 2.可以根据前端的要求进行分门别类 doGet doPost

示例:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/demo1")
public class Demo1 extends HttpServlet {
    @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");

        //控制台打印
        System.out.println("哈哈哈");

        //页面显示
        resp.getWriter().append("这是页面显示的内容");
    }
}

三、servlet注解和配置文件的写法

1、注解写法,对servlet的版本有要求,servlet3.0及以上的版本才可以使用注解
2、还有一种写法配置文件写法。对版本没有要求

注解的写法

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//name 是servlet的名字 对应配置文件中的<servlet-name>
//value  是servlet程序对应的url  只能写一个
//urlPatterns和配置文件中的url-pattern  可以写多个
//loadOnStartup  servlet启动的时候是否会自动加载 1  自动加载  -1不加载

@WebServlet(name="AnnotionDemo4",
            urlPatterns = {"/anno", "/as.do", "/as.action"},
            loadOnStartup = 1)
public class Demo4 extends HttpServlet {
    @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().append("哈哈哈");
    }
}

配置文件的写法

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <!-- servlet-name要和sevlet-mapping对应 -->
        <servlet-name>Demo5</servlet-name>
        <!-- servlet-class 是servlet程序所对应的类  -->
        <servlet-class>Demo5</servlet-class>
        <!-- 只要tomacat服务器一启动就会加载这个类-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Demo5</servlet-name>

    <!--   url地址    -->
        <url-pattern>/webxml.do</url-pattern>
    </servlet-mapping>

</web-app>

四、selvelt的声明周期

整个servlet在执行的过程:
​ 1.constructor
​ 2.init
​ 3.service
​ 4.destroy

阶段1:
​ servlet整个类对象进行实例化(在tomcat服务器中),提供给tomcat使用
阶段2:
​ servlet类对象的初始化。
阶段3:
​ servlet对外提供服务,相当于咱们的doGet和doPost
阶段4:
​ servlet进行销毁,可以主动申请关闭servlet,但是一般tomcat一关闭,就自动销毁

示例

@WebServlet(value = "/life.do" , loadOnStartup = 1)
public class LifeCycleServlet extends HttpServlet {
    public LifeCycleServlet() {
        System.out.println("我是LifeCycleServlet无参数的构造方法");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {

        super.init(config);
        System.out.println("init初始化");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().append("hello service");
        System.out.println("service method  called");
    }

    @Override
    public void destroy() {
        System.out.println("destroy method called");
    }
}

五、获取请求的参数

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
         * html页面中,input标签发送的数据,都会存到HttpServletRequest 对象里面
         * 通过这个对象获取input输入框中值username和password
         * */

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值