JSP教程课程笔记

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

二. 响应对象的弊端
       响应对象适合将数据量较少的处理结果写入到响应体中,当处理结果数量过多时,使用响应对象会增加开发难度。

三. JSP文件
       JSP文件在执行时,自动将文件所有内容写入到响应体中,从而节省书写out.print的时间。

四. JSP文件中书写Java命令规则
1.在jsp文件中,只有书写在执行标记中的内容才会被当作Java命令。(即<%内容%>)

2.在jsp文件中,通过输出标记,通知jsp将Java变量的值写入到响应体中。(即<%=变量名%>)

3.在jsp中如何导包:

<%@ page import="java.util.List" %>

五. JSP文件内置对象
1.request对象
       类型:HttpServletRequest
       作用:在JSP文件运行时读取请求包信息;与Servlet在请求转发过程中实现数据共享

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

来访用户姓名:<%=username%><br>
来访用户密码:<%=password%>

2.session对象
       类型:HttpSession
       作用:JSP文件在运行时,可以通过session指向用户私人储物柜,添加共享数据或者读取共享数据。
session_1.jsp

<%
	session.setAttribute("key1",200);
%>

session_2.jsp

<%
	Integer value = (Integer)session.getAttribute("key1");
%>
session_2.jsp从当前用户session中读取数据:<%=value%>

3.application对象
       类型:ServletContext
       作用:同一个网站中的Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享。
application.jsp

<%
	application.setAttribute("key1","hello world");
%>

OneServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	ServletContext application = request.getServletContext();
	String value = (String)application.getAttribute("key1");     
	System.out.println("value="+value);  
}

六. Servlet与JSP文件
1.Servlet与JSP分工
       Servlet:负责处理业务并得到处理结果。
       JSP:不负责业务,主要任务是将Servlet中的处理结果写入到响应体。

2.Servlet与JSP之间的调用关系
       Servlet工作完毕后,一般通过【请求转发方式】,向Tomcat申请调用JSP。

3.Servlet与JSP之间如何实现数据共享
       1)Servlet将处理结果添加到【请求作用域对象】。
       2)JSP文件在运行时从【请求作用域对象】中得到处理结果。

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

2.Http服务器【编辑】与【编译】JSP文件的位置:work文件夹下(C盘)

八. EL工具包
1)由Java技术开发的一个jar包
2)作用:降低JSP文件开发时Java命令开发强度
3)Tomcat服务器本身自带了EL工具包(Tomcat安装地址/lib/el-api.jar)

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

传统的JSP文件开发:

/*
*传统的JSP文件开发步骤:
*	第一步:从指定的作用域对象读取处理结果
*	第二步:将得到的数据进行类型转换
*	第三步:将转换后的数据写入到响应体中
*/
<%
	String value1 = (String)application.getAttribute("key1");
	String value2 = (String)session.getAttribute("key2")
	String value3 = (String)request.getAttribute("key3");
%>
<%=value1%>
<%=value2%>
<%=value3%>

使用EL表达式开发:

/*使用EL表达式
* applicationScope为application作用域对象的别名
* sessionScope为session作用域对象的别名
* requestScope为request作用域对象的别名
*/
${applicationScope.key1}
${sessionScope.key2}
${requestScope.key3}

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

2)EL表达式中提供的作用域对象别名
在这里插入图片描述
十一. EL表达式将引用对象属性写入到响应体
1)命令格式:${作用域对象名.共享数据名.属性名}
2)命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将结果写入到响应体中。
3)注意:
       - 一定要与引用类型的属性名完全一致(大小写一致)。
       - EL表达式中没有提供遍历集合的方法,因此无法从作用域对象中读取集合内容输出。

十二. EL表达式简化版
1)命令格式:${共享数据名}
2)命令作用:EL表达式允许开发人员开发时省略作用域对象别名。
3)工作原理
       首先到【pageContext】中定位共享数据,如果存在则直接读取输出;如果在【pageContext】中没有定位成功,则到【request】定位共享数据,存在即读取输出;如果在【request】中没有定位成功,则到【session】定位共享数据,存在即读取输出;如果在【session】中没有定位成功,则到【application】定位共享数据,存在即读取输出;如果在【session】中没有定位成功,则返回null。
       pageContext—>request—>session—>application
4)存在的隐患:
       - 容易降低程序执行速度
       - 容易导致数据定位错误
5)应用场景:其设计目的就是简化从pageContext中读取共享数据并输出的难度。
6)EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版。

十三. EL表达式——支持运算表达式
1)前提:在JSP文件中,有时需要将读取的共享数据进行一番运算之后,再将运算结果写入到响应体中。
2)运算表达式:
在这里插入图片描述
十四. EL表达式提供内置对象
1.param
1)命令格式:${param.请求参数名}
2)命令作用:通过param读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。
3)如发送请求:Http://localhost:8080/myweb/index.jsp?username=mike&password=123,则JSP中可将请求参数内容写入到响应体:

${param.username}
${param.password}

2.paramValues
1)命令格式:${paramValues.请求参数名[下标]}
2)命令作用:如果浏览器发送的请求参数是一个请求参数关联多个值,此时可以通过paramValues读取请求参数下指定位置的值,并写入到响应体。
3)如发送请求:Http://localhost:8080/myweb/index2.jsp?deptNo=10&deptNo=20&deptNo=30,则JSP中可将请求参数内容写入到响应体:

第一个部门编号:${paramValues.deptNo[0]}<br/>
第二个部门编号:${paramValues.deptNo[1]}<br/>
第三个部门编号:${paramValues.deptNo[2]}<br/>

十五. EL表达式常见异常
javax.el.PropertyNotFoundException:在对象中没有找到指定属性。

————————————————————————————————————————————————————————————
【扩展】
1.Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容。但是它们之间有着微小的差别,总结如下:
       Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,但是表单元素在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)
2.只有在登录的servlet中使用request.getSession(),其他servlet中使用request.getSession(false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值