Servlet介绍以及简单实例

Servlet介绍以及简单实例

目录

  • Servlet介绍以及简单实例
  • 目录
    • 背景介绍
      • HTTP
      • Web响应模式
    • Servlet工作流程
    • Servlet接口访问方式介绍
      • GET
      • POST
      • HEAD
      • OPTIONS PUT DELETE TRACE
    • Servlet配置部署
      • 实现对应的Servlet 例如FirstServletjava
      • 在webxml文件中配置Servlet
      • 在webxml文件中配置Servlet-mapping
    • 注意
    • EgServlet实例
        • 2016-11-02 145553 实例素材
  • 结论

背景介绍

HTTP

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布接收 HTML页面的方法。所有的www文件都需要遵循这个标准,也就注定我们的Web的相应模式。
其中我们关注:

“HTTP是一个客户端和服务器端请求应答的标准(TCP)”


Web响应模式

Web的响应模式核心是 请求/响应,对应着HTTP中的请求和应答。

“浏览器在地址栏输入响应的URL敲击回车后,浏览器便发送一个Http请求,进而服务器接受到Http请求,服务器接受请求后进行处理,将回应的内容返回给客户端(浏览器)显示。客户端浏览器发送的请求称为request, 服务器端返回的称为response,这种交互都是利用HTTP协议完成度的。”

在学习的时候,我简单的将客户端和服务器当作简单的两台连接网络的计算机(PC),实际上在我们开发Web项目时,在本地调试时自己的计算机是客户端也是服务器。我们通过一个简单的比喻来描述,Web响应模式。
做个比喻:
这里我们拿Kenny做个比喻,kenny是客户端,kenny’mom 是服务器,这个时候kenny很饿,说“Mom,get me an apple!”然后他妈就给他了一个苹果。这个时候,他还没吃饱,又说“Mom,get me some Ice cream”,这个时候他妈就去冰箱了一点冰淇淋给他了。如下图所示:

Created with Raphaël 2.1.0 kenny kenny Mom Mom fridge fridge 感觉到饿了 "Mom, get me an apple! " (请求) Give him an apple(响应) 感觉没吃饱,还想吃点东西 "Mom, get me some Ice cream!" (请求) 去拿了冰淇淋 拿到冰淇淋 把冰淇淋给了Kenny

实际上的是这样:

Created with Raphaël 2.1.0 客户端 客户端 服务器 服务器 数据库(或其他资源) 数据库(或其他资源) 需要请求资源 利用特定方式进行请求(request) 服务器直接返回需要的资源(response) 需要请求其他资源 利用特定方式进行请求(request) 访问数据库或获取其他的资源 得到响应的数据或资源 客户端得到响应的数据或资源(response)

以上便是一个简单的对Web响应模式的理解。


Servlet工作流程

浏览器提交的请求是满足Http协议的文本,该文本是由服务器容器,例如Tomcat接受并解析封装成了HttpServletRequest类型的request,所有的HTTP头数据都是可以通过request的对应方法查询到(get),当需要输出给客户端浏览器时,Tomcat将输出流文本封装成HttpServletResponse的response对象,通过设置response的属性,来控制输出的内容。其中,Tomcat利用request和response做为参数,调用Servlet中的方法,例如doget(request,response);

Created with Raphaël 2.1.0 Servlet中主要处理业务逻辑,例如读取数据库、权限检查 客户端(浏览器) 客户端(浏览器) Servlet1 Servlet1 请求资源(Request) 服务器响应(Response)

上述Servlet1的直接把内容反馈给了用户浏览器,客户端接收到服务器的响应的内容。(类比kenny第一次饿了)

Created with Raphaël 2.1.0 Servlet中主要处理业务逻辑,例如读取数据库、权限检查 客户端(浏览器) 客户端(浏览器) Servlet2 Servlet2 数据库(或其他资源) 数据库(或其他资源) 请求资源(Request) 访问数据库 数据库返回 服务器响应(Response)

上述Servlet2的查询了数据库或其他的操作,把内容反馈给了客户。(类比kenny吃冰欺凌)


Servlet接口&访问方式介绍

Servlet是实现了javax.servlet.Servlet接口的类,这个接口规定了特定的方法来处理特定的请求,我们只需要实现Servlet相关的方法,Servlet规范是建立在HTTP协议上的,http1.1规范支持OPTIONS/GET/POST/HEAD/PUT/DELETE/TRACE等7种访问方式。下面我们重点介绍Get/Post。

GET:

表示查询信息,URL中附带少量参数信息,URL总长度不超过255个字符,参数还会在浏览器的地址栏中显示

POST:

表示提交信息,一般用于提交大数据信息或者文件,提交的内容不收长度限制,也不会在地址栏中显示。

表示查询文档头信息,服务器返回的文件类型,长度,最后修改时间等等,该方式较少使用。

OPTIONS /PUT /DELETE /TRACE:

是被声明了但还没有被使用web访问方式,几乎不用。


Servlet配置部署

为了能让Servlet正常运行,需要如下配置

  1. 实现对应的Servlet 例如,FirstServlet.java
  2. 在项目/WebRoot/WEB-INF/web.xml文件中配置Servlet,其中为必填属性,为配置默认参数,Key,Value的形式。取值0或1,配置为1,则Tomcat启动便会加载这个Servlet,如果为0,则有第一次请求这个Servlet时才加载。(这一步将一个编写好的Servlet类配置进了Web.xml,我们知道web.xml中的myFirstServlet对应的就是FirstServlet.java这个Java类)
  3. 当把一个servlet配置进了web.xml后,我们该配置如何通过URL方式来访问进这个Servlet类,也就是调用这个类。这里就要配置,Web.xml中的,指当前web.xml文件中上例配置的Servlet名字,指访问路径,其中通配符*指任意长度的任意字符,?指任意字符。

