菜鸟学习笔记——servlet

1、web开发中引入servlet的原因

 1)浏览器向服务器发送请求,服务器根据请求,找到相关资源,向浏览器返回一个结果。但是,web服务器擅长提供静态的web页面。它不会自己生成动态内容,或者把数据保存到服务器上。那么,如果有这样的请求,web服务器就要依靠第三方来帮忙处理这些事情。而servlet则是那个第三方,她也是在服务器上处理这些问题的。

2)有和servlet类似的第三方应用,为什么选择servlet?相比其他方法,servlet的优势在哪里?

2、servlet的用法

既然servlet相当于第三方辅助应用,那么它是如何辅助的?怎么创建一个servlet?怎么调用这个servlet?在什么时候这个servlet都做了什么?

1)容器:管理和运行servlet.

    a.为什么要用容器来管理和运行sevlet?没有容器servlet就不能运行了吗?

       有了容器,可以更专注于业务逻辑,而不用考虑为线程管理、安全性和网络通信编写代码。(这部分我还没有体会到)

       a)通信支持:无需自己建立ServerSocket,监听端口,创建流等,容器知道自己与服务器之间的协议;(容器是怎么知道自己与服务器之间协议的?)

       b)生命周期管理:容器控制servlet的生死,所以不用过多考虑资源管理了。比如什么时候把servlet实例回收,这些都是容器负责处理的;(容器是如何控制的?)

       c)多线程支持:容器自动地为它接收的每个servlet请求创建一个新的java线程,当servlet运行完相应的http服务方法,线程会结束。(怎么创建的新线程,线程又是如何结束

       的?)

       d)生命方式实现安全:利用容器,可以使用xml部署描述文件来配置(或修改)安全性,而不必将代码硬编写到servlet类代码中。(xml如何来配置的?如何用servlet实现?)

       e)JSP支持:容器负责把JSP代码翻译成真正的java。(怎么翻译的?)

    b.容器是如何处理请求的?

      a)客户点击一个链接,URL指向一个servlet而不是静态页面;

      b)容器“看出来”这个请求是一个servlet,创建两个对象HttpServletResponse,HttpServletRequest;

      c)容器根据请求中的URL找到正确的servlet,为这个请求创建或者分配一个线程,并把请求和响应分配给这个servlet线程;

      d)容器调用servlet的service()方法,根据请求的不同类型,service()会调用doGet()或doPost()方法;

      e)doGet()或doPost()方法生成动态页面,并把这个页面“填入”响应对象。(容器有响应对象的一个引用,这是什么?)

      f)线程结束,容器把响应对象转换为一个http响应,把它发回给客户,然后删除请求和响应对象。

    c.容器是怎么找到servlet的?

     a)用户请求会有一部分是URL,它会以某种办法映射到服务器上的一个特定servlet。这种映射可以有多种实现方式,但是,这里只说使用部署描述文件将URL映射到servlet这

     种方法;

     b)部署描述文件:

        注:这些文件在eclipse里面都是随着servlet的创建而自动生成的,无需手动编写,这里写出只是为了便于理解。

       <servlet>
      <servlet-name>Hello</servlet-name>            //servlet名
      <servlet-class>com.div.learnjsp.HelloServlet</servlet-class>  //与这个servlet对应的java类
      </servlet>
      <servlet-mapping>       //容器在运行时使用这个元素来寻找请求的URL所对应的servlet
      <servlet-name>Hello</servlet-name>
      <url-pattern>/Hello</url-pattern>  //客户看到的,不是真实的servlet类名,而是在访问时的路径×
      </servlet-mapping>

      ×:若所创建的工程的名字为task,部署之后,上面的servlet的地址为http://localhost/task/Hello.用户通过这种方式访问.

2)servlet

    a)什么是servlet?知道了servlet的用途,但是还不知道servlet的结构。这个例子说明了一个简单的servlet的组成。

       import javax.servlet.*;
       import javax.servlet.http.*;
       import java.io.*;
       public class HelloWorldServlet extends HttpServlet {
             public void doGet(HttpServletRequest req, HttpServletResponse res)  //从这里拿到容器创建的请求和响应对象的引用

                      throws IOException {
                           res.setContentType("text/html");   //设置响应的报头,内容类型
                           PrintWriter out = res.getWriter();   //获得响应对象的输出流,输出文本信息
                           out.println("<html><head><title>Hello World!</title></head>");
                           out.println("<body>");
                           out.println("<p><img src=images/build_bea_web.gif align=right>");
                           out.println("<h1>Hello World!</h1></body></html>");} }


                   (未完待续......)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值