Java Servlet 与 jsp

jsp 其实就是 ServletJSP(Java Server Page:Java服务端页面)。 jsp运行在服务端,同样,需要容器的解析,成为HTML页面 在客户端运行....... jsp的执行过程: 客户端请求 --------》Jsp页面-------》转译------》编译--------》Servlet------------》Jsp页面 ---------》响应客户端 JSP生成Servlet类文件存放的位置:Tomcat/work/Catalina/localhost/工程名称/org/apache/jsp 既然要编译成Servlet为什么还要jsp呢? --------》因为Servlet对于页面的展现。实现比较麻烦。适合于后台业务数据的控制与处理。JSP负责前台数据的 动态展现。实现数据的逻辑处理和显示的分离 jsp 被编译成Servlet后 后面就和Servlet的生命周期一致了。 指令元素 page:用于设置JSP页面的属性。     

JSP页面的作用域     pageContext < request < session < application Servlet: Servlet由于是服务端技术。因此必须运行在WEB容器上面,由容器解析成客户端的HTML语言。 Servlet的层次结构Servlet(接口)--->GenericServlet(抽象类)-->HttpServlet(抽象类-->用户自定义的Servlet Servlet/GenericServlet:与协议无关的Servlet。 HttpServlet/用户自定义的Servlet:与协议有关的Servlet HttpServlet的运行流程 用户发送客户端请求---->HttpServlet的service方法--->通过ServletRequest获取具体的请求类型(get/post)- ------->再执行doGet/doPost方法。 Servlet的生命周期: Tomcat启动-->加载webapps下面的WEB工程--->读取WEB.xml文件----->实例化web.xml中配置的serlvet类---> 加载serlvet实例并且执行初始化方法并放入到内存中。 客户端发起请求---->服务端会到内存中serlvet实例化了没有,如果没有实例化,实例化 如果有,直接获取这个对象---->执行对象的service方法----->等待下一次的请求 直到服务端卸载serlvet时,才会执行destory方法。 访问Servlet     由于Servlet是一个类。页面访问的是一个路径。因此要将Servlet映射成一个URL的路径。     tomcat 映射     java源文件--->Java类--------->解析成HTML语言--------->路径     http://localhost:8080/工程名/路径。     首先查找在工程中有没有提定路径的文件,如果没有,查找web.xml中的servlet-mapping的url-pattern部分。     如果找到匹配的url-pattern的话,通过url-pattern获取serlvet-name。     然后再通过serlvet-name去找寻serlvet配置中的servlet-name。如果找到匹配,再执行serlvet-class。     然后再根据请求类型,执行doGet或者doPost方法。 Servlet 非线程安全的: 通常情况下,系统只生成Servlet的单一实例,之后,为每一个用户请求创建新的线程。这意味着,如果新的请求到来,而前面德 请求依旧在执行,那么多个线程可能会并发的访问同一个Servlet对象,因此,doGet和doPost方法必须小心的同步对字符段和其他共享数据的访问,因为多个线程可能同时对数据进行访问。要注意,多个线程不共享局部变量,因此不需要保护 解决: 有两种方法: 1,:让请求排队,每次只允许一个请求访问一个Servlet (SingleThreadModel)   实现SingleThreadModel接口      public class YouServlet extends HttpServlet implements SingleThreadModel{ }      这样就会对每一个请求创建一个实例,就不会多个请求访问同一个Servlet的单个实例了。 但这不是一个好的方法: 原因:(1) 若servlet被频繁访问,同步对servlet的访问会造成极大的损害。 (2) 造成共享问题 2:服务器创建多个servlet实例组成的池,同一时间每个实例能够处理请求(synchronized)    加锁 synchronized(推荐)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值