servlet入门

servlet

它是javax.servlet.Servlet接口

  • 它是JavaWeb三大组件之一
    *Servler 最重要
    *Filter
    *Listener
  • Servlet负责的工作
    *用来处理请求。
    *当客户端发出一个请求给服务器,服务器通过web.xml配置文件找到相应的servlet来处理这一请求。
    *一个servlet至少和一个URL绑定在一起。
   class MyServlet{
   //......
   }
   //绑定到/abc

通过访问URL来访问servlet
例如:http://localhost:8080/day04_1/abc

  • Servlet处理请求过程。
    服务器在执行servlet时,会传递给servlet请求数据,请求数据都封装到request对象中。
    服务器还会给servlet一个response对象,servlet可以用这个对象完成向客户端响应。
    这里写图片描述

实现servlet

  • 实现javax.servlet.Servlet接口。
  • 继承javax.servlet.GenericServlet抽象类。
  • 继承javax.servlet.http.HttpServlet抽象类。最佳选择。

servlet接口中的方法

  • void init(ServletConfig);
  • void Service(ServletRequest request,ServletResponse response);
  • void destroy();
  • String getServletInfo();
  • ServletConfig getServletConfig();
    生命周期方法:
  • void init(ServletConfig);Servlet出生后第一个执行的方法,一生执行一次。
  • void Service(ServletRequest request,ServletResponse response); 这个方法会执行多次,每次执行表示处理一次请求。
  • void destroy();Servlet结束前执行一次,这个也只执行一次。
    客户端打出一个请求,服务器通过URL找到对应的servlet,但是若果这个servlet不存在,那么服务器会创建servlet对象,创建对象之后,马上调用init(ServletConfig)方法,传递ServletConfig
    服务器调用servlet的service()方法,这需要传递request和response。
    当服务器再次访问servlet时,这时servlet对象已经存在,就不会再次创建,servlet是单例的。
    当服务器需要销毁servlet时,会先调用servlet的destory()方法,在销毁。
    1、servlet创建:第一次被访问,或服务器启动。
    2、servlet销毁:服务关闭。
    如果希望servlet在服务器启动就创建,那么需要在web.xml中配置
    <load-on-startup>1</load-on-startup>

web.xml配置

让url和servlet绑定在一起,当用户访问url时会执行对应的service()请求处理方法。

  <servlet>
      <servlet-name>xxx</servlet-name>
      <servlet-class>cn.my.servlet.AServlet</servlet-class>
  </servlet>

  <servlet-mapping>
      <servlet-name>xxx</servlet-name>
      <url-pattern>/a_servlet</url-pattern>
  </servlet-mapping>

这里写图片描述
这里注意<servlet-class>cn.my.servlet.AServlet</servlet-class>是从包名到类名。

package cn.my.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * servlet类是我们写的,但是对象不是我们创建的,方法更不是我们调用的!
 * @author green
 *
 */
public class AServlet implements Servlet{
    private ServletConfig config;

    @Override
    public void destroy() {
        System.out.println("servlet结束了");

    }

    /**
     * 返回servlet配置信息
     */
    @Override
    public ServletConfig getServletConfig() {
        return config;
    }

    /**
     * 返回对当前servlet的一个基本描述
     * 没用
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * servlet对象被创建之后,马上调用本方法
     */

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("开始创建");
        this.config=config;

    }

    /**
     * 没处理一次请求,调用本方法一次,这是servlet一最重要的工作,就是处理请求。
     */
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) 
            throws ServletException, IOException {
        System.out.println("hello servlet!");   
    }
}

我们的jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>nothing</title>
</head>
<body>
    <h1>访问Servlet</h1>
    <a href="/day04_1/a_servlet">访问AServlet</a>

</body>
</html>

运行结果

servlet相关类型

  • init()方法的参数ServletConfig
    ServletConfig对应Servlet的配置信息。
    String getServletName()–>返回的是<servlet-name>的值
    ServletContext getServletContext–>获取ServletContext对象
    String getInitParameter(String name)–>获取Servlet的初始化参数
    Enumeration getInitParameterNames()–>获取所以初始化参数的名称。
    添加参数:
<servlet>
    <servlet-name>xxx</servlet-name>
    <servlet-class>cn.my.AServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
      <init-param>
      <!--参数-->
         <param-name>p1</param-name>
         <param-value>v1</param-value>
      </init-param>
      <init-param>
         <param-name>p2</param-name>
         <param-value>v2</param-value>
      </init-param>
</servlet>

获取参数的值:

public void service(ServletRequest arg0, ServletResponse arg1) 
            throws ServletException, IOException {
        System.out.println("hello servlet!");
        //通过config对象获取名为p1的初始化参数
        String P1=this.config.getInitParameter("p1");
        String P2=this.config.getInitParameter("p2");
        System.out.println(P1+","+P2);
        //获取所有初始化参数的名称
        Enumeration e=this.config.getInitParameterNames();
        while (e.hasMoreElements()) {
            String name = (String) e.nextElement();
            String value=config.getInitParameter(name);
            System.out.println(name+"="+value);
        }   
    }

注意,当需要tomcat循环监视文件是否修改,自动加载:
Tomcat\apache-tomcat-8.5.15\conf\context.xml 添加如下东西
这里写图片描述

  • service()方法的两个参数ServletRequest和ServletResponse。后面分析。
servlet三大域对象:
  • ServletContext
  • ServletRequest
  • HttpSession
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值