Servlet的环境及实现Servlet的三种方式

简介: Servlet的环境及实现Servlet的三种方式

Servlet

传统的Java代码无法获取请求参数,只有使用Java程序中的Servlet技术才可以获取,但是需要服务器编译环境的支持;

Servlet就是一个Java程序,一个Java类;可以和浏览器进行交互,是一个动态资源;Servlet的使用需要有服务器编译环境的支持需要导入Servlet的API;

1.服务器编译环境

Extenal Libaries中必须要有服务器的jar包,如下图:

在这里插入图片描述

当前工程配置web服务器的编译环境:

  1. 在项目名称上右键选择Open Module Settings
  2. 点击Dependencise
  3. 点击右边的加号,选择Library
  4. 点击Java选择你的服务器
  5. 应用

2. Servlet的入门案例

  1. 自定义Servlet继承HttpServle
  2. 重写doGet方法和doPost方法
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//1.自定义类继承HttpServlet
public class Servlet extends HttpServlet {
   
   

    //2.重写doGet和doPost方法
    //在doget中调用doPost方法
    //处理get请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        System.out.println("Servlet doGet");
    }
    //处理post请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        doGet(req, resp);
    }
}
  1. 在web.xml配置servle

    声明自定义Servlet

    给自定义Servlet配置访问名称

  <!--3.配置Servlet-->
    <!--声明Servlet-->
    <servlet>
        <!--servlet的名称-->
        <servlet-name>Servlet</servlet-name>
        <!--servlet的全类名-->
        <servlet-class>com.kaka.servlet.Servlet</servlet-class>
    </servlet>
    <!--
        给Servlet设置访问名称
    -->
    <servlet-mapping>
        <!--servlet的名称-->
        <servlet-name>Servlet</servlet-name>
        <!--servlet的访问名称-->
        <url-pattern>/Demo01</url-pattern>
    </servlet-mapping>

打印输出Servlet doGet

3. Servlet的执行流程

HttpServlet继承于GenericServlet、GenericServlet实现于Servlet,也就是说Servlet是顶层接口;

在Servlet接口中定义了一个方法service,它的主要作用是处理来自浏览器的请求操作。在service方法的重载的方法中,对请求方式进行判断,如果是GET就会调用doGet方法,如果是POST就会调用doPost方法。

步骤如下:

  1. 浏览器发起请求: http://localhost:8080/day50/Demo01

  2. 在服务器中找访问名称为Demo01的Servlet -> Servlet

  3. 请求的处理就交给了Servlet的实例,根据请求方式get/post,决定是给doGet还是doPost方法

注意:

  • 不管是get请求还是post请求,对于服务器来说是没差别的;
  • get请求将请求参数放到请求网址;
  • post请求将请求参数放到请求正文;
  • 不管哪种方法服务器最终都是通过getParameter()方法来获取请求参数的;

4. 实现Servlet的三种方式

Servlet是一个运行在服务器上java动态资源。Sun对于servlet定义,就是一个javax.servlet.Servlet接口;

创建Servlet的三种方式:

方式一:实现Servlet接口

在servlet接口中,没有doGet和doPost方法,处理请求是service方法(抽象的),没有针对Http协议

    <servlet>
        <servlet-name>TestServlet03</servlet-name>
        <servlet-class>com.kaka.test_01.servlet.TestServlet03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet03</servlet-name>
        <url-pattern>/Demo03</url-pattern>
    </servlet-mapping>
public class TestServlet03 implements Servlet{
   
   
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
   
   

    }

    @Override
    public ServletConfig getServletConfig() {
   
   
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
   
        System.out.println("实现Servlet接口");
        //想要针对HTTP需要手动强转
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
    }

    @Override
    public String getServletInfo() {
   
   
        return null;
    }

    @Override
    public void destroy() {
   
   

    }
}

方式二:继承GenericServlet类

在GenericServlet类中,没有doGet和doPost方法,处理请求是service方法(抽象的),没有针对Http协议

 <servlet>
        <servlet-name>TestServlet02</servlet-name>
        <servlet-class>com.kaka.test_01.servlet.TestServlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet02</servlet-name>
        <url-pattern>Demo02</url-pattern>
    </servlet-mapping>
public class TestServlet02 extends GenericServlet {
   
   
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
   
        System.out.println("继承GenericServlet");
        //想要针对HTTP需要手动强转
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
    }
}

方式三:继承HttpServlet类

在HttpServlet中,重写GenricServlet类中的service方法,会由GenericServlet给service方法提供请求对象(ServletRequest)、响应对象(ServletResponse),不针对Http协议!!所以需要强转成HttpServletRequest、HttpServletResponse,之后调用另外一个service方法,传入HttpServletRequest、HttpServletResponse;

​ 获取到请求方式,如果是get请求,就调用doGet方法,如果是post请求,就调用doPost方法;

在开发中,应用比较多的是使用extends HttpServlet,优点是它是与http协议相关的,封装了http协议相关的操作也就是针对http协议有优化,有针对Http协议

<servlet>
        <servlet-name>TestServlet01</servlet-name>
        <servlet-class>com.kaka.test_01.servlet.TestServlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet01</servlet-name>
        <url-pattern>/Demo01</url-pattern>
    </servlet-mapping>
public class TestServlet01 extends HttpServlet {
   
   
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        System.out.println("继承HTTPServlet");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        doGet(req,resp);
    }
}

将ServletRequest和ServletResponse分别强转为HttpServletRequest和HttpServletResponse,因为HttpServletRequest和HttpServletResponse有针对http协议做优化,ServletRequest和ServletResponse没有针对Http协议做优化无法专门针对http协议调用方法;

目录
相关文章
|
6月前
|
Unix Java 编译器
Servlet 教程 之 Servlet 环境设置 3
在Windows和Unix上配置Servlet环境涉及设置CLASSPATH。在Windows的`autoexec.bat`或&quot;环境变量&quot;中添加CATALINA路径和`servlet-api.jar`。在Unix的`.cshrc`文件中设置相同环境变量。别忘了将开发目录也添加到CLASSPATH。例如:`C:\ServletDevel`(Windows)或`/user/ServletDevel`(UNIX)。
43 5
|
6月前
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
69 2
|
前端开发 Java Spring
【小家Spring】Spring环境中(含Boot环境),web组件(Servlet、Filter)内注入使用Spring容器里的Bean
【小家Spring】Spring环境中(含Boot环境),web组件(Servlet、Filter)内注入使用Spring容器里的Bean
|
负载均衡 Java 应用服务中间件
Tomcat下JSP、Servlet和JavaBean环境的配置
经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题,于是总结了一下如何tomcat下配置jsp、servlet和ben,希望对那些初学者有所帮助。 第一步:下载j2sdk和tomcat:到sun官方站点(http://java.
1362 0
|
Java 应用服务中间件 Android开发
部署servlet应用开发环境(架包和配置文件)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
1191 0
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
32 1
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
45 0
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
28 0
|
5月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
104 12