• Servlet 1


    Servlet

    Sun(Oracle)公司制定的一种用来扩展Web服务器功能的组建规范。

    Servlet技术是使用java语言开发的一套组件规范,不再像CGI技术那样需要分配单独的进程来处理请求,而是单独分配一个线程来处理请求,于是大大提高了处理效率。并且java语言是跨平台的语言,也提升了Web服务器扩展的可移植性。

    HTTP协议

    超文本传输协议(HperText Transfer Protocol),是由w3c制定的一种应用层协议,用来定义浏览器与Web服务器之间如何通信以及通信的数据格式。

    在通信过程中,一次请求对应一次连接,当浏览器再次发请求给服务器时,Web服务器并不知道这就是上次发请求的客户端,这也是HTTP协议的一个特点,即无状态协议。这种需要时建立连接,使用结束后立即断开连接的方式,使得Web服务器可以使用有限的连接为尽可能多的客户提供服务。

    HTTP协议通信请求数据包:

    1.请求行:请求方式+请求资源路径+协议版本

    2.消息头:消息头是一些键值对,一般由w3c定义。通信的双方通过消息头来传递一些特定的含义,比如,浏览器可以发送User-Agent消息头来告诉Web服务器,浏览器的类型和版本。大部分为自动生成,某些时候自己需要添加消息头。

    3.实体内容:只有当请求方式为post时,实体内容才会有数据。

    HTTP协议通信相应数据包:

    1.状态行:协议类型+版本+状态码+状态描述

    2.消息头:Web服务器返回一些消息头给浏览器。例如,返回iContent-Type消息头,告诉浏览器服务器返回的数据类型和字符集。

    3.实体内容:程序处理的结果。

    Servlet如何处理HTTP协议数据通信

    当Web容器收到一个HTTP请求时,通信数据由Web容器负责封装和提供,这些信息被解释为两个对象:与请求数据对应的HttpServletRequest对象和与响应数据对应的HttpServletResponse对象。

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,请求中的所有消息都封装在这个对象中,通过这个对象的相关方法可以获取请求数据。

    作用:

    1.读取和写入HTTP请求数据(请求行、消息头等)

    2.取得和设置cookies

    3.取得路径信息

    4.标识HTTP会话

    5.实现请求转发

    HttpServletResponse对象代表提供给客户端的相应,封装了HTTP的相应数据,通过这个对象可以设置状态行、消息头、实体内容。

    作用:

    1.设置对客户端的输出内容

    2.设置相应的状态码

    3.设置浏览器的解码方式

    4.设置cookies

    5.实现重定向

    WEB程序

    package web;

    public class HelloServlet extends HttpServlet{

      public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<h1>Hello Servlet</h1>");

        out.close();

      

      }

    }

    <servlet>

      <servlet-name>helloServlet</servlet-name>

      <servlet-class>web.HelloServlet</servlet-class>

    </servlet>

    <servlet-mapping>

      <servlet-name>helloServlet</servlet-name>

      <url-pattern>/hello</url-pattern>

    </servlet-mapping>

    过滤器

    处理逻辑:

    package web;

    public class CommentFilter implements Filter{

      public void init(FilterConfig arg0){

        //...

      }

      public void doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg2) throws IOException,ServletException{

        //...

        arg2.doFilter(arg0,arg1);

      }

      public void destroy(){

        //...

      }

    }

     <filter>

      <filter-name>filter1</filter-name>

      <filter-class>web.CommentFilter</filter-class>

    </filter>

    <filter-mapping>

      <filter-name>filter1</filter-name>

      <url-pattern>/comment</url-pattern>

    </filter-mapping>

  • 相关阅读:
    [jni]Getting Started
    USB接口程序编写
    mysql
    learn 学习 试错 练习 SSL
    svn
    第三方支付链接
    错误信息
    app 推广
    xcode 配置等
    .net wordpress 服务器类
  • 原文地址:https://www.cnblogs.com/zhuyj/p/4314482.html
Copyright © 2020-2023  润新知