servlet笔记

来源:互联网 发布:思途旅游网站源码 编辑:程序博客网 时间:2024/05/13 13:33

Servlet

1.Servlet是利用反射技术创建的实例,要求构造器必须是无参的,在Servlet实例中必须提供给一个无参的构造器。

2.init()里可以有ServletConfig对象,初始化对象一般在init()方法中完成。

3.自己直接创建new一个实例是没有意义的,实力的创建和方法的调用都是通过servlet容器来负责调用的

4.init(ServletConfig servletConfig) :

   ①-获取初始化参数。servletConfig.getInitParameter()

 
-------------------------------------------------------------------
GenericServlet:
  1.模拟实现原理:
  .在Service方法中获取初始化参数:利用当前servlet定义一个ServletConfig类型的成员变量,在Servlet容器调用init()时,初始化该成员变量,然后在Service方法中就可以使用ServletConfig对象,就可以实现获取初始化参数

   注意:在直接实现Servlet接口的Servlet中是不可以直接在service中直接获取初始化参数的,这也是实现GenericServlet的原理。

7. GenericServlet:  实现了 Servlet, ServletConfig 这两个接口, 所以在其中可以直接调用 ServletConfig 的任何方法;
                    通过 ServletConfig 类型的成员变量实现  ServletConfig 接口的方法;
                    额外定义 init()(无参) 防止在调用 init(ServletConfig) 方法时, 忘记调用 super.init(ServletConfig) 容易出现的问题;
                    init()(无参) 并非生命周期相关的方法, 该方法能在构造器之后被调用, 是因为在 init(ServletConfig) 中调用了 init()(无参)

                    所以可以覆盖无参的init()达到初始化的目的
-------------------------------------------------------------------------------------

HttpServlet:继承自GenericServlet

     模拟实现原理:基于http协议的,所以传入的参数一定是http相关的:

   public void service(ServletRequest arg0, ServletResponse arg1)
          throws ServletException, IOException {
  // 1. 因为当前的 Servlet 是基于 HTTP 协议的, 所以传入的参数一定也是                          HTTP 相关的
  HttpServletRequest request = (HttpServletRequest) arg0;
  HttpServletResponse response = (HttpServletResponse) arg1;

  service(request, response);//调用的是下面的那个方法
 }
---------------------------------------------------------
   public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // 1. 获取请求方式
  String method = request.getMethod();

  // 2. 根据请求方式调用 doXxx() 方法
  if ("Get".equalsIgnoreCase(method)) {
   doGet(request, response);
  } else if ("Post".equalsIgnoreCase(method)) {
   doPost(request, response);
  }

  // ....

 }

用ServletRequest无法获取到请求方式,必须强制转换为HttpServletRequest类型才可以获取网页的请求方式,可以获取相应的请求方式

因为请求方式是基于Http协议的,这也体现了java很好的多态继承机制 和 良好的扩展性


这就是HttpServlet的大致原理,

------------------------------------------------------------------------------
httpServletRequest实现原理

 ①-html基础:

   单选<select name="age">
           <option value="10">10</option>
           <option value="11">10</option>
        </age>

    多选:
       <input type="checkbox" name="interest" value="sports"/>Sports
       <input type="checkbox" name="interest" value="shopping"/>Shopping
       <input type="checkbox" name="interest" value="music"/>music
       <input type="checkbox" name="interest" value="reading"/>reading
②-及各种方法的调用
---------------------------------------------------------------------------------

不赞成使用response输出,不推荐使用PrintWriter()方法

请求方式 一般post提交form表单信息

get提交一般限制在1kb以下
--------------------------------------------------------

ServletContext:代表当前的web应用,可以充当前web应用的信息


设置当前web应用初始化参数,任何一个Servlet都可以访问到。--在web.xml中<context-param>

在一个ServletContext中放入一个属性值,在另一个Servlet(在本应用中)中可以获取该属性,相当于插入了一个公共属性

setAttribute():向ServletContext共享内存中放入一个属性值
和getAttribute();从公共内存中取出一个属性值


需求:从指定界面进入系统,统计当前web应用的统计次数:
     基本思路:先在指定Servlet中获取该属性值,并判断该属性值是否存在,若不存在放入,若存在使其加一,

-------------------------------------------------------------------------------------

 

 

原创粉丝点击