Servlet原理

来源:互联网 发布:js .index 编辑:程序博客网 时间:2024/05/01 08:46

简介:

Servlet是一项应用于开发动态WEB资源的技术。

调用流程:

WEB客户端向服务器端发送URL请求资源,WEB服务器Servlet解析URL,判断是否已经装载了Servlet实例,如果有已经装载则从④开始执行,如果没有装载从从②开始执行

②则需先装载并创建该Servlet的一个实例对象,

③调用Servlet实例对象的init()方法。

④创建一个用于封装HTTP请求消息的HttpServletRequest对象、一个代表HTTP响应消息的HttpServletResponse对象,然后调用Service()方法,并将请求和响应对象作为参数传递过去;

WEB应用程序被停止或宠幸启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servletdestroy()方法


 

配置:

eclipse中创建MyServlet类,并且继承HttpServlet接口,在MyServlet中会自动创建doGet(),doPost()方法,在Web.xml中也有如下配置:

<servlet>    <servlet-name>MyServlet</servlet-name>    <servlet-class>tgb.servlet.study.ServletDemo</servlet-class>  </servlet>   <servlet-mapping>    <servlet-name>MyServlet</servlet-name>   <url-pattern>/servlet/ServletDemo</url-pattern>  </servlet-mapping>

由于客户端是通过URL访问web服务器中的资源的,所以Servlet程序若想被外界访问,就必须把Servlet程序映射到一个URL地址上,这个工作则有web.xml文件中使用<Servlet>元素和<servlet-mapping>元素来完成。

  • <servlet>元素:用于注册Servlet

<servlet-name>:注册Servlet名称

<servlet-class>:Servlet的完整类名

  • <servlet-mapping>元素:用于映射一个已注册的Servlet的对外访问路劲

<servlet-name>:Servlet的注册名称

<url-pattern>:Servlet的对外访问路径。

同一个Servlet可以被映射到多个URL上。

<servlet>    <servlet-name>MyServlet</servlet-name>   <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class>  </servlet>   <servlet-mapping>    <servlet-name>MyServlet</servlet-name>   <url-pattern>/servlet/ServletDemo</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/why.htm</url-pattern>  </servlet-mapping>    <servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/why.jsp</url-pattern>  </servlet-mapping>

 展示:

http://localhost:8080/JavaWeb_Servlet/servlet/ServletDemo

http://localhost:8080/JavaWeb_Servlet/why.htm

http://localhost:8080/JavaWeb_Servlet/why.jsp

 

线程安全:

当客户端并发访问同一个Servlet事,web服务器会为每一个客户端请求创建一个线程,并在这个线程上调用ServletService方法,因此Service方法如果访问了同一个资源的话,就有可能应发线程安全问题。

  • 解决方案一:

枷锁,可能出现的问题:假如有很多个人在同时访问这个Servelet,那么这么多的人就必须排着长队了……

  • 解决方案二:

Servlet去实现一个SingleThreadModel接口,如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式来调用其Service方法。



 

0 0