servlet开发详解

一、什么是servlet,干什么用的???

tomcat作为一个web服务器,也称作servlet容器。servlet只有放在web服务器中才能运行,不能独立运行。tomcat这个容器要做三件事:接收请求、处理请求和响应请求。接收和响应请求没有什么区别,tomcat内部就写好了怎么做。只有处理请求需要程序员自己编写,但是编写不能是胡乱编写的,于是有了servlet接口提供规范。

servlet并不神秘,只是一个接口,我们实现了这个接口就能做处理请求的逻辑编写。

servlet就是处理请求逻辑的抽取,就是一个接口

在学习完spring框架后,我们就不用自己编写servlet程序。spring中的DispatcherServlet其实本质就是一个Servlet。

二、怎么编写servlet程序

1.自定义类继承httpservlet(一个抽象类)从而继承GenericServelet类。我们需要重写doGet()和doPost()两个方法。

2.配置web.xml文件

配置javaweb三大组件:

  • servlet
<servlet>
         <!-- servlet的内部名称,自定义 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的类全名:包名+类名 -->
        <servlet-class>com.uplooking.controller.DemoAction</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>  
<!-- servlet的映射配置 -->
<servlet-mapping>
        <!-- servlet的内部名称,一定要和上面的内部名称保持一致 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的映射路径(访问serclet的名称 -->
        <url-pattern>/DemoAction</url-pattern>
</servlet-mapping>
  • listener(监听器):主要用于监听 ServletContext、HttpSession 和 ServletRequest 等对象的生命周期和属性的变化,这些监听器可以用来处理 Web 应用程序中的各种事件,例如初始化、销毁、属性变化等。在spring框架中ContextLoaderListener监听器,启动tomcat时自动装配spring的配置。
  • filter(过滤器):对请求和响应进行过滤,用于权限控制、编码设置、过滤敏感词汇等。(下面是spring框架内置的过滤器),如果自己写就实现javax.servlet.Filter接口就行,不用配置。
     <filter>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

三、servlet程序的调用过程

  • 根据请求行,定位虚拟主机、web应用和请求的资源
  • 在web.xml配置文件中寻找对应的url处理的servlet,以及全路径
  • tomcat会根据全路径利用反射创建servlet实例,并且执行service方法
    Class.forName(“com.hhh.servlet”).newInstance():
  • service方法使用request和response对象作为参数,进行数据的处理已经封装
  • 返回浏览器符合http协议的响应对象

1.servlet是单例模式

每次进行访问请求时,都会查询内存中是否有servlet对象,如果没有就创建。当服务器关闭时servlet对象销毁。

2.每次请求的request和response对象都是新创建的

四、request对象

requst对象用于服务器获取浏览器提供的请求信息。

1.作用一:获取请求参数

请求参数就是浏览器向服务器发送请求时携带的参数,有请求体中的参数或在url拼接的参数。

request.getParameter(String ParamName); 

注意编码问题

request.setCharacterEncoding("utf-8"); 

2.作用二:实现请求转发

什么叫请求转发???

请求转发就是访问资源a时,a资源没有做处理将请求转发给资源b,资源b对这个请求进行响应。

注意:请求转发浏览器的url不会变化;一次请求一次响应

请求转发必须在同一个web应用中进行;

请求转发的的url必须有servelt映射,否则404;

请求转发和域对象配合可以携带数据

request.getRequestDispatcher(String url).forward(req,res); 

3.作用三:配合作用域对象实现带数据转发

什么是域对象???

域对象就是一个有访问范围、有map属性,通过自身的map在访问域内实现资源的共享。request对象就是一个域对象。

request提供的共享map数据的方法

request.setAttribute(String keyName, Object value);
//存储map数据
request.getAttribute(Sting keyName); 
//获取某个key的value

步骤:

  • 第一步:在处理请求的Servelet类中的doGet()方法中通过setAttribute()方法完成数据封装。并通过request.getRequestDispatcher(String url).forward(req,res);完成转发。
  • 第二步:在数据目的地通过request.getAttibute()方法获取解析数据。

五、response对象

1.作用一:向浏览器返回数据

response.getWriter().write(data);
response.setContentType("utf-8");
//响应的编码方式

2.作用二:重定向

什么是重定向???

重定向就是请求资源a的时候,需要进一步请求资源b才能获取对应的资源。

重定向是两次请求两次响应。浏览器的url变化。

重定向两次请求的request对象不同

重定向两次请求的资源可以是不同的web应用、甚至可以是不同的服务器。

步骤

  • 代码:response.sendRedirect("重定向资源的url");
  • 关于重定向资源的url:
    • 可以是同一web应用下的其它文件,如:fileName.fileType。
    • 可以是同一虚拟主机的其它web应用的资源,如:/webAppName/[resourceDecName/]fileName.filetype。
    • 可以是其它虚拟主机,如:http://www.baidu.com.

相关推荐

  1. Servlet技术j详解1

    2024-03-28 07:36:02       48 阅读
  2. <span style='color:red;'>Servlet</span>

    Servlet

    2024-03-28 07:36:02      45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 07:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 07:36:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 07:36:02       82 阅读
  4. Python语言-面向对象

    2024-03-28 07:36:02       91 阅读

热门阅读

  1. Flink 学习资料

    2024-03-28 07:36:02       46 阅读
  2. Django 自定义中间件(IP限制频率、用户权限)

    2024-03-28 07:36:02       46 阅读
  3. 数据结构之搜素二叉树

    2024-03-28 07:36:02       40 阅读
  4. Xxe漏洞

    2024-03-28 07:36:02       38 阅读
  5. MySQL 查询优化与 EXPLAIN 关键字详解

    2024-03-28 07:36:02       44 阅读
  6. Serilog日志框架

    2024-03-28 07:36:02       41 阅读
  7. openGauss系统函数添加指导

    2024-03-28 07:36:02       36 阅读
  8. 浅聊openGauss逻辑架构

    2024-03-28 07:36:02       35 阅读
  9. SBA架构5G核心网

    2024-03-28 07:36:02       43 阅读