1.servlet简介 + 我的第一个servlet程序

在使用servlet之前我们需要先创建一个javaee的web项目,一个web项目通常包含下面一些文件:

src
web
    WEB-INF
        lib
        classes
    index.jsp
  • src:存放java源代码
  • web:存放静态资源和动态资源
  • WEB-INF:该目录下的所有文件无法从浏览器中直接访问
  • lib:存放相关的jar包
  • classes:存放编译后的class文件
  • index.jsp:web项目中默认访问的首页

application context(项目上下文),通过配置项目上下文可以在tomcat部署多个项目。

什么是servlet

servlet是一门用于开发动态web资源的技术,可以运行在Web服务器中的小型Java程序,有时也叫做服务器端的小应用程序,servlet是server applet两个单词的组合而成。servlet 可以通过 HTTP协议接收和响应来自 Web 客户端的请求。

servlet的语法跟JavaSE是一样的并且能够使用JavaSE中的API,要想创建一个servlet并使用的话可以分为以下几个步骤:

  1. 创建一个javaee的web项目
  2. 编写一个Java类,实现javax.servlet.Servlet接口,并重写该接口中的抽象方法
  3. 在web.xml文件中配置该servlet(如果使用注解方式的话,无需配置web.xml)
  4. 将该web项目部署到tomcat中并启动

web访问流程图:

1.servlet简介 + 我的第一个servlet程序

如上图所示,服务器端程序其实就是实现了servlet接口的程序,servlet的主要作用其实就是处理和响应客户端的请求

编写第一个servlet

创建一个web项目可以在创建项目时关联tomcat,这样eclipse会把相关的servlet-api.jar包拷贝到项目中,在项目创建一个Java类实现servlet接口并重写里面的方法。

记住导入tomcat中的 servlet-api.jar...你懒的话你就创建项目是关联tomcat即可自动导入包(Eclipse)

在Eclipse中选择2.5版本的动态网页项目 在WEB - INF 下才会自动生成web.xml文件. 这点要注意一下啊!

完成上面步骤 我们重写了他相关方法之后:

我们在service方法中写一行打印语句:

package servlent;

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 servlent_main 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("你好!我的第一个servlet程序!");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

然后我们在WEB - INF 下 的 web.xml文件中添加代码(注意注释即可!!!)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>s1</display-name>        <!-- 这个名字要和项目名一致! -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>    
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 创建一个servlet实例 -->
  <servlet>
  <!-- 这个名字可以随便去取  -->
  <servlet-name>s1</servlet-name>
     <!-- servlet的包名+类名-->
  <servlet-class>s1.s1</servlet-class>
  </servlet>
  
  <!-- 给servlet一个可以访问的URI地址 -->
  <servlet-mapping>
  <!-- servlet的名字,与 servlet中的servlet-name一致-->
  <servlet-name>s1</servlet-name>
  <!-- URI地址:http://locahost:8080/s1/123 -->
  <url-pattern>/123</url-pattern>
  </servlet-mapping>
</web-app>

这里面用到了映射 就是说 :

允许tomcat服务器 => 输入网址 => 找到 <servlet-mapping> 里面的 <servlet-name> s1  映射到  <servlet> 中 然后找到对应的s1 然后允许对应包下的 s1.s1.java文件.

所以呢:包名千万别输错误!

具体流程最后的图和解析认真看看即可

即:

 之后将该web项目部署到tomcat中,启动成功后访问:http://localhost:8080/s1/123
可以看到eclipse控制台中打印出了Hello Servlet
通过上面示例可以看出,servlet的需要部署在tomcat中才能运行,有时tomcat也被称为是servlet的容器。

我们看servlet的源码啊 他的源码包在tomcat的官网下载 具体:  https://archive.apache.org/dist/tomcat/ 下载对应的版本好后

依次打开java - javax - servlet 就是啊

但你直接把源码包导入到Eclipse那个源码器中 他会自动解析

servlet执行流程

servlet执行流程序列图:

1.servlet简介 + 我的第一个servlet程序

  1. 客户端向tomcat发送请求,http://localhost:8080/07-01-servlet/hello
  2. tomcat根据请求的URL找到名称为07-01-servlet的应用
  3. tomcat根据请求的URI"/hello"找到web.xml文件中url-pattern与之对应的标签
  4. tomcat根据url-pattern标签中的servlet-name定位到com.monkey1024.servlet.FirstServlet类。
  5. tomcat实例化FirstServlet类
  6. 调用FirstServlet类中的init方法
  7. 调用FirstServlet类中的service方法
  8. FirstServlet将数据响应给客户端
  9. 调用distroy方法销毁FirstServlet