Servlet技术

淩亂°似流年 2023-06-10 11:21 83阅读 0赞

-—-Servlet是用Java语言编写的应用到Web服务器端的扩展技术,它先于jsp产生,可以方便地对Web应用中的HTTP请求进行处理。在Java Web程序开发中,Servlet主要用于处理各种业务逻辑,他比jsp更具有业务逻辑层的意义。

一。Servlet基础

  Servlet是运行在Web服务器端的Java应用程序,Servlet对象主要封装了对HTTP请求的处理,并且他的运行需要Servlet容器的支持。

  提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss等。

  1.Servlet体系结构

1122940-20180122193508787-552759484.png

   2.Servlet的生命周期:

    1122940-20180123110552850-1404847794.png

      

1) 加载和实例化;在第一次请求Servlet时,Servlet容器将会创建Servlet实例;

2) 初始化;Servlet容器加载完成Servlet之后,必须进行初始化,此时,init方法将被调用;

3) Servlet初始化之后,就处于响应请求的就绪状态,此时如有客户端请求发送,就会调用Servlet实例的service()方法,并且根据用户的请求方式,调用doPost或者doGet方法;

4) 最后,Servlet容器负责将Servlet实例进行销毁,调用destroy方法实现;

  对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。

  1. 一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用ServletDestroy()方法。

  

  3.Servlet如何同时处理多个请求?

     Servlet采用多线程来处理多个请求的同时访问。Servlet容器通过线程池来管理维护服务请求。所谓线程池,相当于数据库连接池,实际上是等待执行代码的一组线程,叫做工作者线程。Servlet容器通过一个调度线程来管理工作者线程。
· 当容器收到一个Servlet的访问请求,调度者线程就从线程池中选出一个工作者线程,将用户请求传递给该线程,然后由该线程处理Servlet的service()方法;
· 当这个线程在执行的时候,容器收到一个新的请求,调度者线程再次从线程池中选出一个新的工作者线程;
· 当容器同时收到对同一个Servlet的多个请求时,那么Servlet的service方法将在多线程中并发执行。

 注:

  1. 1.Servlet容器默认采用单实例多线程的方式来处理请求。这样减少了产生Servlet实例的开销,提升了对请求的响应时间;
  2. 2.对于Tomcat容器来讲,可以在其server.xml中通过<Connector>中设置线程池中的线程数目。

 

4.如何开发线程安全的Servlet?

     Servlet容器采用多线程来处理请求,提高性能的同时也造成了线程安全问题。要开发线程安全的Servlet应该从一下几个方面进行:
1. 变量的线程安全; 多线程并不共享局部变量,所以我们要尽可能的在Servlet中使用局部变量;
2. 代码块的线程安全; 使用同步块Synchronized,防止可能调用的代码块;但是要注意的是,要尽可能得缩小同步代码的方范围,不要在service方法和响应方法上直接使用同步,这会严重影响性能。
3. 属性的线程安全; ServletContext,HttpSession,ServletRequest对象中属性;
4. 使用同步集合; 使用Vector代替ArrayList,使用HashTable代替HashMap;
5. 不要在Servlet中创建自己的线程来完成某个功能; Servlet本身就是多线程的,如果再创建新的线程,将会导致线程执行复杂化,出现线程安全问题;
6. 在多个Servlet中,对外部对象,比如:文件;进行修改操作一定要加锁,做到互斥访问;

   

5.总结

     一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。Servlet通过解析http请求,取得客户端的参数来进行下一步操作。其实简单来说,servlet就是一个控制器,取参数,调用业务逻辑.

二。Servlet访问URL映射配置

   由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用元素和元素完成。
  元素用于注册Servlet,它包含有两个主要的子元素:,分别用于设置Servlet的注册名称和Servlet的完整类名。
一个元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

  

  1. 1 <servlet>
  2. 2 <servlet-name>ServletDemo1</servlet-name>
  3. 3 <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>
  4. 4 </servlet>
  5. 5
  6. 6 <servlet-mapping>
  7. 7 <servlet-name>ServletDemo1</servlet-name>
  8. 8 <url-pattern>/servlet/ServletDemo1</url-pattern>
  9. 9 </servlet-mapping>

  同一个Servlet可以被映射到多个URL上,即多个元素的子元素的设置值可以是同一个Servlet的注册名。 例如:

  

  1. 1 <servlet>
  2. 2 <servlet-name>ServletDemo1</servlet-name>
  3. 3 <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>
  4. 4 </servlet>
  5. 5
  6. 6 <servlet-mapping>
  7. 7 <servlet-name>ServletDemo1</servlet-name>
  8. 8 <url-pattern>/servlet/ServletDemo1</url-pattern>
  9. 9 </servlet-mapping>
  10. 10 <servlet-mapping>
  11. 11 <servlet-name>ServletDemo1</servlet-name>
  12. 12 <url-pattern>/1.htm</url-pattern>
  13. 13 </servlet-mapping>
  14. 14 <servlet-mapping>
  15. 15 <servlet-name>ServletDemo1</servlet-name>
  16. 16 <url-pattern>/2.jsp</url-pattern>
  17. 17 </servlet-mapping>
  18. 18 <servlet-mapping>
  19. 19 <servlet-name>ServletDemo1</servlet-name>
  20. 20 <url-pattern>/3.php</url-pattern>
  21. 21 </servlet-mapping>
  22. 22 <servlet-mapping>
  23. 23 <servlet-name>ServletDemo1</servlet-name>
  24. 24 <url-pattern>/4.ASPX</url-pattern>
  25. 25 </servlet-mapping>

  通过上面的配置,当我们想访问名称是ServletDemo1的Servlet,可以使用如下的几个地址去访问:

  http://localhost:8080/JavaWeb\_Servlet\_Study\_20140531**/servlet/ServletDemo1**

  http://localhost:8080/JavaWeb\_Servlet\_Study\_20140531**/1.htm**

  http://localhost:8080/JavaWeb\_Servlet\_Study\_20140531**/2.jsp**

  http://localhost:8080/JavaWeb\_Servlet\_Study\_20140531**/3.php**

  http://localhost:8080/JavaWeb\_Servlet\_Study\_20140531**/4.ASPX**

  ServletDemo1被映射到了多个URL上。

更多专业前端知识,请上 【猿2048】www.mk2048.com

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Servlet技术

    \----Servlet是用Java语言编写的应用到Web服务器端的扩展技术,它先于jsp产生,可以方便地对Web应用中的HTTP请求进行处理。在Java Web程序开发中,S

    相关 servlet技术

    Servlet是什么   Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP

    相关 Servlet技术

    Servlet是用Java语言编写应用到Web服务器端的扩展技术,它先于JSP产生,可以方便的对Web应用中的HTTP请求进行处理。在Java Web程序开发中,Servlet