zoukankan      html  css  js  c++  java
  • ①小姐,来桶全家桶不?(Servlet)

    一.前言

      小生不才,大二下半学期第二个星期,近11月博客园。星期六闲来看看经典书。重温下Serlvet。

    二.温故而知新:超文本转移协议HTTP

       HTTP协议是通过互联网(internet)或企业内部网(intranet)交换数据。介绍下http请求,http响应的过程。

       #KFC点全家桶

        HTTP实现的是资源的请求和传送,类似点单。
          1)请求(request)  :小姐向服务员post请求:“来个全家桶”。(post,get是最常用的,下文HttpServlet中会涉及.)
          2)回复(response):服务员根据情况,回应顾客的请求。

       #多发情况-服务员的响应

          1)服务员准备全家桶,交给小姐。(返回 200 成功状态码)
          2)服务员今天不销售全家桶,反馈无。(无法找到某资源)
          3)服务员将命令转给准备的厨师。(重定向)

    三.Servlet  API (自顶向下模式讲解)

        ①展示下javax.servlet.http中主要的类型。

           

                               KFC组织图(Serlvet 重要成员)

       
         ②javax.servlet.Servlet
           先搞个kfc机构出来--引例

           #MyServlet类

    package sedion.jeffli.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    
    @WebServlet(name = "MyServlet"  , urlPatterns = {"/my"})
    public class MyServlet implements Servlet{
    
        private transient ServletConfig servletConfig;
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public ServletConfig getServletConfig() {
            // TODO Auto-generated method stub
            return servletConfig;
        }
    
        @Override
        public String getServletInfo() {
            // TODO Auto-generated method stub
            return "M 0333333333y Servlet";
        }
    
        @Override
        public void init(ServletConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            this.servletConfig = arg0;
        }
    
        @Override
        public void service(ServletRequest arg0, ServletResponse arg1)
                throws ServletException, IOException {
            String servletName = servletConfig.getServletName();
            arg1.setContentType("text/html");
            PrintWriter writer = arg1.getWriter();
            writer.print("<html><head></head><body>Helo:"+servletName+"</body></html>");
            
        }
    
    }
          然后web工程部署,tomcat 7 注意要7。然后火狐敲入:http://localhost:8080/web工程名/my

                                         

             解剖(小生温州医科大学,恶心一下提提神)

            One!※take care

             @WebServlet(name = "MyServlet"  , urlPatterns = {"/my"})
             WebServlet注解类型来声明一个Servlet。在声明同时,还可以告诉容器那个URL调用这个Serlvet。name是可选的,urlPattern也是可选的,但几乎都会用到它。urlPattern告诉容器,/my模式可以调用这个MyServlet。(一个通道,方便购买全家桶,小姐你要吗?
             自然用web.xml部署描述也是可以的。

            Two!

               MyServlet类,重写了Servlet类中的init→service→destroy方法,属于Servlet生命周期方法。  
          

          #ServletRequest

          getParameter最常用的方法。通常用来返回一个html表单域的值。也可以用来获取查询字符串的值。例,利用URL调用:      
         http://localhost:8080/servletTest/my?id=jeffliId
         就可以用下面语句来获取id的值:

        

    String id = request.getParameter("id");

          #ServletResponse

          在调用service方法之前,Servlet容器会创建一个ServletResponse。其中定义的getWriter()方法,返回可将文本床给客户端java.io.PrintWriter。默认PrintWriter对象采用ISO-8859-1编码。

          #ServletConfig

          @WebServlet中以下面这种方式初始化值,值由:键和值。
    @WebServlet(
            name = "MyServlet"  ,
            urlPatterns = {"/my"},
            initParams = {
                @WebInitParam(name="jeffliName",value="QiangqiangLi")
            }
        )

          #ServletContext

          每个web应用只有一个context,在分布式环境下,一个应用可以同时分布到多个容器,并且每个java虚拟机都有一个ServletCotext对象。 

     

        ③javax.servlet.GenericServlet

          这个抽象类给我们完成了Servlet接口中所有方法提供默认实现等,方便了我们用。如果MyServlet类继承GenericServlet,我们只需要重写service方法即可。(小姐,你坐着不用走普通流程,我们给你绿色通道。全家桶马上来!

        

        ※核心

        ④Http Servlet

          Http Servlet两种特性:

            1)不覆盖service方法,而是覆盖doGet,doPost。极少情况下,覆盖doHead,doPut,doTrace,doOptions或doDelete。

            2)用HttpServletRequest和HttpServletResponse 代替 ServletRequest 和ServletResponse。因为将请求相应对象分别从Servlet容器向下转换。

              HttpServletRequest:

                HttpSession getSession() 返回session对象,没有的话,创建新的session对象。

    四.Servlet完成一次请求处理的过程:

                                        

    从客户端(Guest)向服务器发送HTTP请求,该HTTP请求传递给Servlet Container。该Container负责:

    • 分析HTTP请求的信息,并新建request对象,将HTTP请求中的信息放入request对象
    • 新建response对象
    • 根据web.xml(或注释生成),查找URL对应的Servlet对象。如果Servlet对象不存在,则新建相应Servlet对象。
    • 创建新的线程,用于处理本次请求。线程拥有指向request和response对象的引用。

                 

    五.参考文献[在此感谢]

    http://book.douban.com/doulist/3575997/

    http://www.cnblogs.com/vamei/archive/2013/05/12/3073932.html

  • 相关阅读:
    HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架
    Wince 创新布局
    数据解析
    Scrapy
    Requests模块
    爬虫简介
    周总结,基础的东西,全靠练习,多练就熟了.
    我的编程之路,从python重新开始。
    Python根据日期判断周几
    Celery定时任务
  • 原文地址:https://www.cnblogs.com/Alandre/p/3575415.html
Copyright © 2011-2022 走看看