什么是Servlet
- 用于交互式的浏览和修改数据,生成动态Web内容
- Servlet是用Java编写的服务器端程序,由服务器端调用和执行的任何Java类。
- Servlet是使用Java Servlet应用程序设计接口(API)及相关类和方法的Java程序。
应记住,不管浏览器向服务器发送什么请求,都会找Servlet,在访问静态web资源时,回去找缺省的Servlet
通过Servlet的交互过程
1、客户端发送请求至服务器端。
2、服务器将请求信息发送至Servlet。
3、Servlet生成响应内容并将其传给服务器。(Servlet生成的响应内容会写到response对象中)
4、服务器将响应(即response对象)返回给客户端。
Servlet创建与访问细节
Servlet实例对象完全有Servlet引擎创建,一旦创建就会一直驻留在服务器中。直到Web容器退出,或者撤销相应的Web应用。
对于每次访问Servlet都会调用service方法,并会创建request、response对象(生命周期短)。
NT:但是如果配置Servlet是,配置了1,则在服务器启动时就会创建Servlet,并对其初始化,标签中的数字代表启动的优先级
如何进行Servlet开发
1、编写一个类继承HttpSerlvet(该类在实现Servlet接口时,复写了service方法,并将不同的请求方式分发到不同方法中)
2、重写doGet和doPost方法, 在这两个方法中对不同请求进行处理(一般都转到一个方法中,例如由doGet统一处理)
3、在web.xml中配置Servlet的映射路径,即访问路径(一个Servlet可以映射到多个URL上,还可以映射到静态html上)
4、将编译产生的classes文件放到WEB-INF的classes目录下(如果使用eclipse会自动放入)
缺省的Servlet
在tomcat安装目录中:conf下的web.xml中有这样一个代码:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
缺省的servlet的作用为:凡是在web.xml文件总找不到匹配的元素的URL,他们的方位请求都将交给缺省的servlet处理。也就是说,缺省的servlet用于处理所有其他servlet不处理的访问请求。
Servlet映射匹配规则
- /abc/*
- /*
- /abc
- *.do
NT:*.do的优先级最低
通过归纳的映射关系我们可以总结以下的一些行为:(总的来说,匹配较像的那一个)
当请求URL为”/abc/a.html”时,”/abc/“和”/“都可以匹配这个URL 则Servlet引擎将调用1
当请求URL为”/abc”时,”/abc/*”和”/abc”都可以匹配这个URL 则Servlet引擎将调用3
当请求URL为”/abc/a.do”时,”/abc/“和”/.do”都可以匹配这个URL 则Servlet引擎将调用1
当请求URL为”/a.do”时,”/“和”/.do”都可以匹配这个URL 则Servlet引擎将调用2
Servlet的线程安全问题
对于临界资源的并发访问,就会引起线程安全问题。
解决方案:(已过时)
编写Servlet时,实现标记接口SingleThreadModel
这样访问该Servlet时,就是单线程访问(一次服务一个请求, 当然会过时)。
其他解决方案我还不知道。。。。。。(学疏才浅, 哎)