Javaweb学习心得小总结---servlet开发

1.Servlet是什么?(来自百度,知道的可以忽略本段)

Servlet是sun公司提供的一门用于开发动态web资源的技术。
  Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
  1、编写一个Java类,实现servlet接口。
  2、把开发好的Java类部署到web服务器中。
  按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet

 

2.Servlet的工作流程?

    Servlet程序是Web服务器调用,web服务器接到客户端的Servlet请求后:

   1.web服务器首先检查是否装载并创建了该Servlet的实例对象,如果是执行4,否则执行2,

   2.装载并创建Servlet的一个实例对象,并调用init()方法

   4.创建一个封装http请求信息的HttpServletRequest对象和响应的HttpServletResponse对象,

   5.web程序停止之前,调用Servlet的destroy()方法,卸载Servlet。

3.使用Servlet注意的几个问题?

       因为我们是通过url访问web服务器中的资源,Servlet若想被外界访问,必须映射到url地址上,这个工作

在web.xml文件中使用元素和元素中完成。

4 缺省Servlet

       如果元素的中的映射路径仅为(/),那么这个Servlet就是缺省的Servlet,用于

处理其他Servlet都不处理的访问请求.

 5.Servlet的线程安全问题

      当多个客户端并发访问同一个Servlet,web服务器会为每一个客户端的访问请求创建一个线程,

并调用service()方法,因此service方法内如果访问了同一个资源,就可能引发线程安全问题。

    

 public class ServletDemo3 extends HttpServlet {
12 
13     int i=1;
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         /**
17          * 加了synchronized后,并发访问i时就不存在线程安全问题了,
18          * 为什么加了synchronized后就没有线程安全问题了呢?
19          * 假如现在有一个线程访问Servlet对象,那么它就先拿到了Servlet对象的那把锁
20          * 等到它执行完之后才会把锁还给Servlet对象,由于是它先拿到了Servlet对象的那把锁,
21          * 所以当有别的线程来访问这个Servlet对象时,由于锁已经被之前的线程拿走了,后面的线程只能排队等候了
22          * 
23          */
24         synchronized (this) {//在java中,每一个对象都有一把锁,这里的this指的就是Servlet对象
25             i++;
26             try {
27                 Thread.sleep(1000*4);
28             } catch (InterruptedException e) {
29                 e.printStackTrace();
30             }
31             response.getWriter().write(i+"");
32         }
33         
34     }
35 
36     public void doPost(HttpServletRequest request, HttpServletResponse response)
37             throws ServletException, IOException {
38         doGet(request, response);
39     }
40 
41 }
这种做法是给每个Servlet对象加了一把锁,假如有9999个人同时访问一个Servlet,那么就得按先后顺序排序,不适应。


由于时间关系,笔者参阅了下面的部分内容,在此表示感谢,也请大家踊跃指正帮助更多的想学习servlet的孩子:

http://www.cnblogs.com/xdp-gacl/p/3760336.html



   

转载于:https://www.cnblogs.com/javalearner/p/6140304.html

你可能感兴趣的:(Javaweb学习心得小总结---servlet开发)