Servlet

作者: 半生丨 | 来源:发表于2018-05-14 20:48 被阅读0次

    前言


    一位正在学习Java的开发工程师.


    用户登录

    • 与用户发送请求,访问服务器端的一个登录页面(有一个表单:用户名和密码的输入框以及一个登录的提交按钮)

    • 用户在登录表单中输入: 用户名和密码,点击登录的提交按钮--->提交到一个服务器的位置(Servlet)

      • 我们使用Servlet来获取用户输入的用户名和密码,然后根据用户名和密码查询数据库
      • 结果如果存在 : 给出登录成功的提示信息
      • 结果如果不存在: 给出登录失败的提示信息(用户名或者密码错误)

    Servlet的介绍

    1. 在Javax.servlet包下的接口(它是JavaEE众多规范中的一个)
    2. Servlet是运行在Web服务器中的小型Java程序,且必须在服务器中运行,
       里面涉及到的创建对象和调用方法,都不是由程序员来完成,都是服务器来进行操作的
    3. Servlet通常会通过HTTP接受和响应来自Web客户端的请求
    4. Servlet他是JavaWeb三大组件之一(Servlet/Filter/Listener)
    5. Servlet主要用于
        1. 接受用户的请求(数据) 
            主要HTTPServletRequest对象来负责完成的
        2. 处理请求 :
            主要由Servlet的服务方法来负责完成
        3. 对处理对象的结果进行响应
            主要由HttpServletResponse对象来负责完成
    

    Servlet的入门

    我们想要我们自己编写的代码具有Servlet的功能,那么必须直接或间接的实现Servlet接口!!

    操作步骤 :

    1. 编写一个类去实现Servlet接口(必须实现该接口下的所有方法)
    2. 在web.xml文件中配置访问你编写的这个类(Servlet处理类)
    3. 在Servlet实现类的服务方法,(Servlet方法)中编写具体的业务代码!
    

    案例的技术分析

    • 如何让表单指向一个Servlet
        <form action="书写将这个表单提交的具体位置" method="post">
         .....
         /form
    
    • 我们访问的路径的写法:http://localhost:8080/项目名称/具体项目
    • 我们按照访问路径的写法,在登录表单的acton属性中,也去这么写(仅仅只需要更新访问Servlet的名称)
    • 如何获得用户输入的用户名和密码
      • 我们这里时候request相关的方法来完成
            String result= request.getParameter("name")
            //方法的参数为表单的那么属性值,得到的就是表单的value的属性值(String类型)
    

    WEB阶段的通用开发流程

    在实现具体功能之前,必须思考一个问题:我们所做的这个功能到底是对数据库表CRUD操作的那一个,我们现在的数据库都是关系型数据库(有表,多表,表与表之间)

    我们可以根据这个来分析器SQL语句的编写,===>>看看这个SQL语句是否带有条件,如果有参数,那么我是需要在页面指定Servlet的时候进行传递的.


    1. 跟据客户的需求设计数据库表结构并创建数据库以及初始化数据
    2. 根据数据库表结构创建对应的JavaBean(讲数据库表里面的字段名称作为类里面的属性名称)
    3. 导入相关的jar包.工具类和配置文件(少许修改)
    4. 寻找程序入口(就是普通用户操作的地方,一般都在页面(按钮,超链接,图片) 将其指向服务器的某个Servlet(是否需要携带请求参数)
    5. 编写Servlet
         如果有请求参数:
             1. 接受请求参数(参数比较多,讲数据封装到JavaBean中),调用Servlce层应对的方法
             2. 处理响应
          如果没有求情参数:   直接调用Servlce层对应的方法
    6. 编写Servlce
          WEB阶段除了事务和分页操作灭我们都是直接调用DAO层应对的方法!
    7. 编写DAO
          WEB阶段都是使用DBUtils来对数据库进行CRUD操作
    
    

    web.xml

    Servlet-name
    Servlet-class

    <Servlet>
            取任意值,建议写Servlet的类名,
            如果我们使用快速创建Servlet,自动生成, 默认的就是当前的Servlet的类
            且必须于mapping里的Servlet-name的值一致  
              //主要作用是:让访问的路径与具体的Servlet处理类产生对应的关系  
             <Servlet-name>xxx</Servlet-name>
             //访问路径对应的Servlet处理类:必须写全限定类名(有包结构的!)  
             <Servlet-class>com.ithema.web.helkoServlet</Servlet-class> 
    </Servlet> 
    

    Servlet的生命周期

    问题:我们访问Servlet,它是调用Servlce方法的呢?调用这个方法不需要创建对象吗?需要的话,有是谁创建的?

    是服务器创建,并且调用Servlce方法

    默认情况,当用户第一次访问Servlet,这个Servlet的事例对象由服务器Tomcat来创建,并且一个Servlet类型只会创建一个对象,然后调用init(ServletConfig config)方法来完成初始化,该方法在整个Servlet的生命周期中只会调用一次,紧接着调用Servlce(ServletRequest rep,ServletResponse resp)方法来处理用户的请求,这个方法在整个生命周期中会被调用多次!当我们正常关闭服务器的时候,会在关闭之前调用destroy()方法来进行销毁,该方法在整个生命周期中只会被调用一次,项目移除也会被销毁.

    我们发现与Servlet生命周期相关的有三个方法:

    1. init(ServletConfig config)
    2. servlce(ServletRequest rep,ServletResponse resp)
    3. destroy()
    

    此外,我们还可以通过配置,让Servlet在服务器启动的时候就创建

    在web.xml文件中配置一个load-on-startup的参数(当前的Servlet)!值为非负的整数(值越小,优先级越高)

    <servlet>
        <servlet-name>BServlet</servlet-name>
        <servlet-class>com.itheima.web.servlet.BServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    Servletcongif对象

    Servlet容器使用的Servlet配置对象,该对象在初始化期间将信息传递给Servlet.意味这个对象在我们进行初始化之前就已经创建好了

    我们可以通过这个对象来获得当前Servlet在出事话阶段配置的一切初始化数据!

    String getInitParameter(String name)  //获取指定初始参数名称的值
    Enumeration getInitParameterNames()   //获得所处初始参数的名称
    ServletContext getServletContext()    //获得ServletContext对象!  
    String getServletName()               //获得当前Servlet的名称
    
    

    Servlet中与生命周期相关意外的其他方法

    getServletConfig()   //获得一个ServletConfig对象
     //这是接口里的方法,想要得到这个对象,我们需要自己去实现
    getServletInfo()   //获得Servlet的作者,版本  没什么作用
    

    Servlet的实现方式和体系结构

    Servlet的实现方式有三种

    1. 编写一个类去实现Servlet接口(我们必须实现该接口所有的方法)
    1. 编写一个类去继承GenericServlet抽象类,(他有抽象方法Servlce,我们需要重写)
    1. 编写一个类去继承HttpServlet抽象类(没有抽象方法),我们重写doxxx方法  
    
    这三种的关系如图: Servalet体系结构

    url-pattern的配置

    配置的主要是我们访问的Servlet的入口

    完全匹配 :  /文件名
    匹配所有 :  /*
    目录匹配 :  /abc/*
    扩展名匹配:  *.do
    缺省的配置: /
    为一个Servlet配置多个url-pattern : 众多配置都是以完全匹配为主
    

    相关文章

      网友评论

          本文标题:Servlet

          本文链接:https://www.haomeiwen.com/subject/fjnjdftx.html