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>

原文地址:https://www.cnblogs.com/zhuyj/p/4314482.html