Servlet
一、概念
运行在服务端的小程序。可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。
二、执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求 URL 路径,获取访问的 Servlet 的资源路径
- 查找
web.xml
文件,是否有对应的<url-pattern>
标签体内容 - 如果有,则在找到对应的
<servlet-class>
全类名 - tomcat 会将字节码文件加载进内存,并且创建其对象
- 调用其方法
<servlet>
<servlet-name>BaseServlet</servlet-name>
<servlet-class>com.gem.servlet.BaseServlet</servlet-class>
<!--设置可以启动时初始化-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>BaseServlet</servlet-name>
<url-pattern>/BaseServlet</url-pattern>
</servlet-mapping>
三、生命周期
- 配置
编辑好的servlet源文件并不能响应用户请求,还必须将其编译成class文件,将编译好的class文件放到WEB-INF/classes路径下,如果servlet有包,则还需要将class文件放到包路径下。
四、其他方面的知识点
配置参数有两种方式:
- 通过
@WebServlet
的initParams属性来指定。 - 通过在web.xml文件的
<servlet…/>
元素中添加<init-param…/>
子元素来指定。
Servlet默认是线程不安全的,一个容器中只有每个servlet一个实例。
五、Servlet线程问题
servlet在被访问之后会实例化操作,创建servlet对象。而Tomcat容器可以同时多线程并发访问同一个servlet,如果在方法中对成员变量做修改操作,就会有线程安全的问题。
解决方案:
- synchronized
(效率不是很高) - 实现SingleThreadMode接口
(每一个线程都会创建一个servlet实例,这样每个客户端请求就不存在共享资源的问题,但是servlet响应客户端请求的效率太低) - 尽可能使用局部变量
JSP
一、概念
JSP 全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。
二、运行原理
- WEB容器(Servlet引擎)接收到以
.jsp
为扩展名的URL的访问请求时,容器会把访问请求交给JSP引擎去处理 - 如果该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将此JSP页面代码转换成Servlet代码
- 然后JSP引擎调用服务器端的Java编译器javac.exe对Servlet代码进行编译,把它变成字节码(.class)文件,然后再调用JAVA虚拟机执行该字节码文件,然后将执行结果传给Web浏览器端。如果该JSP页面不是第一次被请求,且没有被修改过
- 则直接由JSP引擎调用JAVA虚拟机执行已编译过的字节码.class文件,然后将结果传送Web浏览器端
不同点(区别)
jsp就是在html里面写java代码,servlet就是在java里面写html代码。
- JSP侧重视图,Sevlet主要用于控制逻辑
- Servlet中没有内置对象
- JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。