idea中使用servlet


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、servlet是什么?

服务器上的小程序,接受客户端发送的信息并响应返回给客户端

1.servlet的建立

1、方式一:继承servlet接口,并在service方法中,处理请求,并响应数据

  @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
	//在此方法中处理请求,响应数据
	}

除去service方法还有其他的几个方法如下

执行顺序方法名作用
1【最先执行】构造方法构造方法,创建时执行,只执行一次
2init()程序的初始化方法,可以获取【servlet-name、init-param、ServletContext】创建时执行,只执行一次
3service()通过request和response处理发送请求,只要访问servlet程序,就会调用一次【多次刷新页面执行多次,其余的只有一次】
4destroy()销毁方法,web工程停止的时候调用一次

方法内详解
作用init(ServletConfig servletConfig)
获取程序别名servletConfig.getServletName()
获取初始化参数,在xml中配置servletConfig.getInitParameter(“userName”)
获取servletcontext ,上下文对象servletConfig.getServletContext()
 <servlet>
        <!-- servlet-name标签给servlet程序起一个别名(一般是类名)-->
        <servlet-name>TestServlet</servlet-name>
        <!--servlet-class是servlet程序的全限定类名 -->
        <servlet-class>com.BearNorth.test.TestServlet</servlet-class>

        <init-param>
            <param-name>userName</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://3306</param-value>
        </init-param>
    </servlet>

2、方式二:继承httpservlet

实现doget或者doPost

注意:删除调用父类的doPOST和doGet// super.doGet(req, resp);

public class TestHttpServlet2 extends HttpServlet {

        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);//重写之后不调用父类的init方法会出现java.lang.NullPointerException
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("自动创建的doPost方法");
        ServletConfig servletConfig = this.getServletConfig();
//        1、获取servlet程序的别名servlet-name
        System.out.println(servletConfig.getServletName());
//        2、获取初始化参数init-param,在web.xml中的配置,可以配置多个
        String userName = servletConfig.getInitParameter("userName");
        String url = servletConfig.getInitParameter("url");
        System.out.println(userName);
        System.out.println(url);
//        3、获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("自动创建的doGet方法");

    }
}

3、方式三:创建类时创建servlet

在这里插入图片描述

注:取消Create javaEE 6annotated class(会使用注解来创建)

2.servlet的配置

web.xml中配置servlet程序的访问地址
<servlet>
        <!-- servlet-name标签给servlet程序起一个别名(一般是类名)-->
        <servlet-name>TestServlet</servlet-name>
        <!--servlet-class是servlet程序的全限定类名 -->
        <servlet-class>com.BearNorth.test.TestServlet</servlet-class>

        <init-param>
            <param-name>userName</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://3306</param-value>
        </init-param>
    </servlet>
    <!--servlet-mapping标签给servlet程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name标签作用是告诉服务器,我当前配置的地址时那个servlet程序使用-->
        <servlet-name>TestServlet</servlet-name>
        <!--
            url-pattern标签配置访问地址<br/>
           /   斜杠在服务器解析的时候表示地址为:http://ip:port/工程路径    <br/>
           /hello 表示地址为:http://ip:port/工程路径/test 访问此路径则会访问到定定义的servlet类中<br/>
           后面的xxxxx一般和使用的类名保持一致 xxxxxservlet
        -->
        <url-pattern>/test</url-pattern>

    </servlet-mapping>

3.servlet生命周期

1、构造器

2、init初始化方法

第一个,第二实在第一个访问的时候创建servlet程序调用

3、servlet 方法:每次调用都会访问

4、destory销毁方法:销毁才执行

4.servletConfig和servletContext

  • servlet程序和servletConfig(getServletConfig())都是由tomcat负责创建

  • servlet程序默认第一个次访问的时候创建,servletConfig是每个servlet程序创建时,就负责创建一个对应的对象

  • 一个servlet只能获取当前对应的servlet程序的servletConfig

  • 重写了servlet的init方法一定要调用调用父类的init方法(父类有保存了当前的init方法)


1. servletContext定义

  • 接口,表示上下文对象
  • 每个工程只有一个servletcontext对象实例
  • 是一个域对象类似map,可以存取数据
  • servletContext实在web工程部署启的时候进行创建,在web工程停止的时候进行销毁,即多个servlet程序可以共享一个servletContext

2. servletContext作用

  • getservletconfig().getservletcontext()

  • 获取web.xm中配置的上下文参数context-param(getInitarameter())【配置在最上面】

  • 获取当前工程路径(getcontextpath()),格式:/工程路径

  • 获取工程部署后在服务器硬盘上的绝对路径(getRealPath)

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig servletConfig = this.getServletConfig();
        ServletContext servletContext = servletConfig.getServletContext();
        System.out.println("servletContext获取在web.xml配置的上下文参数userName\t:"+servletContext.getInitParameter("userName"));
        System.out.println("servletContext获取在web.xml配置的上下文参数passWord\t:"+servletContext.getInitParameter("passWord"));
        System.out.println("获取当前工程路径\t:"+servletContext.getContextPath());
        System.out.println("获取当前工程部署路径\t:"+servletContext.getRealPath("/"));//通过http://ip:port/工程名   映射到项目的web目录下
        System.out.println("获取当前工程部署路径\t:"+servletContext.getRealPath("/image/a.jpg"));
    }

在xml中配置的内容

  <context-param>
        <param-name>userName</param-name>
        <param-value>root</param-value>
    </context-param>
    <context-param>
        <param-name>passWord</param-name>
        <param-value>abc</param-value>
    </context-param>

3. servletConfig的三大作用

1、获取servlet程序的别名servlet-name

2、获取初始化参数init-param

3、获取ServletContext对象

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值