Servlet

Web资源

在http协议当中,规定了请求和响应双方,客户端和服务器端。与web相关的资源

  • 有两种分类
  1. 静态资源
    html、js、css
  2. 动态资源
    servlet/jsp

Servlet

  • Servlet是什么?

    其实Servlet就是一个Java程序,运行在我们的web服务器上,用于接受和响应客户端的http请求

更多的是配合动态资源来做。
当然静态资源也需要使用到Servlet,只不过Tomcat里面已经定义好了一个DefaultServlet

HelloServlet

  1. 创建一个Web工程,要有一个服务器
  2. 测试运行Web工程
//1、新建一个类,实现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;

public class HelloServlet 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 arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Hello,Servlet......");
    }

    
}

<!-- 2、配置Servlet,用于告诉服务器,我们应用有这么些个Servlet.(在/HelloServlet/WebContent/WEB-INF/web.xml里面配置) .当然也可以右击java程序new Servlet自动生成-->

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.java1995.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a</url-pattern>
  </servlet-mapping>

Servlet执行过程

image

Servlet的通用写法

    Servlet(接口)
        |
        |
    GenericServlet
        |
        |
    HttpServlet(用于处理http的请求)
    
  1. 定义一个类,继承HttpServlet 复写doGet和doPost方法
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet02 extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
        System.out.println("doGet...");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
        System.out.println("doPost...");
    }
}

Servlet的生命周期

  • 生命周期

    从创建到销毁的一段时间

  • 生命周期方法

    从创建到销毁,所调用的那些方法

  • init方法

      在创建该Servlet的实例时,就执行该方法。
      一个Servlet只会初始化一次,init方法只会执行一次,默认情况下不是:初次访问该Servlet,才会创建实例。
  • service方法

      只要客户端来了一个请求,那么就执行这个方法。
      该方法可以被执行多次。
      一次请求,对应一次service方法的调用
  • destory方法

      servlet销毁的时候,就会执行该方法
    
      1. 该项目从tomcat的里面移除
      2. 正常关闭tomcat就会执行(比如执行shutdown.bat)

doGet和doPost不算生命周期方法,所谓的生命周期方法是指,从这个对象的创建到销毁一定会执行的方法,但是这两个方法,不一定会执行。

让Servlet创建实例的时机提前。

  1. 默认情况下,只有在初次访问servlet的时候,才会执行init方法。有时候,我们可能需要在这个方法里面执行一些初始化操作,甚至是做一些比较耗时的逻辑。
  2. 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。那么有没有方法可以让这个初始化的时机提前一点?
  3. 在配置的时候,使用load-on-startup元素来指定,给定的数字越小,启动的时机就越早。一般不写负数,从2开始即可。
    <servlet>
        <servlet-name>HelloServlet04</servlet-name>
        <servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

ServletConfig

Servlet的配置,通过这个对象,可以获取servlet在配置的时候一些信息

  • web.xml文件里的内容如下:
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.java1995.HelloServlet</servlet-class>
    <init-param>
        <param-name>address</param-name>
        <param-value>beijing...</param-value>
    </init-param>
        <init-param>
        <param-name>name</param-name>
        <param-value>zhangsan...</param-value>
    </init-param>
        <init-param>
        <param-name>age</param-name>
        <param-value>18...</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a</url-pattern>
  </servlet-mapping>
  • Java代码如下:
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.ObjectInputFilter.Config;

public class HelloServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //  1、得到servlet配置对象
        ServletConfig config = getServletConfig();
        
        //获取到的是配置servlet里面的servlet-name的文本内容
        String servletName = config.getServletName();
        System.out.println("ServletName"+servletName);
        
        //  2、可以获取具体的某个参数
        String address = config.getInitParameter("address");
        System.out.println("address"+address);
        
        //  3、获取所有的参数名称
        Enumeration<String> names = config.getInitParameterNames();
        
        //遍历取出所有的参数名称
        while(names.hasMoreElements()) {
            String key = (String)names.nextElement();
            String value = config.getInitParameter(key);
            System.out.println("key="+key+"   "+"value"+value);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }
}
  • 启动服务器得到的结果如下:

      ServletNameHelloServlet
      addressbeijing...
      key=address   valuebeijing...
      key=name   valuezhangsan...
      key=age   value18...
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8751次浏览 80人参与
# 你的实习产出是真实的还是包装的? #
1619次浏览 40人参与
# 米连集团26产品管培生项目 #
5537次浏览 214人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7337次浏览 40人参与
# 重来一次,我还会选择这个专业吗 #
433258次浏览 3926人参与
# 简历第一个项目做什么 #
31475次浏览 324人参与
# 巨人网络春招 #
11287次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186809次浏览 1118人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152237次浏览 887人参与
# 研究所笔面经互助 #
118840次浏览 577人参与
# 简历中的项目经历要怎么写? #
309904次浏览 4183人参与
# 面试紧张时你会有什么表现? #
30466次浏览 188人参与
# 你今年的平均薪资是多少? #
212956次浏览 1039人参与
# AI时代,哪些岗位最容易被淘汰 #
63258次浏览 793人参与
# 我的求职精神状态 #
447945次浏览 3128人参与
# 你最满意的offer薪资是哪家公司? #
76388次浏览 374人参与
# 高学历就一定能找到好工作吗? #
64275次浏览 620人参与
# 牛客AI文生图 #
21395次浏览 238人参与
# 你怎么看待AI面试 #
179751次浏览 1224人参与
# 正在春招的你,也参与了去年秋招吗? #
363105次浏览 2635人参与
# 腾讯音乐求职进展汇总 #
160539次浏览 1109人参与
# 职能管理面试记录 #
10787次浏览 59人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务