天天看点

[Java 基础]-- jstl表达式介绍

JSP java server page动态网页
 jsp: Servlet升级产品
 动态网页(Servlet添加html)
 jsp: html标签中添加java代码


 1.命名   *.jsp
 2.jsp中通过特定格式添加java代码
 3.开发部署后,不要在web.xml配置
 4.部署位置:应用下除了WEB-INF以外的任意位置(同HTML位置)
 **WEB-INF 用户通过浏览器为无法直接访问
 访问:同HTML
 **jsp修改后不须要重新部署

 脚本元素:(脚本:可执行的代码片段)
 表达式脚本 <%=java表达式%>将其中的内容输出给浏览器

 声明脚本 <%!方法,变量%>声明方法和成员变量

 普通脚本 <% 普通java代码%>service方法中的 流程控制代码

 作业:
 输出一个9*9乘法表(不调错)  奇数行红色, 偶数行为蓝色
 -------------------------------------------------------------
 request.getRemoteAddr(); //客户端ip
 request.getRemoteHost(); //主机名
 ---------------------------------------------------------------
 JSP运行原理: (jsp的本质是一个Servlet程序)
 1.浏览器通过url访问到tomcat中的jsp文件
 2.tomcat将jsp文件翻译成servlet程序   .java文件
 3.tomcat 翻译后的.java编译成.class文件
 4.将.class创建对应的Servlet实例对象,执行service方法
 脚本元素的翻译规则:
 表达式脚本-----翻译成  out.println(表达式内容);
 声明脚本------翻译成Servlet程序中的成员方法,成员变量
 普通脚本-----翻译成servlet中service方法中的java代码
 **普通html标签-----out.println(标签内容);


 指令元素

 页面指令:描述当前jsp文件(程序)的特征
 <%@page 属性=“值” 属性=“值” %>

 pageEncoding="UTF-8"规定jsp翻译servlet程序是,tomcat根据什么编码读取jsp文件
 contentType="text/html;charset=UTF-8"最终的页面由浏览器解析时使用的编码格式
 import="java.util.*,java.io.*"导入当前页面所使用的java api的包结构
 session="true"|false
 **servlet中只有第一次访问时执行request.getSession();  才会创建session对象(懒汉式)
 true: 访问时直接创建session(饿汉式)
 false: 不会自动创建session


 isErrorPage="true"|false 决定当前页面是否是错误页面
 **当值为true当前页面会有隐含对象  exception
 errorPage="错误页面的url-pattern"
 **当当前页面有异常时,会跳转至,errorPage所指定的页面

 包含指令
 <%@include file='被包含的url-pattern'%>
 **包含的是jsp文件源代码
 应用:项目中需要引入大量的外部css样式,js文件。.需要使用时,包含已经引入css/js 内容的jsp文件即可
 includeA.jsp(包含B)↘
 all.jsp----all_jsp.java----all_jsp.class--执行
 includeB.jsp ↗

 标签库指令:
 <%@taglib uri='外部标签库的地址' prefix='前缀'%>




 动作元素:
 标签是成对出现
 <jsp:include page="">
 <jsp:param value="chengcheng" name="username"/>
 </jsp:include>
 //相当于servlet   request.getRequestDispatcher().include(req,resp);
 是在响应输出时,将数据包含 并响应给浏览器

 includeA.jsp(包含B)---- aaa.java ----aaa.class---响应数据↘
 --->浏览器
 includeB.jsp ---- bbb.java ----bbb.class---响应数据↗
 【了解】
 <jsp:forward page=''>
 <jsp:param name='' value=''/>
 </jsp:forward>
 //相当于servlet   request.getRequestDispatcher().forward(req,resp);
 **ServletA   forward  ---ServletB:可以通过request作用域传值
 **param传值:相当于URL?name=value
 =================================================================
 jsp 9大内置对象(隐含对象)
 **内置对象是jsp翻译后的servlet程序中service方法中的局部变量
 **内置对象不能放在<%!声明脚本中%>
 内置对象 类型
 request HttpServletRequest
 --------------------------
 通过URL?key=value  中文
 username = URLEncoder.encode(中文值, "UTF-8");
 --------------------------
 response HttpServletResponse

 session HttpSession

 application ServletContext
 (应用级作用域:生命周期最长. web.xml在内存中的表现)
 config ServletConfig (当前jsp所对应的servlet程序的信息)

 page this

 out JspWriter

 exception Throwable
 ****只有当jsp中有 isErrorPage="true"

 【pageContext】 PageContext

 1.作用域:生命周期最短(只有当前页面能够使用)
 pageContext.setAttribute("name",Object);//存
 pageContext.getAttribute("name");//取
 2.管理所有的作用域:
 pageContext.getAttribute("name", int 作用域);
 int:
 pageContext.REQUEST_SCOPE
 pageContext.SESSION_SCOPE
 pageContext.APPLICATION_SCOPE
 3.查找所有作用域中的值
 pageContext.findAttribute("name");
 **在所有的作用域中查找名字为name的值.
 **查找顺序从pageCOntext--->application
 **返回找到的第一个名字匹配的值
 4.pageContext可以获得其他8个隐含对象
 pageContext.getRequest();--request
 pageContext.getSession();--session
 pageContext.getServletContext();--application
 .getServletConfig()--config
 .getResponse()--response
 .getPage() --page
 .getOut() --out
 .getException()--exception
 =========================================================================
 Servlet+JSP开发模式

 ----查询所有联系人:
 1.用户:
 点击(查询所有联系人)-------所有联系人(页面)
 2.程序:
 ①完成用户看到的内容
 ②数据内容从哪里来

 LoginSuccessView.jsp----showAllPersonAction --showAllPersonView.jsp
 <a href=''>查询所有..</a>查询persons信息    展示所有的Person信息
 调用service
 跳转forward

 //JSP页面只作展示
 //查询数据,处理数据,业务功能..(Action)
 //所有jsp页面的数据全部有某个Servlet程序传递给jsp(xxxxAction)
 //所有href和action  值  URI(包含项目名,动态获取)
 3.实现:
 Servlet
 收集数据
 调用service
 //传递数据
 负责跳转
 JSP
 展示数据
 问题:
 1.尽量不要jsp--->jsp
 2.JSP只展示,ServletAction做业务处理
 3.href='URI'; action="URI"
 --------------
 用户:
 首页 -----显示页面
 查询所有商品 显示所有商品信息
 程序:
 1.productIndex.jsp--------------QueryAllProductAction---------------showAllProductView.jsp
 <a href=''></a>调用service查询所有商品 products
 forward跳转

 2.写业务对象ProductService
 public List<Product> queryAllProducts();
 3.写数据访问对象ProductDAO
 public List<Product> selectAllProducts();
 4.JDBCUtil复制; Entity:Product
 5.创建Product表
 6.ojdbc5.jar导入环境
 --------------------------------------------
 EL 表达式: expression Language表达式语言
 作用:将表达式的内容输出类浏览器
 **替换jsp中所有的表达式脚本
 书写格式:${表达式 expression}

 1.
 运算表达式
 数学运算 +- * / %
 逻辑运算 ==!= < <= > >=
 &&  ||  !
 判断是否为null ${empty 变量}
 **EL中数据弱类型
 ${10/4} ----2.5
 ${1=="1"}-----true
 2.访问请求参数中的数据
 请求参数:表单|URL?key=value
 ${param.请求参数的名字}=== <%=request.getParameter("请求参数名字")%>
 3.获得作用域中的值
 ${pageScope.命名属性名}--------<%=pageContext.getAttribute("命名属性名")%>
 ${requestScope.命名属性名}------<%=request.getAttribute("命名属性")%>
 ${sessionScope.命名属性名}
 ${applicationScope.命名属性名}


 4.访问cookie
 <%
 Cookie[] cs = request.getCookies();
 for(Cookie c:cs){
 if(c.getName().equals("JSESSIONID")){
 out.println(c.getValue());
 }
 }
 %>
 ${cookie.JESSIONID.value}
 5.访问对象:数组:ListMap
 访问对象属性
 ${对象.属性名}
 数组:${array[下标]}

 list集合:${list[下标]}

 map:${map.key}--获得map的值
 ***map的key是String
 ***map的key(首字母不能为数字)
 6.
 EL内置对象
 param pageScoperequestScope sessionScopeapplicationScope
 cookie pageContext
 ${pageContext.request.contextPath}------/应用名
 ====================================================================
 作业:
 将通讯录中所有jsp表达式脚本修改为EL表达式

 商品管理系统:添加商品功能