JSP与EL表达式

JSP:

没有JSP的时候,JAVA服务端是通过Servlet通过向客户端输出字符的一个流--(Writer还或者Printer)--(通过resonse.getWriter()或response.getPrinter()获取)一行一行地输出html代码来展示页面的,页面为了解决servlet在展示页面繁琐,sun公司开发了JSP技术。JSP JAVA Server Page 由于JSP在服务端被请求时会被翻译成JAVA(就是一个Servlet),所以本质上JSP就是Servlet。

JSP工作原理:

1. 当服务器收到 .jsp的请求时,会指派一个名为JspBase的Servlet类出来处理这个请求。
2. JspBase把jsp页面,翻译成 java文件。java文件中就将html内容通过流写到客户端
3. java虚拟机编译java文件 成 class文件 
4. 从JspServlet 移交请求给我们刚刚编译好的class文件 。

5. 由jsp转化成的那个class执行此次请求,并且输出数据内容到页面上。

--因此解析了为什么JSP本质上就是一个Servlet

JSP与EL表达式

1、JSP三大指令:
1page指令:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
定义JSP文件中的全局属性。


2、include指令:<%@ inlucde file="">
用于引入其他的页面,是做静态包含--只有包含页面才翻译成.Java文件,被包含的页面不翻译成Java文件,直接将被包含文件的代码拷贝到包含文件中,然后由包含文件翻译成的java代码一起输出


3、taglib指令:<%@taglib prefix="" uri="" %>
用于引入标签库(例如jstl标签库)。


JSP九大内置对象:
1、request----HttpServletRequest----- 域对象
2、response----HttpServletResponse----响应对象
3、session----HttpSession----域对象
4、out----JspWriter----字符流-用于向客户端写数据
5、exception----Throwable----如果IsErroPage为true才能使用
6、application----ServletContext----域对象----相当于Servlet里面的ServletContext
7、config----ServletConfig---相当于Servlet里面的ServletConfig
8、page----Object(this)----指当前页面
9、pageContext----PageContext----域对象----当前页面的上下文


JSP四大域对象
ServletContext----域对象
session----HttpSession----域对象
request----HttpServletRequest----- 域对象
PageContext----域对象
{
1.作为域对象存取值(当前页面) pageContext作为域对象用处不大
​ setAttribute(String name,Object obj);
​ getAttribute(String name);
​ removeAttribue(String name);
2.代替其它3个域对象存值
​ setAttribute(String name,Object obj, int scope);
3.获得其它8个内置对象(EL中会使用到)
​ getRequest(), getSession()....
4.便捷获得域(四个)对象的值 
​ pageContext.findAttribute(String name);依次从pageContext,request,session,application获取值,
​ 如果找到,终止查找,立即把这个值返回
​ 如果没有找到,返回null 

}

JSP六个动作标签
(转发到具体页面)
jsp:forward
jsp:param(配合前面的forward来使用 ,表示跳转过去的时候,带参数过去。)
<!-- 跳转请求转发过去的时候,带一点参数过去 -->
<jsp:forward page="/second.jsp">
<jsp:param name="username" value="admin" />
</jsp:forwjsp:forwardard>

-------------------------------------------------

也可以这么写<jsp:forward page="/second.jsp?username=aobama"></jsp:forward>


jsp:include
使用方式如下:<jsp:include page="要包含的页面路径"/>
动态包含
先把被包含的页面,做编译,然后得到输出的结果, 最后跟我们本来的页面结果一起输出。 
不管是包含还是被包含,都被翻译成java文件。

jsp:useBean创建一个对象
使用方式如下:<jsp:useBean id="对象名" class="类的全路径名"/>
jsp:setProperty给指定的对象属性赋值
使用方式如下:<jsp:setProperty name="对象名" property="属性名" value="属性值"/>
jsp:getProperty取出指定对象的属性值
使用方式如下:<jsp:getProperty name="对象名" property="属性名"/>


如何让进入首页的时候就发起请求:

使用一个jsp页面作为桥梁,在里面写入Jsp脚本重定向到首页,还可以在路径中加入请求参数


EL表达式(用来在页面上获取域中的数据的一种表达式语言)JSP2.0之后内置在JSP里面

目的:为了使JSP写起来更加简单。(代替脚本 <% %>),语法:${EL表达式 }
EL表达式的作用:
获取域对象中的数据
{
1获取简单数据类型数据:语法:${pageScope|requestScope|sessionScope|applicationScope.属性名}; 
快捷写法:${属性名 }
${属性名 }:依次从pageScope,requestScope|sessionScope|applicationScope中查找指定的属性
​ 若找到,立即返回,且结束该次查找
​ 若找不到返回""
2获取数组中的数据:语法:${数组属性名[index]};数组属性名就是存入域对象里面的key
3获取List里的数据: 语法:${list属性名[index]};list属性名就是存入域对象里面的key
4获取Map里的数据:语法:${属性名.键},map属性名就是存入域对象里面的key
5获取Bean对象里的属性值: 语法:${bean的属性名(也就是存入的key值).javabean属性}
}

非空判断:语法: ${empyt 属性名};属性名 就是域对象里面的key值,${not empyt 属性名};属性名 就是域对象里面的key值

四个Scope,可以使用便捷获取域对象中存放数据的方法代替
pageScope,requestScope,sessionScope,applicationScope

获取请求参数参数相关的 
param.参数名 , 作用相当于request.getParameter() 
paramValues,作用相当于request.getParameterValues(name) 

获取请求头信息相关的
header
headerValues

全局初始化参数相关 ,相当于servletContext.getInitParameter()
initParam;

cookie
​ 获取的也是一个map集合
​ map<String cookie的名称,Cookie 对象>
​ 之前
​ Cookie c=new Cookie("lastTime","123123213");
​ response.addCookie(c);
​ 相当于将c放入了map中
​ map.put("lastTime",c);
​ 获取值:​

​ ${cookie.lastTime.value} 

pageContext:相当于jsp里面的pageContext对象. 
​ jsp里面: pageContext.getRequest(); //获得request对象
​ request.getContextPath(); //动态获得项目名
${pageContext.request.contextPath}  // 在JSP页面动态获得项目名
${pageContext.request.contextPath}:在jsp页面中动态的获取项目路径

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

jsp中的九个内置对象(直接在jsp中的<%%>能写出来的对象)                              
application (application 对象可将信息保存在服务器中,直到服务器关闭)    
session  (是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据)                                                                                                            
request (request对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等) 

pageContext (pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象) 

out输出流out对象是javax.servlet.jsp.jspWriter接口的实现类,通过调用pageContext.getOut()方法可以获取out对象
responseresponse 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效
exceptionexception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用
configconfig 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象
pagepage 对象代表JSP本身,只有在JSP页面内才是合法的


使用EL表达式获取WEB开发的11个对象
applicationScope
sessionScope
requestScope
pageScope

param和paramValues
header和headerValues
cookie
initParam
pageContext