11.1-jsp_el课程笔记
学习笔记之十JSP
JSP学习笔记Java相关课程系列笔记之十笔记内容说明JSP(程祖红老师主讲,占笔记内容100%);目录一、JSP基础 (1)1.1什么是JSP (1)1.2为什么要使用JSP (1)1.3 JSP与Servlet的关系 (1)1.4如何写一个JSP文件 (1)1.5 JSP是如何运行的 (1)1.6隐含对象 (2)1.7指令 (2)1.8 JSP注释 (3)1.9案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (3)二、JSP标签和EL表达式 (4)2.1什么是JSP标签 (4)2.2 JSTL及其使用 (4)2.3什么是EL表达式 (4)2.4 EL表达式的使用 (4)三、JSTL中的几个核心标签 (7)3.1 if (7)3.2 choose (7)3.3 forEach (7)3.4 url (8)3.5 set (8)3.6 remove (8)3.7 catch (8)3.8 import (8)3.9 redirect (8)3.10 out (8)3.11 JSP标签是如何运行的 (8)3.12案例:将员工列表中的Java代码改为JSP标签,并添加分页 (9)四、自定义标签 (10)4.1如何写一个自定义标签 (10)4.2 JavaEE5.0中,如何使用EL表达式和JSTL (10)4.3案例:自定义标签 (10)4.4案例:修改之前员工列表中的日期显示 (11)五、MVC (13)5.1什么是MVC (13)5.2使用MVC的目的 (13)5.3如何使用MVC来开发一个Web应用程序(JavaEE) (13)5.4 MVC的优缺点 (13)5.5案例:简易贷款(贷款数小于余额数*10) (13)5.6修改5.5案例,使用户无法直接访问view.jsp页面 (15)1一、JSP基础1.1什么是JSPJSP(Java Server Page)是Java服务器端动态页面技术。
JSP复习笔记
JSP复习笔记一、内容汇总1. jsp简介: jsp是动态的页面语言,是以Java为主的跨平台web开发语言.一般jsp代码直接内嵌在html中,即jsp只是简单的将Java放到html网页中去而已,html可以直接改为jsp.jsp原理:jsp程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行;只有当客户端第一次请求JSP时,才需要将其转换并编译.2. .jsp运行环境: jsp是动态的代码,必须有服务器来解析这些代码,于是用到了Tomcat这款免费服务器.3. .jsp基本语法: 1)标记:<%程序代码区%> 2)表达式:<%=...%> 3) 3)注释4)JSP声明:<%! ...%>4. Dircetive(指令)格式:<%@ 指令属性="属性值"%>指令的设定不能重复制定(除了import外)常用的指令有:import、contentType、errorpage、page、include常用指令的使用方法5. JSP编程的内置对象(也叫隐藏变量)jsp页面中隐含了一些变量,这些你可以直接使用,不需要关心这些变量是如何创建出来的.常用的隐含变量包括:request:请求作用域response:请求响应session:会话作用域application:应用作用域out:输出注意:隐含变量只能在<%%>标记内使用6. jsp内置作用域之间的区别作用域的作用:用来临时存储一个值作用域内可以通过setAttribute来存储一个值,也可以通过getAttribute来提取一个值.jsp中的四个作用域按范围从小到大排列为: pageContext<request<session<application pageContext:只在当前页面有效,可以使用这个对象来管理其他的隐含对象request:表示在一个请求的作用域里面有效的.pageContext保存的值,只在当前页面有效,超出本页面均无效, 在以下的两种情况是有效的<jsp:include>和<jsp:forward>session作用域:表示在一个会话范围内有效,有两种情况会话内容会自动失效1).页面关闭,session内值没有了2).超时(通过session-timeout可以设置)3).手工注销sessionsession.invalidate();application作用域:代表在服务器的范围内是有效的,如果服务器关闭,则作用域内存储的任何值都将失效7. 参数传递1)如果是超链接,可以用以下方式:<a href="P.jsp?username=zhangshan&pwd=123456&age=25"> 链接</a>2)如果是form表示a.可显示的控件<input type="text" name="username">b.不需要显示在页面上<input type="hidden" name="pwd" value="<%=pwd%>">3)如果是jsp的include和forward标签<jsp:include flush="true" page="*.jsp?username=zhangsan&pwd=123456"><jsp:param name="age" value="28"></jsp:include>4)如果是JavaScript方式<script type="text/javascript">function demo(){var v = document.all('username').value;location.replace("*.jsp?username="+v+"&age=22");}</script><input type="text" name="username"><br><input type="button" value="点击"onclick="location.href='*.jsp?pwd=123456'"><br><input type="button" value="replace点击"onclick="location.replace('V.jsp?pwd=123456789')"><br><input type="button" value="动态取值" onclick="demo()">8. 数据提交方法提交方式分为get和post两种区别:A.post提交方式相对而言,比较安全;B.get只是适合于小数据的传递,也就是说,只有post才能传递大数据,比如在文件上传时,就必须将method指定为post.9. 从request作用域提取所有的参数名称方法:Enumeration<String> e= request.getParameterNames();while(e.hasMoreElements()){String str = e.nextElement();out.println(str+"="+request.getParameter(str));}10. 从request作用域提取多个值使用request作用域内的getParameterValues方法,请注意:选择项的名字必须相同,否则无法同时得到多个值<form action="*.jsp">个人爱好:<br><input type="checkbox" name="love" value="sport">体育<BR><input type="checkbox" name="love" value="finance">财经<BR><input type="checkbox" name="love" value="news">新闻<BR><input type="radio" name="sex" value="male" checked>男<input type="radio" name="sex" value="female">女<input type="submit"></form>//得到多个值String[] loves = request.getParameterValues("love");for(String str:loves){out.println(str);}for(int i=0,i < loves.length(),i++){String item=items.get(i);}String strSex = request.getParameter("sex");out.println(strSex);11. 请求分发器RequestDispatcherRequestDispatcher类表示一个请求的分发器,其效果等同于jsp:forward标签方法: request.getRequestDispatcher("P.jsp").forward(request,response);和jsp:forward相同的是,该分发器转向后的request和源页面中的request为同一个.二、典型问题1. JSP如何处理HTML FORM中的数据?通过内置的request对象即可,如下:<%String item = request.getParameter("item");int howMany = new Integer(request.getParameter("units")).intValue();%>2. JSP能进行递归调用吗?当然可以,如对form的提交给本页3. 在JSP如何包含一个静态文件?静态包含如下:<%@ include file="copyright.html" %>动态包含如下:<jsp:include page="copyright.html" />在JSP中可以使用如下方式包含纯HTML:<!--#include file="data.inc"-->4. 能象调用子程序一样调用JSP吗?当然可以,用<jsp:include page="relativeURL" flush="true"/>5. 在JSP中如何使用注释?主要有四中方法:1。
jsp学习笔记初级
MVC:JSP + +Java:复习java基础知识Jsp:JSP、PHP、 三门技术被称为Web 后端开发的3P 技术,其中JSP 依托J2EE 平台更是Web 开发领域的一枝独秀。
学好JSP,是进入J2EE 企业开发的第一步。
通过本阶段内容的学习,你将能够搭建JSP 的开发环境,了解JSP 的基本语法及内部对象的使用。
Servlet:Servlet 是Server Applet 的缩写,也称为服务端小程序。
Servlet 技术一直处于不断的发展及进步之中,现在已经成为很多框架的技术基础,比如Spring、Struts2 等。
通过本阶段课程的学习,你将了解Servlet的运行原理,Servlet 过滤器的知识并能编写出相对复杂的Java Web 程序。
Javabean:JavaBeans是一个可重复使用的软件组件JavaBeans是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beans。
JSP页面应当将数据的处理过程指派给一个或几个beans来完成,我们只需在JSP页面中调用这个beans即可,从而有效的分离的静态工作部分和动态工作部分JDBC:JDBC 是Java 对关系型数据库进行访问的最主要的API,是Java 数据库编程的技术基础。
通过本阶段内容的学习,你能够掌握数据库的基本知识及JDBC 技术的基本原理,并能够使用JDBC编写出对数据库进行增删改查的简单程序Spring:Spring 是一个开源框架,也是一个基于控制反转、依赖注入的轻量级容器,它的出现大大简化了传统的J2EE 开发模式。
Spring 的主要优势之一就是其分层架构,该架构允许使用者自主选择任意件,同时为J2EE 应用程序开发提供集成框架。
现在,Spring 已经成为J2EE 企业开发中的标准配置。
Struts2:Spring MVC是一种基于Java的轻量级Web框架,它使用了MVC架构模式的思想,将web 层进行职责解耦,用来简化日常开发。
JavaWeb——JSP表达式语言(EL)
JavaWeb——JSP表达式语⾔(EL)1、JSP表达式语⾔(EL)⽤于在jsp从访问存储在JavaBean中的数据,例如User ID: ${erId}<br /> 这⾥的${erId}就是JSP EL表达式,效果就是:User ID: 19358 19358是userId的数据2、语法⽴即执⾏ ⽴即执⾏EL表达式将在页⾯渲染的时候,被JSP引擎解析和执⾏。
这就意味着EL表达式将在JSP引擎中发现它,并在继续执⾏其他页⾯部分之前执⾏它,就类似c语⾔中的宏那样,下⾯的例⼦中EL表达式将会⽴即执⾏,其中expr是⼀个EL表达式${expr} 美元符号和两个花括号定义了EL表达式的边界,在括号中的所有的内容都会作为EL表达式执⾏。
所以如果我们需要使⽤美元符号就需要进⾏转义延迟执⾏ 延迟执⾏EL表达式是统⼀表达式的⼀部分主要⽤于满⾜JavaServer Faces的需要。
下⾯的例⼦将是⼀个延迟执⾏的EL表达式#{expr}3、添加EL表达式 EL表达式可以直接⽤在JSP的任何位置,除了少数特殊情况。
⾸先不能⽤在任何指令中,因为编译JSP时,指令将会被执⾏,但是EL表达式是在渲染JSP时执⾏,所以这⾥的EL表达式是⽆法正常⼯作的。
另外,JSP声明<%!%>、脚本<%%>或者表达式<%=%>中的EL表达式也是⽆效的。
除此之外,EL表达式可以添加在任意的位置简单⽂本中User ID: ${expr}标准的HTML标签中<input type="text" name="something" value="${expr}"/>JSP标签中<c:url value ="/something/${expr}/${expr}"/>4、基础操作符操作符描述.访问⼀个Bean属性或者⼀个映射条⽬[]访问⼀个数组或者链表的元素( )组织⼀个⼦表达式以改变优先级+加-减或负*乘/ or div除% or mod取模== or eq是否相等!= or ne是否不等< or lt是否⼩于> or gt是否⼤于<= or le是否⼩于等于>= or ge是否⼤于等于&& or and与&& or and与|| or or或! or not取反empty是否空值5、对象属性和⽅法 EL表达式通过.进⾏JavaBean中属性的简化语法,假设现在有⼀个类user,有名为userId的类${erId} 如果使⽤这个表达式来访问userId字段,这是⾏不通的因为这⾥的.实际寻找的是userId属性⽽⾮字段,也就是说将调⽤的是user.getuserId()类似的JavaBean标准访问⽅法。
EL笔记
EL表达式语言表达式语言的英文为Expression Language,简称EL。
它是JSP2.0中引入的一个新内容。
通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。
EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web 应用的新途径。
目录1.1EL表达式语言的基础 (1)1.2禁用EL (1)1.2.1使用斜杠“”符号: (1)1.2.2使用page指令: (1)1.2.3在web.xml文件中配置<el-ignored>元素 (1)1.3保留的关键字 (2)1.4EL的运算符及优先级 (2)1.4.1通过EL访问数据 (2)1.4.2在EL中进行算术运算 (2)1.4.3在EL中判断对象是否为空 (3)1.4.4在EL中进行逻辑关系运算 (3)1.4.5在EL中进行条件运算 (3)1.5EL的隐含对象 (4)1.5.1页面上下文对象 (4)1.5.2访问作用域范围的隐含对象 (4)1.5.3访问环境信息的隐含对象 (4)1.6定义和使用EL函数 (5)1.1EL表达式语言的基础语法格式为:${expression}参数说明:expression:用于指定要输出的内容,可以是字符串,也可以是运算符组成的表达式。
技巧1:由于EL表达式的语法以“${”开头,所以如果在JSP页面中要显示“${”字符串,必须在前面加上“\”符号,或者写成“${‘${‘}”,也就是用表达式来输出“${”符号。
EL特点:1.语言的语法简单,使用方便;2.EL可以与JSTL结合使用,也可以与JavaScript语句结合使用;3.EL中会自动进行类型转换;4.EL不仅可以访问一般变量,也可以访问JavaBean中的属性以及嵌套属性和集合对象;5.在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的6.集成对象,通过它可以访问其他内置对象);7.在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity,而不返回错误;8.在EL中可以访问JSP的作用域(request、session、application以及page);9.扩展函数可以与Java类的静态方法进行映射。
jsp学习笔记
application:在整个服务器上保存,所有用户都可以使用。
(1)page属性范围(pageContext)
page属性范围(使用pageContext表示,但是一般习惯于将这种范围称为page范围)表示将一个属性设置在本页上,跳转之后无法取得。
<%@ page language="java" contentType="application/msword;charset=GBK" %>
<center>
<h1>欢迎大家光临该网站</h1>
</center>
3.范例:指定下载的word文件的名称为demo.doc
<%@ page language="java" contentType="application/msword; charset=GBK" %>
一、JSP注释
在JSP中支持两种语法操作,一种是显示注释,这种注释客户端是允许看见的;另外一种是隐式注释,此种注释客户端是无法看见的。
显示注释语法:
<!-- 注释内容 -->
隐式注释语法:
格式一://注释,单行注释
格式二:/* 注释 */,多行注释
范例:指定JSP文件编码
<%@ page language="java" contentType="text/html" pageEncoding="GBK" %>
java学习笔记,jsp笔记,EL表达式
1.JSP的由来在前面的学习过程中,页面相关的内容主要是通过html文件完成,而Servlet技术主要是在获取浏览器(客户端)提交的请求数据,或者是给浏览器(客户端)响应数据。
在实际企业开发中,前端的页面(html文件)相关设计和美化工作都是前端工程师(美工)负责,后台的Java程序是由Java开发人员完成,前端给出的页面,不能满足后台开发人员的需求,这时就需要后台开发人员在Servlet中使用response获取输出流,拼接前端页面需要的html片段,这样会导致Servlet中的Java代码十分的臃肿,而且不利于前端人员维护页面。
导致前后人员之间合作出现问题。
针对这些问题,sun公司设计出JSP技术来解决。
JSP技术:Java Server Page。
它的主要功能:可以直接在JSP文件中书写html代码,但是JSP文件最后会被翻译成对应的Java代码。
这个翻译工作不需要开发人员做任何的事情,而直接由Java对应的机制完成。
这样就可以保证前端工程师可以直接针对JSP文件进行页面设计和修改,后台人员可以在JSP页面中添加对应的业务程序。
后台人员不用再在Servlet 中通过response输出大量的html片段。
2.JSP快速入门可以直接使用Myeclipse的模版创建JSP文件:eclipse修改JSP的默认编码表:新建jsp文件:JSP页面代码:发布项目到tomcat服务器上,打开浏览器访问:看到如下效果,恭喜第一个JSP文件搞定。
3.JSP三种脚本元素既然在jsp中可以嵌入java代码,必然要解决几个问题:如何在jsp中定义一个变量,定义一个内部类?如何在jsp中使用定义好的变量?如何在jsp中使用循环?如何在循环中嵌入html代码?jsp为什么?原理是什么?在JSP中,可以书写html、css、js、dom、java代码。
注意:一般在公司开发不要在JSP文件嵌入大量的JAVA代码,后期JSP仅仅是用来显示Servlet 处理完的数据的。
JSP-EL表达式的用法
/seseou/qvod/list_2_14.html1.语法结构${expression}2.[]与 . 运算符EL 提供 . 和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 ? 等并非字母或数字的符号,就一定要使用 []。
例如:${user.My-Name}应当改为${user["My-Name"] }如果要动态取值时,就可以用[]来做,而 . 无法做到动态取值。
例如:${er[data]}中data 是一个变量. 可以完成 ${} 的取值,name是user的一个属性。
3.变量EL存取变量数据的方法很简单,例如:${ername},它的意思是取出某一范围中名称为username的变量。
如果我们没有指定哪一个范围的username,那么它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称Page ————> pageScopeRequest ————> requestScopeSession ————> sessionScopeApplication ——> applicationScope4、EL隐含对象与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope;它们基本上就和JSP的pageContext、request、session和application一样;在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:session.getAttribute("username") 取得username的值,在EL中则使用下列方法${ername}param 和 paramValues ,它们是EL中比较特别的隐含对象:例如我们要取得用户的请求参数时,可以利用下列方法:request.getParameter(String name)request.getParameterValues(String name)在EL中则可以使用param和paramValues两者来取得数据。
jsp课堂笔记
一个jsp中可以有多个脚本片段,多个脚本片段之间可以互相访问.
一个jsp脚本片段中的java代码可以是不完整的,但是所有脚本片段组合在一起必须是完整的.
(4)JSP声明:<%! 若干java语句%> 在翻译过来的Servlet中会放置在和service方法同级的位置成为了类的一个成员.
!!session='true|false' 设置翻译过来的servlet中是否有自动生成session,如果当前jsp用不到session,可以设置为false,防止乱生成session造成空间浪费
!!errorpage='' 设置友好错误提示页面,当当前jsp页面抛出异常时,转发到友好错误提示页面做提示
public ng.Object getAttribute(ng.String name,int scope)
public void removeAttribute(ng.String name,int scope)
PageContext.APPLICATION_SCOPE
<exception-type>ng.Throwable</exception-type>
<location>/error/500.jsp</location>
</error-page>
!isErrorPage='' 默认值是false ,可以在错误提示页面中设置为true,则在翻译过来的Servlet中会多出一个exception的对象,这个对象代表的就是前一个页面抛出的异常
JSP课堂笔记
JSP详解JSP JSP (1)1、JSP (2)2、怎么写JSP (2)3、JSP的组成 (2)1)、HTML (2)2)、JAVA代码 (2)3)、指令 (2)4)、隐含对象 (3)5)、活动元素(A CTION E LEMENT) (3)6)、注释 (4)4、.JSP文件转换成.JAVA文件 (4)5、转发 (4)1)、什么是转发 (4)2)、编程 (5)3)、转发要注意的问题 (5)4)、转发的特点 (5)5)、转发与重定向的区别 (5)6、路径问题 (5)1)、相对/绝对路径 (6)2)、怎样写绝对路径 (6)7、JSTL与EL表达式 (6)1)、JSTL是什么 (6)2)、标签是什么 (6)3)、EL表达式是什么 (6)4)、EL表达式的基本语法 (6)A、访问bean的属性 (6)B、访问请求参数 (7)C、计算表达式的值 (7)5)、JSTL核心标签的使用 (7)8、EL函数 (9)1)、EL函数 (9)2)、怎么使用 (9)3)、自定义EL函数 (9)4)、自定义标签 (9)JSP详解1、jspjava server page(java服务器端页面技术)sun公司制定的一种服务器端动态页面生成技术规范。
因为直接使用servlet生成动态页面过于繁琐,而且难以维护,所以,jsp出现了。
2、怎么写JSP只需要写一个以.jsp为后缀的文件,文件包含的内容,主要是html以及少量的java代码。
Jsp文件不需要去编译,当请求到达服务器,由服务器将.jsp文件转换成.java 类(该java类就是servlet)。
然后执行servlet的service()方法(当然,在执行之前,会先编译,然后构成相应的实例)。
3、jsp的组成1)、htmlhtml(包括html标记、文本、css样式、javascript),直接写在.jsp的文件里就行了。
2)、java代码A、java代码片段:语法:<%java代码%>B、jsp表达式语法:<%=java代码%>C、jsp声明语法:<%! java代码%>3)、指令JSP引擎文件(容器中的一个特定模块)负责将.jsp文件转换成.java文件。
JSTL标签和EL表达式使用笔记
JSTL标签和EL表达式使用笔记一般在jsp页面的头部都会应用一些标签库,一般就用下面这几个:<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="/jsp/jstl/core"%><%@ taglib prefix="fmt" uri="/jsp/jstl/fmt"%><%@ taglib prefix="fn" uri="/jsp/jstl/functions"%>✧为了避免每个页面都写一次,可以把这些写在一个jsp文件里面,然后每个要用到这些标签的页面应用下就可以了。
✧<%@include file="../common/head.jsp"%>EL表达式截取字符串(使用JSTL) fn标签<%@ taglib uri="/jsp/jstl/functions" prefix="fn"%>上面的uri 根据你的实际情况定。
${fn:substring("你要截取的字符串"),beginIndex,endIndex}<%@ taglib prefix="fn" uri="/jsp/jstl/functions" %>下面是JSTL中自带的方法列表以及其描述函数名函数说明使用举例fn:contains 判定字符串是否包含另外一个字符串<c:if test="${fn:contains(name, searchString)}">fn:containsIgnoreCase 判定字符串是否包含另外一个字符串(大小写无关) <c:if test="${fn:containsIgnoreCase(name, searchString)}">fn:endsWith 判定字符串是否以另外字符串结束<c:if test="${fn:endsWith(filename, ".txt")}">fn:escapeXml 把一些字符转成XML表示,例如<字符应该转为< ${fn:escapeXml(param:info)}fn:indexOf 子字符串在母字符串中出现的位置${fn:indexOf(name, "-")}fn:join 将数组中的数据联合成一个新字符串,并使用指定字符格开${fn:join(array, ";")}fn:length 获取字符串的长度,或者数组的大小${fn:length(shoppingCart.products)}fn:replace 替换字符串中指定的字符${fn:replace(text, "-", "•")}fn:split 把字符串按照指定字符切分${fn:split(customerNames, ";")}fn:startsWith 判定字符串是否以某个子串开始<c:if test="${fn:startsWith(product.id, "100-")}">fn:substring 获取子串${fn:substring(zip, 6, -1)}fn:substringAfter 获取从某个字符所在位置开始的子串${fn:substringAfter(zip, "-")}fn:substringBefore 获取从开始到某个字符所在位置的子串${fn:substringBefore(zip, "-")}fn:toLowerCase 转为小写${fn.toLowerCase()}fn:toUpperCase 转为大写字符${fn.UpperCase()}fn:trim 去除字符串前后的空格${fn.trim(name)}函数描述包含fn:contains(string, substring)假如参数string中包含参数substring,返回truefn:containsIgnoreCase(string, substring)假如参数string中包含参数substring(忽略大小写),返回truefn:startsWith(string, prefix)假如参数string以参数prefix开头,返回truefn:endsWith(string, suffix)假如参数string 以参数suffix结尾,返回true组装/拆分fn:join(array, separator)将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
jsp精简笔记
从该指令处停止当前页面的继续执行,而转向其它的一个JSP 页面。
13、plugin动作标签:指示JSP 页面加载java plugin,该插件由客户负责下载,并使用该插件来运行Java applet。
属性:language="java" session="true" buffer="8kb" auotFlush="true" isThreadSafe="true" info="we are students"--getServletInfo();
默认import:" ng.*"、 "javax.servlet.*" 、"javax.servlet.jsp.*"、"javax.servlet.http.*"
(2)获取文件的属性
1. public String getName():获取文件的名字。
2. public boolean canRead():判断文件是否是可读的。
3. public boolean canWrite():判断文件是否可被写入。
4. public boolean exits():判断文件是否存在。
(1) public void setAttribute(String key ,Object obj)
(2) public Object getAttibue(String key)
jspservlet知识点总结
Servletservelt:(基于网络的)什么是Servelt:运行在web服务器或应用服务器上的java程序,他是一个中间层负责连接来自web浏览器或其他HTTP客户程序的请求和HTTP服务器上的数据库或应用程序。
为什么使用servlet:Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。
它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Servlet是位于Web 服务器内部的服务器端的Java 应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
Servlet的优点:servlet是用Java编写的,所以它们一开始就是平台无关的。
这样,Java 编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。
servlet还有一些独特优点:■servlet是持久的。
servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)■servlet是与平台无关的。
如前所述,servlet是用Java编写的,它自然也继承了Java 的平台无关性。
■servlet是可扩展的。
由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。
Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。
servlet自然也具备了这些特征。
■servlet是安全的。
从外界调用一个servlet的惟一方法就是通过Web服务器。
这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。
■setvlet可以在多种多样的客户机上使用。
由于servlet是用Java 编写的,所以你可以很方便地在HTML中使用它们。
JSP中EL表达式的用法详解(必看篇)
JSP中EL表达式的⽤法详解(必看篇)EL 全名为Expression LanguageEL 语法很简单,它最⼤的特点就是使⽤上很⽅便。
接下来介绍EL主要的语法结构:${er.sex}所有EL都是以${为起始、以}为结尾的。
上述EL范例的意思是:从Session的范围中,取得⽤户的性别。
假若依照之前JSP Scriptlet的写法如下:User user =(User)session.getAttribute("user");String sex =user.getSex( );两者相⽐较之下,可以发现EL 的语法⽐传统JSP Scriptlet 更为⽅便、简洁。
EL表达式是配合JSTL使⽤的。
你需要引⼊JSTL标签库(<c:forEach items=""></c:forEach>,<c:if test=""></c:if>等属于jstl表达式)<%@taglib uri=" jsp标签的命名空间 " prefix="c"%>.与 [ ] 运算符EL 提供 . 和 [ ] 两种运算符来导航数据。
下列两者所代表的意思是⼀样的:${er.sex}等于${er["sex"]}. 和 [ ] 也可以同时混合使⽤,如下:${sessionScope.shoppingCart[0].price}回传结果为shoppingCart中第⼀项物品的价格。
不过,以下两种情况,两者会有差异:(1) 当要存取的属性名称中包含⼀些特殊字符,如. 或 – 等并⾮字母或数字的符号,就⼀定要使⽤ [ ],例如:${user.My-Name }上述是不正确的⽅式,应当改为:${user["My-Name"] }(2) 我们来考虑下列情况:${er[data]}此时,data 是⼀个变量,假若data的值为"sex"时,那上述的例⼦等于${er.sex};假若data 的值为"name"时,它就等于${}。
el和jstl学习笔记
尽量避免在JSP中使用JA V A代码来表示页面显示逻辑。
EL表达式:JSP 2.0以后,EL表达式已经被纳入正式规范,servlet 2.4以上都默认支持。
EL表达式一般操作的是作用域(application,session,reques t,pageContext)中的属性。
EL变量指某一个作用域中的属性。
<%=((Person)request.getAttribute("qy")).getName2()%>--${2}${s},会自动按照”pageContext,request,session,application”的顺序去找属性名为s的属性。
如果找到,则显示。
否则,什么都不显示。
${request S cope.s}相当于:<%=request.getAttribute("s") %>。
显然可读性要强很多。
注意:EL表达式中的变量,都必需用setAttribute("a","AA")放在”page,request,session,application”四种作用域里${}如果表达式中的值是个javaBean的对象,可以这样直接访问他的变量,而不需要转型。
.和[]操作符:${u.addr.country}访问相关的属性。
也可以通过:${u[“addr”][“country”]}。
或者.和[]结合使用:${u.addr[“country”]}.操作符特点:简便、易读。
[]操作符:可以利用传递字符串,实现动态取值。
比如:${u[s].country}$ {empty a}如果a是null,空字符串或空的集合就返回true,“空格”返回false。
表达式中的符号:+加号不能连接字符串,只能加和,其他都与以前一样。
${param.a}相当于:<%=request.getParameter("a") %>${paramV alues.b[0] }相当于:<%=request.getParameterV alues("b")[0] %>用于多选框Java标签库jstl:因为在jsp中使用java代码去控制页面的显示(即:用小段的<%%>),可读性很差,这样后期维护会比较麻烦,所以引入了Java标签库。
JSP笔记
J S P ( J a v a S e r v e rPage) JSP是服务器端运行的页面,JSP本就是一个文档,他不仅可以包含静态的HTML弋码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求。
Jsp 文件只需放在应用文件下就可以了。
JSP例子: <html><head><title>time</title></head><body><h1><%=new</body></html>JSP运行过程1,JSP 文件先要翻译成Java 文件( Servlet ),在tomcat 中翻译后的java 文件在tomcat下的work\Catalina\localhost 中相应名字的应用目录里。
2,编译Java 文件3,运行.class 文件Tomcat 的全局配置文件在Tomcat下的conf目录中的是服务器全局的配置文件,其中要想关闭列表显示叫要把<init-param><param-name>listings</param-name><param-value>false</param-value> </init-param>Tomcat 的管理员设置在tomcat 下的conf 目录中的文件中可以配置tomcat 的用户角色<tomcat-users><role rolename="manager" description=""/><role rolename="admin"/><!--设定角色的名字, admin 是管理员, manager 是项目管理 --><user username="manager" password="123" roles="manager"/><!-- 和角色 --><user username="admin" password="123" roles="admin"/> </tomcat-users>JSP 的特点JSP 的语法格式<%=...%>表达式,写表达式时不要加上分号,表达式,翻译成 输出,也就不能加分号了。
跟我学J2EE 表示层JSP技术中的EL表达式及应用技术
11、设置是否禁用EL语言 (1)<%@ page isELIgnored=“true” %>
表 示 是 否 禁 用 EL 语 言 , 其 中 的 “ true” 表 示 禁 止 , 而 “false”表示不禁止。
6、Empty操作符(空值检查) (1)使用empty操作符来决定对象、集合或字符串变量是 否为空或null。例如:
${empty oneUserInfoVO} 或者 ${empty erName } 如果request的参数列表中的oneUserInfoVO 对象或者 oneUserInfoVO 对象中的userName成员属性值为null,则表 达式的值为true。
(2)在JSP2.0中默认是启用EL语言。
12、EL中的各种形式的关键字(保留字)
所谓保留字的意思是指变量在命名时,应该避免与保留字 同名,以免程序编译时发生错误。
13、EL中的各种隐含对象 (1)在EL中的隐含对象总共有11个
JSP 页面中有9个隐含对象,而在EL中也有自己的隐含对象。 EL隐含对象总共有11个。
(2)EL中的各个隐含对象及功能说明
14、属性可以应用双引号和单引号 (1)单引号
<c:if test='${!empty someOneSchoolInfoPO.schoolPicture and someOneSchoolInfoPO.schoolPicture != ""}'></c:if>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP和EL表达式1.学习目标1: jsp 技术servlet 开发业务处理servlet+页面响应!jsp (jsp 第一个年代jsp model1小工程servlet + jsp(web) JA V AEE)jsp 显示servlet 处理数据(页面显示对象数据... 解决jsp 页面0代码<%%> jstl java standard tag libray +el 代替<%%> 代码体)2: EL表达式*** (原理作用语法自己的语法体!)jsp功能和Servlet一样,在服务器端执行,生成动态网页的web层开发的技术.2.jsp语法和运行原理原理分析:打开tomcat 安装主目录/work/catalina/当前发布的应用的名称day14_jsp/包结构容器创建的包结构/ 当前jsp 生成页面源代码jsp_jsp01.java打开该源码容器自动生成了一个基于当前jsp01.jsp一个servlet _jspInit() _jspService()_jspDestroy() == servlet 周期一致!!当前程序员写的jsp01.jsp 标签的所有内容都有servlet ---> service()---> JspWriter() --out 输出给浏览器浏览器接受输出流解析成所看到的页面!!1: 刷新浏览器访问jsp tomcat 自定执行生成servlet _jspService() 执行该方法!! sun 翻译过程!!* JSP本身支持HTML语法,比Servlet更便于生成网页* JavaEE5 (Servlet2.5 / JSP2.0 )----- tomcat5.5以上环境(tomcat6)2.1.J SP快速编写入门1、JSP直接存放WebRoot目录下,和HTML一样2、修改MyEclipse JSP默认编辑器window- preferences - general - editors - file associations 将JSP默认编辑器设置为JSP Editor3、JSP文件默认编码集ISO-8859-1 , 修改MyEclipse中JSP 默认编码window - preferences 搜索JSP 修改编码集为utf-8JSP比HTML 多了一句<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>在JSP中通过<% %> 嵌入任意Java代码<%out.print(data);%>servlet 大部分java代码可以嵌套少量html 页面代码jsp 大部分标签可以嵌套少量java 代码<% java 代码%><%=jsp 直接输出的数据= 相当于: out.print()%>jsp页面翻译之后对比图解:jsp执行过程:客户端访问服务器端JSP文件,服务器会读取JSP内容,将其翻译为一个Servlet,执行JSP 过程实际上执行Servlet过程,返回给客户端页面由Servlet程序生成的。
* 翻译后Servlet 保存tomcat/work 目录中index.jsp ------ index_jsp.javaJSP生命周期三个方法_jspInit() _jspService _jspDestroy()翻译规则:JSP中HTML代码<%%>中java代码---- 翻译为_jspService方法内部局部代码2.2.J SP中三种脚本元素1、<%! %> JSP声明脚本翻译成员变量、成员方法、内部类2、<%= %> JSP脚本表达式输出表达式值到HTML源代码------ 会被翻译为out.printout 是JSP内置对象,用于生成HTML源代码3、<% %> JSP程序脚本代码,可以嵌入任意Java代码2.3.j sp java 代码声明2.4.j sp 注释注释的区别演示:<!-- --> 不能对java代码起作用注释java 代码可以采用// /**/ /***/ 或者<%-- --%>2.5.j sp指令JSP指令元素指令都是置首!!!<%@page import="java.util.*"%>语法<%@ 指令名称属性名=值属性名=值属性名=值... %> 指令的名称三种每一种代表的含义不同.2.5.1.jsp指令之pagejsp 页面需要导入java对象所在包!! 告知jsp 页面可以使用该对象!!1: 处理错误页面的指令异常页面配置指令出现异常自动跳转good.jsp页面给予用户友好提示的!!配置errorPage缺点: 不方便统一管理!! 开发中基本不用的!!配置全局错误页面的处理!!2: 开发中配置全局错误页面处理借助web.xml 配置!!1: web.xml 打开配置主页面表<welcome-file-list> 该标签前面配置一组标签一般错误页面服务器状态码500 404<error-page>2: 一般404 提供页面自动刷新功能!! 500 一般捕捉异常....自动刷新3: 500 错误页面一般如果需要捕捉异常需要在该页面添加isErrorPage = "true"表示当前是一个友好错误页面获取异常信息需要当前jsp 添加一个isErrorPage 属性默认false : 当前的jsp 不可以使用exception 对象必须要属性isErrorPage 属性值: true 表示当前的jsp 是可以使用异常对象exception的!!友好页面提供该属性!! 编写获取异常信息的api4:开发环境utf-8 环境要求jsp 文件保存在磁盘编码的设置一般和workspaces 统一编码!!文件按照utf-8 进行保存硬盘中以及tomcat加载文件解码response.setContextType("text/html;charset=utf-8");以pageEncoding 为主!!2.5.2.11个page指令属性的小节常用属性代码演示:1: session 默认值true 一般不改!2:*import 可以使用多次导包!3: errorPage(配置全局)页面出现异常的时候,给用户提供友好错误页面<%@page errorPage="/500.jsp"%>掌握全局错误页面的配置在web.xml 文件中配置全局错误页面<error-page><error-code>500</error-code><location>/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/404.jsp</location></error-page>5: errorPage 和全局错误页面设置web.xml和isErrorPage 在错误页面获取错误信息! 和exception结合使用设置JSP发生错误后跳转页面,设置错误的处理页面(错误友好页面)在错误页面500.jsp<%@page isErrorPage="true" %><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h3>你报错了!500 错误信息如下</h3><%// 它就可以获取异常信息if(exception!=null){if(exception.getCause()!=null){out.print(exception.getCause().getMessage());}}%></body>4:*pageEncoding 和contentType 和workspace 编码一致pageEncoding 该属性用来处理jsp保存到磁盘的编码pageEncoding="utf-8"文件按照utf-8 进行保存硬盘中以及tomcat加载文件解码contentType属性控制servlet 中out输出的编码....相当于resonse.setContentType("text/html;charset=utf-8");小结:contentType 可以省略但是一般不省pageEncoding编码为主jsp的代码:<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>6: isELIgnored 控制当前jsp 页面能否使用EL 表达式(注意早期的1.0 版本是不支持EL 表达式的.)<%@page isELIgnored="true" %>2.5.3.jsp指令之includejsp 页面包含其他页面一个页面通常比较复杂的.复杂的页面都是分版块.用法: <%@include file="/xxx.jsp"%>当前页面添加include 指令即可包含的jsp页面翻译到主体servlet里看到源码最终只有一个servlet举例:准备三个资源logo.jsp main.jsp footer.jsp在index.jsp 主页面通过include 指令引入目标资源优点: 分模块化管理不同静态资源....统一管理!!效果2.5.4.jsp指令之taglib该指令作用: 程序员导入标签库的! 举例: 导入sun 定义好jstl 使用该组标签完成业务逻辑以及数据显示<%@taglib prefix="资源地址简称标签的简称" uri="标签库所在地址"%>早期eclipse 版本不会自带jstl 标签库的需要我们导入jar jstl+standard 两个jar myeclipse 8.5+ 2014 自带标签库jar标签库作用: 通过标签调用java类执行业务方法!!标签的实现类举例: jsp 导入标签库<%@taglib %> 该指令和page 一样置首!!prefix 引入标签简称uri 表示这组标签库的资源路径点开jar 找标签库配置文件META-INF 下xxx.tld 配置文件---> jstl 核心标签库文件 c.tld core 简写!打开, 该文件是标签库的配置文件使用标签调用java 代码通过该配置文件映射标签和java类的关系!!该标签声明标签版本标签使用简称c 地址uri给目标jsp 页面要使用标签库的时候taglib 指令引入的!! prefix = "c" uri=" /jsp/jstl/core"当前jsp 具备可以使用jstl 标签库的功能!!!2: taglib.jsp 在这个页面引入标签库:工具提示作用alt+/ 获取标签资源地址以及简称查看c.tld 文件3: 当前页面就可以使用这组标签了!! <c: alt+/ 发现很多c:开头的标签!!每一个标签代表是一个java类! 只需要调用标签可以执行java 实现类实现既定的功能. jsp页面就不用书写<%java代码%>学习标签库很重要!!每一个标签的功能唯一的! 总计大致有:13个标签! 常用<c:if> 举例sun公司提供jstl标签库taglib 指令引入标签库(三大类core 核心标签库EL函数库国际化标签库)<%@taglib uri="" prefix=""%>jstl 全程java standard tag library代码演示:在指定jsp 页面中引入:2.6.j sp动作标签(了解常用于model1开发的时期:纯jsp开发的年代)具体参照文档.举例: jsp转发的动作元素.2.7.j sp之内置对象说明(9个)jsp常用内置对象的说明.jsp 翻译对应servlet 源码生成这些对象的实例内置对象的声明实例化:pageContext 对象容器创建的1: 该对象作用通常是获取其他几个内置对象实例.当前jsp 页面环境(jsp 页面对象)开发中: pageContext 代码一般就一句: 获取服务器下应用名称可以获取其他8个pageContext.getRequest()补充说明:pageContext(当前页面界别) request(请求级别) session(会话级别) application(容器级别) 合称javaweb 四大作用域对象.共同的api setAttribute getAttribute()四个对象都可以保存数据根据业务使用不同对象获取不同对象保存数据2:application 应用= ServletContext 源码容器上下文.3.EL 表达式表达式. sun 设计出来用来替代java 代码jstl 标签显示处理业务逻辑的.servlet + jsp查询所有员工案例:servlet--->Service --->Dao --->List<User> usersservlet 获取List<User> users ---> 传递给jsp list.jsp 经典的场景转发!! servlet =--->jspjsp -->request.getAttribute("users")--->List<User> user list.jsp 出现代码<%%>sun 公司设计jstl 标签库显示数据List<User> users for 循环-->jstl <c:foreach> 但是List<User> users = >request.setAttribute("users");EL表达式设计: 核心思想获取4大作用于存储数据xxxx.setAttribute("users",List<User>); EL 表达式可以按照从小到大范围自动搜索获取4大作用域.setAttribute("","")方法保存数据!!语法: ${} 语法仅仅适用于jsp案例: EL 语法 . 语法获取数据 . jsp getXXX() .name getName()3.1.获取四大内置对象数据案例EL 表达式获取4大内置对象保存数据pageContext request session application .setAttribute()EL 表达式: ${xxxScope.key}---> 获取指定的对象存储数据了!!!1: servlet 处理业务逻辑准备数据jsp 主要用来显示数据获取相关数据--->EL2: 转发el1.jsp获取的数据request 对象的结果: hello request3: 重定向跳转到el1.jsp结果hello session小结:${xxxx} 自动从小到大搜索key = xxxx value 值找到不再继续搜索了!!!如果说获取指定域保存数据使用el 11个内置对象4个!! pageScope requestScope sessionScope applicationScope${xxxScope.key}el 表达式去获取四个对象值: ${xxxScope.key} 在指定的范围去获取绑定的数据el 表达式去获取四个对象值: ${key} 从最小范围去查找数据如果存在返回不会继续往下找, 如果找不到key 返回"" 而不是null举例说明: servlet 获取对象传递给jsp 对象呢?? User List<User> Map String[] ${}获取简单的数据类型1: EL 表达式获取对象数据...根据用户id 获取用户所有信息显示页面servlet--->service ====>dao --->User 4大作用域? request2: el2.jsp 获取request 对象绑定数据显示页面用户id name salary页面通过. 语法获取对象属性值.... 实体类必须提供getter 方法!!3: 查询所有员工显示页面!!3.2.E L表达式进行运算1: 算术运算el3.jsp 获取数据演示运算2: 逻辑运算|| && !=3: 逻辑运算true false <c:if test="${1==1}"></c:if> ${num-1==100} 切记${} 不可以嵌套的: ${${}} ${num== sessio}empty 关键字: ${empty num} 判断aa是否为空空返回true${not empty num} 判断aa是否不为空不为空返回true;判断一个对象是否为null <c:if test="${empty user}"></c:if>举例说明:<h3>empty 关键字</h3><%request.setAttribute("aa", "bb");%>${not empty aa }true<!-- el 表达式永远不会有嵌套-->三目运算? :EL支持三目运算? :<h1>三元运算符</h1>${(empty num)?"空值":"不为空" }// 不为空3.3.E L常用隐式对象(11个) ${xxx}setAttribute(key,value)pageScope el表达式从当前页面上下文pageContext对象中获取指定的值requestScope el 表达式从request范围获取指定数据sessionScope el 表达式从session范围获取指定数据applicationScope el 表达式从ServletContext对象范围获取指定数据* ${ } ====== pageContext.getAttribute("name")param --- request.getParameterMap();// 获取请求所有参数信息!!<String,String[]> servlet --- 客户端请求数据: request.getParameter("key");param 、paramValues 用户获得请求参数的值${} ==== request.getParameter("name");// 可能会常用main.jsp 添加了el4.jsp 获取客户端请求参数信息${paramValues.hobby} ===== request.getParameterValues("hobby"); -- checkboxel4.jsp 获取header、headerValues 获得请求头信息的数据${header["user-agent"]} ========== request.getHeader("user-agent");${headerValues["user-agent"]} ============= request.getHeaders("user-agent");***cookie 用来在开发中快速获得cookie的值------- 是一个Map<String,Cookie> ${.value} 获得指定名称的cookie的value值举例:name 表示cookie名称Cookie c = new Cookie("info","hellojava"); servlet 发送给浏览器${.value} // jsp 页面目标位置直接获取指定cookie 对应valueinitParam 用来快速读取ServletContext的全局初始化参数${ } ======= getServletContext().getInitParameter("name");* web.xml 中配置全局参数: <context-param> 配置全局参数掌握: cookie ${pany.value}${} ==== request.getParameter("name");// 可能会常用pageScope el表达式从当前页面上下文pageContext对象中获取指定的值requestScope el 表达式从request范围获取指定数据sessionScope el 表达式从session范围获取指定数据applicationScope el 表达式从ServletContext对象范围获取指定数据* ${ } ====== pageContext.getAttribute("name")${.value} 获得指定名称的cookie的value值举例说明:3.4.E L表达式调用java方法(难点,项目EL 1%)sun 函数库${xxxx java类方法!}应用场景获取EL 获取客户端IP 地址! (自定义核心标签库)自定义EL表达式函数库完成EL函数三步骤:应用场景: 价格进行打折优化数值!! 商城价格88 折扣率: 88/100*100+% 市场价格1001: 普通java 类方法必须是静态的static 方法就代表的需求(业务)2: java 类 注册 在指定目录下/WEB-INF/下 或者子目录 不要放在lib 目录创建一个my.tld 在这个文件中进行java 类注册编写tld 参照系统fn.tld 文件!!拷贝 约束 以及根元素 和必要标签修改tld 注册自己java类方法签名依照类方法参数列表和返回值3: 在你指定的jsp 页面调用该java类的静态方法实现业务逻辑3.1 引入自定义el函数库el5.jsp 引入taglib 自动提示表示标签tld文件注册成功!!3.2 目标位置调用:自定义el 函数库步骤:1: 自定义一个类的静态方法方法必须静态!!2: 编写tld文件文件的位置WEN-INF / web.xml 自己搜索!! 文件的内容xml 标签参照系统拷贝修改!!3: jsp页面引入自定义el函数taglib 引入!!3.5.s un 公司的jstl 函数库打开jar jstl.jar打开文件sun 实现类方法--> 映射EL 表达式的函数jsp 没有EL 函数功能导入标签库-函数库jsp 页面具备执行EL 函数的功能taglib 引入函数库当前页面就可以使用函数库--> 通用功能主要处理字符串的!! 并没有提供获取IP 地址EL 函数sun 公司定义完成的el 函数可以直接调用java类对应的方法功能.====================================================================== JSTL 核心标签库和EL表达式结合使用:4.家庭作业完成员工登陆功能,要求添加用户登陆校验, 只有登陆成功的用户才可以访问网站主页.index.jspservlet+jsp + jdbc +session 完成登陆。