下面贴出代码

1.实现对应的Servlet 例如,FirstServlet.java

可以在Myeclipse**快捷**的新建出Servlet,单击下图所示

Servlet介绍以及简单实例_第1张图片

下图需要注意的有三点:

  1. A点是这个Servlet的名字
  2. B点这个是Servlet继承了HttpServlet
  3. C点是这个Servlet生成的相关函数,后文在详细讲解,这里如果不理解可以先忽略。

Servlet介绍以及简单实例_第2张图片

2.在web.xml文件中配置<\Servlet>

web.xml的所在的目录是WebRoot/WEB-INF/web.xml

Web.xml中<-->
<servlet>
     <servlet-name>myFirstServletservlet-name>
     <servlet-class>com.demos.servlet.FirstServlet/FirstServlet.javaservlet-class>
     <init-pararm>
          <param-name>WelcomeInfoparam-name>
          <param-value>Welcome to Servlet worldparam-value>
     init-param>
     <load-on-startup>1load-on-startup>
servlet>

其中 是一对标签,来配置Servlet,配置的是Web.xml中使用这个Servlet的名称。来配置这个Web.xml中的所对应的Servlet的实现类。
(说白了这一步我的理解就是,告诉服务器我这有个Servlet,这Servlet叫什么,到时候有人要用,要用你就调用那个个类)

3.在web.xml文件中配置<\Servlet-mapping>

上述Web.xml后文<-->
<servlet-mapping>
     <servlet-name>myFirstServletservlet-name>
     <url-patern>Web应用程序的路径/FirstServleturl-patern>
servlet-mapping>

其中是配置Servlet的访问模式, 使用上述’myFirstServlet‘的这个名字,这个名字就是标识着在Web.xml的一个Servlet类型的量(第二步声明出来的)。
来说明了要访问这个Servlet的URL模式,访问模式.

可以配置多个url-patern如下:

<servlet-mapping>
     <servlet-name>myFirstServletservlet-name>
     <url-patern>Web应用程序的路径/FirstServlet.jspurl-patern>
     <url-patern>Web应用程序的路径/FirstServlet.phpurl-patern>
     <url-patern>Web应用程序的路径/FirstServlet.GGurl-patern>
servlet-mapping>

这里的配置可一看到后面有.jsp 有 .php 这样的操作可以实现隐藏编程语言的目的,而有些页面也可以用特定的后缀来标识来声明版权(如公司缩写,上文.GG为巧合虚构)

注意

一个完整的Servlet配置方案需要,Servlet.java类,配置,配置。其中配置都是在Web.xml中进行配置。

Eg.Servlet实例

这里是完整的Servlet代码以及web.xml和对应的实验截图。

2016-11-02 14:55:53 实例素材

项目结构:<新建Webproject-建包-建Servlet-自动mapping>:
Servlet介绍以及简单实例_第3张图片


FirstServlet 代码:

package com.demos.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
     private static final long serialVersionUID = 304496806747823900L;
     public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          out.println("");
          out.println("");
          out.println("  A Servlet");
          out.println("  ");
          out.print("    This is ");
          out.print(this.getClass());
          out.println(", using the GET method");
          out.println("  ");
          out.println("");
          out.flush();
          out.close();
     }
     public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          out.println("");
          out.println("");
          out.println("  A Servlet");
          out.println("  ");
          out.print("    This is ");
          out.print(this.getClass());
          out.println(", using the POST method");
          out.println("  ");
          out.println("");
          out.flush();
          out.close();
     }
     public void init() throws ServletException {
          // Put your code here
     }
}

这里我们不要在意文件中的细节,只需要注意上述文件中的这里:

...
public class FirstServlet extends HttpServlet //FirstServlet 继承了HttpServlet 
...
PrintWriter out = response.getWriter();//这里就是响应的输出对象 out
...

Web.xml的文件:


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     id="WebApp_ID" version="3.0">
     <display-name>Demosdisplay-name>
     <welcome-file-list>
           <welcome-file>index.jspwelcome-file>
     welcome-file-list>
     <servlet>
           <description>This is the description of my J2EE componentdescription>
           <display-name>This is the display name of my J2EE componentdisplay-name>
           <servlet-name>FirstServletservlet-name>
          <servlet-class>com.demos.servlet.FirstServletservlet-class>
     servlet>
     <servlet-mapping>
           <servlet-name>FirstServletservlet-name>
           <url-pattern>/servlet/FirstServleturl-pattern>
     servlet-mapping>
web-app>

结果:F12查看输出源码

这里我们在浏览器中输入URL后敲击回车会在内容中显示出,“This is class com.demos.servlet.FirstServlet,using the GET method”,这里便是我们输出给用户(用户User指人,客户Clint不一定要是人)的信息,我们按F12可以看出服务器的Servlet返回的所有的信息,在下图的下方显示。
其原因是Servlet输出的信息是HTML信息,当浏览器得到这一串信息后,变解析成了一个页面,而页面内容便是中的那串字符。
Servlet介绍以及简单实例_第4张图片

结论

此blog简单的介绍了Servlet的响应模式以及简单的实现,实现一个Servlet需要掌握

  1. 理解Web 响应模式是:请求/响应模式
  2. 在实现Servlet时可以在Myeclipse中直接右键新建Servlet以及自动生成例如doGet();dopost();的函数
  3. 在Web.xml中,配置好了 以及.
  4. 理解Servlet返回给浏览器的信息,和在页面中显示的信息中的关系。

ps.第一次写blog,只是为了养成一个更好的学习习惯,文中出现的错误还请大家即时告知,我会尽快改正,共勉。

你可能感兴趣的:(SYC学习)