JSP文件书写规则及EL表达式书写规范

java命令书写规则

声明java变量

<%
  int num=100;
%>

声明运行表达式

<%
int num3 = num1 + num2 ;//数学运算
int num4 = num2>=num1?num2 :num1;//关系运算
boolean num5 = num2>=200 && num1>=100;//逻辑运算
%>

声明控制语句

<%
if(num2>=num1){
	<h1>大于
%>
<%
}else{
	<h1>小于
%>
<%
}
%>

for(int i=1;i<=5;i++){}

声明对象

<%
//创建一个Student类型对象
student stu = new Student(18, "zhangsan" );
%>
学员编号:<%=stu.getage()%><br/>
学员姓名:<%=stu.getname()%>

JSP文件内置对象

HttpServletRequest

<%
string userName = request.getParameter([ s: "userName");
string password =request.getParameter([s: "password");
%>
来访用户姓名:<%=userName%><br/>
来访用户密码:<%=password%>

HeepSession

<%
HttpSession session=request.getSession();
session.setAttribute( "key1" ,  200);
%>
<%
HttpSession session=request.getSession();
Integer value=(Integer) session.getAttribute(s:"key1 ");
%>

ServletContext 全局作用域对象

同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享JSP文件内置对象:application

<%
ServletContext application = request.getServletContext();
application.setAttribute([ "key","hello world");
%>

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文件内容写入到响应体

EL表达式

命令格式

${作用域对象别名.共享数据}

命令作用:

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

EL表达式—作用域对象别名

JSP文件可以使用的作用域对象

  1. servletcontext
    application: 全局作用域对象

  2. Httpsession
    session: 会话作用域对象

  3. HttpservletRequest
    request: 请求作用域对象

  4. Pagecontext
    pageContext:当前页作用域对象

这是JSP文件独有的作用域对象。servlet中不存在
在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他servlet或则其他JSP文件
真实开发过程,主要用于JST标签与JSP文件之间数据共享 数据 JSTL------->pagecontext---->JSP

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

  1. application
    ${ applicationScope.共享数据名}
  2. session
    ${sessionScope.共享数据名}
  3. request
    ${requestScope.共享数据名}
  4. pagecontext
    $ {pageScope.共享数据名}

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

命令格式

${作用域对象别名.共享数据名.属性名}

命令作用

从作用域对象读取指定共享数据关联的引用对象的属性值。并自动将属性的结果写入到响应体

属性名

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

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

public class 0neservlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,HttpServleresponse) throws ServletException,IOException {
	
	Student stu = new Student( 20, "zhangsan");
	//2.将引用类型对象存入到请求作用域对象作为共享数据
	request.setAttribute( "key" , stu);
	//3.请求转发,向Tomcat申请调用index_1.jsp
	request.getRequestDispatcher("/1ndex_1.JSP").forward(request,response);
	}
}

学员编号:S{requestScdpe.key.age}<br/>
学员姓名:S{requestscope.key.name}

EL表达式简化版

命令格式

${共享数据名}

命令作用

表达式允许开发人员开发时省略作用域对象别名

工作原理:

表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法

  • 首先到【pagecontext】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【pagecontext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行
  • 如果在【application】没有定位成功,返回null

pagecontext—>request—>sessionl—>application

存在隐患:

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

应用场景:

设计目的,就是简化从pagecontext读取共享数据并输出难度

EL运算支持运算表达式

<%
int num1=1;
int num2=2;
%>
${num1+num2}

关系运算

<!--传统Java命令方式实现关系运算输出-->
<%
if((age)>=18){
%>
欢迎光临<br/>
<%
}else{
谢绝入内<br/>
<%
}
%>

EL表达式:
${age>=18?允许:拒绝}

EL表达式提供内置对象

param

命令格式

${param.请求参数名}

命令作用

从通过请求对象读取当前请求包中请求参数内容
并将请求参数内容写入到响应体

http://localhost:8080/myWeb/index_1.jsp?userName=mike&password=123

来访者姓名:S{param.userName}<br/>
来访者密码:${param.password}

paramvalues

命令格式

${paramvalues.请求参数名[下都]}

命令作用

如果浏览器发送的请求参数是一个请求参数关联多个值此时可以通过paramvaues读取请求参数下指定位置的值并写入到响应体

<!--
http://localhost:8080/myWeb/index_2.jsp?habbit=a&habbit=b&habbit=c-->

${paramValues.habbit[0]}<br/>
$iparamValues.habbit[1]}<bi/>
S{paramValues.habbit[2]}<br/>

EL表达式常见异常:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值