JavaWeb---JSP1

JSP规范介绍

来自于JAVAEE规范中一种
JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程
JSP规范制定了Http服务器应该如何调用管理JSP文件

响应对象存在弊端

适合将数据量较少的处理结果写入到响应体

JSP文件优势

JSP文件在互联网通信过程,是响应对象替代品.

降低将处理结果写入到响应体的开发工作量降低处理结果维护难度

在JSP文件开发时,可以直接将处理结果写入到JSP文件不需要手写out.print命令,在Http服务器调用JSP文件时,根据JSP规范要求自动的将JSP文件书写的所有内容通过输出流写入到响应体
如果处理结果数量过多,使用响应对象增加开发难度

HTML文件与JSP文件区别

作为资源文件类型不同
HTML文件属于静态资源文件,其相关命令需要在浏览器编译并执行的.
JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行的
调用形式不同
如果浏览器访问HTML文件,此时Http服务器直接通过一个输出流
将HTML文件中所有的内容写入到响应体
如果浏览器访问JSP文件。此时Http服务器根据JSP规范来操作JSP文件编辑---->编译----->调用

Servlet 与 JSP 分工:

Servlet: 负责处理业务并得到【处理结果】--------------------大厨

JSP: 不负责业务处理,主要任务将Servlet中【处理结果】写入到响应体----传菜员

Servlet 与 JSP 之间调用关系

Servlet工作完毕后,一般通过请求转发方式 向Tomcat申请调用JSP

Servlet 与 JSP 之间如何实现数据共享

Servlet将处理结果添加到【请求作用域对象】

JSP文件在运行时从【请求作用域对象】得到处理结果

Http服务器调用JSP文件步骤:

1.Http服务器将JSP文件内容【编辑】为一个Servlet接口实现类(.java)
2.Http服务器将Servlet接口实现类【编译】为class文件(.class)
3.Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
4.Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体
Http服务器【编辑】与【编译】JSP文件位置

标准答案:我在【work】下看到这个证据

C:\Users\[登录windows系统用户角色名]\appData\JB\.IntelliJIdea2020.1\system\tomcat\[网站工作空间]\work\Catalina\localhost\【网站别名】\org\apache\jsp

EL表达式

1.命令格式:${作用域对象别名.共享数据}

2.命令作用:
1)EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】
2)EL表达式在JSP文件上使用
3)负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体

作用域对象别名

1.JSP文件可以使用的作用域对象
1) ServletContext application: 全局作用域对象
2) HttpSession session: 会话作用域对象
3) HttpServletRequest request: 请求作用域对象
4) PageContext pageContext: 当前页作用域对象,这是JSP文件独有的作用域对象。Servlet中不存在 在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或则其他JSP文件
真实开发过程,主要用于JSTL标签与JSP文件之间数据共享
数据
JSTL------->pageContext---->JSP

2.EL表达式提供作用域对象别名

          JSP                       EL表达式

      application               ${applicationScope.共享数据名}

      session                   ${sessionScope.共享数据名}

      request                   ${requestScope.共享数据名}

      pageContext               ${pageScope.共享数据名}

EL表达式将引用对象属性写入到响应体

 1.命令格式: ${作用域对象别名.共享数据名.属性名}

 2.命令作用: 从作用域对象读取指定共享数据关联的引用对象的属性值。
              并自动将属性的结果写入到响应体
              (属性是private修饰的,但能访问的到,用的是反射机制)

 3.属性名: 一定要去引用类型属性名完全一致(大小写)

 4.EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出

EL表达式简化版

 1.命令格式: ${共享数据名}

 2.命令作用: EL表达式允许开发人员开发时省略作用域对象别名

 3.工作原理:
  EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法
  首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行
  如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行
  如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行
  如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行
  如果在【application】没有定位成功,返回null

	  pageContext--->request--->session--->application
	  所以简化版有bug,如果请求作用域也有,先输出请求作用域的值了

 4.存在隐患:

      容易降低程序执行速度【南辕北辙】
	  容易导致数据定位错误

 5.应用场景:
      设计目的,就是简化从pageContext读取共享数据并输出难度

 6.EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版

EL表达式-----支持运算表达式

不用类型转换

 1.前提:  在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体

 2.运算表达式:
  
      1) 数学运算

	  2) 关系运算:  >    >=   ==    <   <=  !=

	                gt   ge    eq   lt  le   !=

      3)逻辑运算:  &&   ||    !

EL表达式提供内置对象

  1.命令格式: ${param.请求参数名}

  2.命令作用: 通过请求对象读取当前请求包中请求参数内容
               并将请求参数内容写入到响应体

  3.代替命令:  index.jsp
               发送请求:  Http://localhost:8080/myWeb/index.jsp?userName=mike&password=123

	   <%
	     String userName =   request.getParameter("userName");
		 String password =   request.getParameter("password");
	   %>
	   <%=userName%>
	   <%=password%>



  1.命令格式:${paramValues.请求参数名[下标]}

  2.命令作用: 如果浏览器发送的请求参数是[一个请求参数关联多个值]
              此时可以通过paramVaues读取请求参数下指定位置的值
	  并写入到响应体

  3.代替命令: http://localhost:8080/myWeb/index_2.jsp?pageNo=1&pageNo=2&pageNo=3
              此时pageNo请求参数在请求包以数组形式存在
	  pageNo:[1,2,3]

	  <%
	      String  array[]= request.getParameterValues("pageNo");
	  %>
	  第一个值:<%=array[0]%>
	  第二个值:<%=array[1]%>

EL表达式常见异常:

	 javax.el.PropertyNotFoundException:在对象中没有找到指定属性

在线考试系统

考试时,选项单选按钮,要每组分别起名

随机查询
mysql特有的
select * from emp order by rand() limt0,2

在线考试在线批卷,为同一个用户服务,可以先把题目放到session里,就不用在获取请求头的内容在数据库查答案了

只有登陆界面才能用 HttpSession session=request.getSession();
其他没有恶意访问

类的构造方法可以时私有的,但是它不能有子类,在new这个私有构造的类的时候自动调用super()构造

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值