6.一样平常浏览器只能存放300个Cookie
———————===↓↓↓↓↓Servlet会话技能 —— HttpSession↓↓↓↓↓↓↓↓===——————————————————HttpSerlvet; 为什么要有? 做事器怎么保存用户数据? 做事器怎么辨别是某一个用户登录? 是什么? HttpSession是Servlet_API的一个独立接口,是一个做事器端会话技能 也是一个域工具 浸染; 用于用户保存数据到做事器中 客户端与做事器的交互。 将会话封装成一个HttpSession工具 掩护客户端和做事器之间的进程 特点; 1.必须手动创建 2.Id是唯一的 3.还是基于Cookie实现 4.是一个域工具 5.只有2个set方法 ( setMaxInactiveInterval(S) , setAttribute("string",object)) ------------------------------↓↓↓↓↓↓↓HttpSession运行过程↓↓↓↓↓↓↓------------------------------------------------HttpSession运行过程; 1.客户端访问做事器 2.做事器实行request.getSession();方法则创建一个Session工具 ●天生一个Id序列号,作为一个值添加到Cookie中发送出去 ●将这个序列号保存到做事器内存中 3.客户端浏览器没有关闭连续访问这个项目资源 ●获取到要求数据的Id ●获取到在内存保存的Id ●判断是否一样 ------如果是一样则···不···创建一个新的工具 ------如果是不一样则···创建···一个新的工具 5.客户端浏览器关闭,在打开访问则会创建一个新的工具 ●客户端浏览器没有携带任何的Cookie信息 6.默认的存活韶光是30分钟, 30分钟后这个Session工具对应的用户Id没有进行 任何的访问做事器的操作则会调用invalidate()方法销毁这个工具 ◆注;一个HttpSession是由N个request组成的 只要实行到request.getSession()方法则会自动创建一个Session工具, 条件是第一次访问,或者是关闭了浏览器再次进行一个访问的情形下。 ------------------------------↓↓↓↓↓↓↓HttpSession创建工具办法↓↓↓↓↓↓↓------------------------------------------------HttpSession创建工具办法;办法一;HttpSession s = request.getSession();解释; 可以获取到Session信息和创建工具 办法二;HttpSession s = request.getSession(true);解释; 和办法一的浸染一样 办法三;HttpSession s = request.getSession(false);解释; 不会创建新的工具,只能获取 ------------------------------↓↓↓↓↓↓↓HttpSession利用流程以及方法↓↓↓↓↓↓↓------------------------------------------------HttpSerlvet利用流程及方法; 1.创建HttpSession工具 HttpSession hs = request.getSession(); ◆◆◆注;如果布局器形参是false的那么则不会创建Session工具只可以获取到Session的属性 2.设置属性 hs.setAttribute("string","object"); 3.设置最大存活韶光 默认的存活韶光是30分钟, 30分钟后这个Session工具对应的用户Id没有进行 <---任何的访问做事器的操作则会调用Invalidate()方法 |------>销毁这个工具。hs.setMaxInactiveInterval(M); --- 分钟可以通过设置配置文件设置最大存活韶光也可以 4.获取到所有的属性 Enumeratrion em = hs.getAttributeName(); 5.获取到某一个属性 String s = hs.getAttribute("name"); 6.获取到最大存活韶光 String s = hs.getMaxInactiveInterval(); 7.销毁工具 hs.invalidate() ------------------------------↓↓↓↓↓↓↓HttpSession在web.xml文件的配置↓↓↓↓↓↓↓------------------------------------------------HttpSession在web.xml文件的配置;<session-config><session-timeout>分钟</session-timeout></session-config>◆注;在web.xml的文件配置中是一个全局的变量↓↓↓↓↓↓JSP↓↓↓↓↓↓↓↓JSP; 为什么要有? 1.利用Servlet操作相应信息并且要将相应后的结果显示到客户端浏览器页面, 不便于编写JS,CSS等别的脚本代码,并且在写的时候随意马虎出错, 变动困难,不便于排错等。。。。。。。。。。。。。。。 是什么? JSP便是Servlet,实质便是java代码。 只是与Servlet表现形式不一样, 是与HTML,CSS,JS等一起写在同一个文件中。 浸染; JSP紧张是为了便于显示业务逻辑处理后的结果, 由于是与HTML,CSS,JS等。。。一起写在同一个文件中 那么便于排错,变动等。。。。 特点; JSP文件后缀是 .jsp JSP可以嵌套HTML代码 JSP可以写Java代码,由于实质便是一个.java文件 JSP内置了四大域工具,九大常用工具JSP继续HttpJspBase类的 -------------------------------↓↓↓↓↓↓↓JSP与Servlet的关系和差异↓↓↓↓↓↓↓------------------------------------------------ JSP与Servlet的关系; JSP便是Servlet,只是表现的形式不一样而已 JSP和Servlet是一个互补的关系。 JSP不利于操作业务逻辑信息 Servlet不利于显示逻辑业务处理结果 JSP与Servlet的差异; Serlvet; 用于获取要求信息 处理业务处理逻辑 将数据保存到域中 JSP; 将Servlet处理好的业务逻辑结果···显示···在客户端浏览器中 -------------------------------------------↓↓↓↓↓↓↓JSP运行事理↓↓↓↓↓↓↓----------------------------------------------------JSP运行事理; 1.客户端浏览器访问Tomcat做事器资源 2.Tomcat做事器获取到客户端访问信息, 利用Servlet处理好业务逻辑,跳转到JSP文件 3. JSP将从域中获取到处理后的业务逻辑则会显示到页面中 ●Tomcat做事器获知这个跳转的地方是一个.jsp文件 ●Tomcat做事器会将这个.jsp解析成一个.java文件 ●Tomcat做事器将解析好的.java文件进行一个编译 ●Tomcat做事器在将这个编译好的.class文件相应给客户端浏览器 ●并且将这个相应的信息显示在客户端浏览器页面 ◆Tomcat内部运行过程; 原(.jsp)-----> 解析(.java)----->编译(.class)----->运行(客户端浏览器页面) ------------------------------------------↓↓↓↓↓↓↓JSP解析后.java文件↓↓↓↓↓↓↓----------------------------------------------------JSP解析后的.java文件;在JSP中是内置了四大域工具和九大常用工具,以是在JSP文件中可以调用在JSP文件解析成.java文件之后,只要不是利用JSP语法编写的代码都会转换成Servlet的书写而是利用JSP语法编写的代码不会有任何改变的。。。。。在JSP文件中处理指令时不会在文件中的,而会转换成Servlet的编写,如;编码的设置,导包等一系列处理指令。。。。。。。。。。 四大域工具; application ----- 全局 session ----- 会话 request ----- 只在当前要求有效,要获取要进行转发 page ----- 只是在当前页面有效, ◆ 紧张;获取其他的工具 九大工具; application ----- ServletContext session ----- HttpServlet request ----- HttpServletRequest pageContext ----- 在Servlet包中是没有的,这个域工具是JSP文档特有的 page ----- this out ----- request,getWriter exception ----- Exception config ----- ServletConfig response ---- response ◆◆◆◆◆◆注;在JSP中由于是内置工具,以是在用户访问JSP页面的时候就会自动创建了Session工具-----------------------------------------------↓↓↓↓↓↓↓JSP语法↓↓↓↓↓↓↓----------------------------------------------------JSP语法;1.脚本代码;<% …… java代码 %> 解释; 1.用于写java代码 2.代码注释只能是java的单行和多行注释别的弗成 3.可以写多行代码 4.变量是一个局部变量 5.不可以写方法由于在解析本.java文件中便是一个service方法 6.可以有输出语句 2.表达式; <%= …… %> 解释; 1.是输出的表达式 2.是不可以定义变量的,只能引用在<% …… %>定义好的 3.只能写一行代码 4.可以是调用方法输出方法中的数据 5.不可以有输出语句 6.代码注释只能是java的单行和多行注释别的弗成 3.声明 <%! …… %> 解释; 1.是用于定义方法和全局变量的 2.不可以有输出语句,只能在方法中输出 3.定义的方法,变量 4.代码注释只能是java的单行和多行注释别的弗成 4.注释; <%-- …… --%> 解释; 只能在HTML代码中,不能再JSP声明表达式脚本代码等写这个注释 JSP特有的注释是客户端浏览器不可见的 而HTML的注释是客户端浏览器可见的 在解析成.java文件的时候会忽略特有的JSP注释 5.处理指令; <%@ …… %> 1.处理指令是用于奉告Tomcat做事器是要如何操作这个文档的, 以及这个文档不能有什么等。。。。。 如;这个文档不不能写EL表达式等... 2.处理指令时不可见的输出的,是不会输出到浏览器 3.处理指令时不会原样的存在解析后的.java文件的 page; 定义页面属性。。。。。。 page常用属性; language="java" --- 声明这个文件可以利用什么措辞进行编写import = "java.util." --- 是用于导包注;导包一样平常都是创建一个新的page便于掩护的和排错等······可是可以在一个page的import属性中同时导入多个包······如果是同时导入多个包则利用 ( , )进行分隔◆ 不可以利用( ; )进行导包的分隔会报错contentType="text/html; charset=UTF-8" --- 设置文档的输出编码集,比pageEncoding优先级◆···高pageEncoding="UTF-8" --- 设置文档的解析成.jsp编码集,比contentType优先级◆···低buffer="8kb" --- 默认是8K,这缓存是用于输出的缓存。。。后续out|----> errorPage="_03_00_Jsp_ProcesssingInstruction_Instroduce.jsp"| |----------------->是设置当页面涌现缺点的时候跳转到一个缺点的页面 ◆而这个缺点是只是浸染在Jsp脚本代码的 这个跳转是一个内部的跳转,不是重定向是转发isErrorPage="true" --- 设置是否是一个缺点页面,默认是false=== 如果设置为一个缺点页面,那么则可以调用exception工具,来获取到非常,或者抛出。session="true" --- 设置是否为每一个访问的用户都创建一个会话, 默认是true ◆ 可以通过设置这个session为false来优化页面访问autoFlush="true" --- 设置是否自动刷新,默认是trueisELIgnored="false" --- 是否忽略EL表达式,默认是falseisThreadSafe="false" --- 是否是线程安全的,默认是true, 也担保了Servlet的单例规范 代码; <%@ page import="java.lang.,java.util."> ◆注;每一个JSP必须有一个page指令用于定义这个.jsp文件的信息定义等。 一个JSP文档中可以有多个page指令,但是在设置属性时不要冲突。 多个page处理指令基本都是导包的时候用的。。。。。。。 include; 是用于页面静态包含的。 是用于进行一个预定义页面的引用,而这个是一个静态的包含其他页面 由于在页面中有N个位置时一样的,那么就没有必须要每次都要写, 只须要引用其他页面,提高效率 特点;将所须要的页面进行一个合并了在进行一个解析之后在进行编译运行 弊端;在合并的页面不要写HTML文档的构造标签,如,html。。。由于如果写了那么会造成有有个标签那么就违反了规范了 |-----------include---------> ● 可以利用被合并的文件标签数据等。。。。。。。| | | 代码;| <@% include file="path" %>| | ◆注;一个JSP文档中可以有多个include处理指令,| 由于可以会有多个页面要合并 | | | | taglib;| 是用于引用标签库的文件。| 代码;| <%@ taglib uri="文件对应的uri" prefix="文件的标签标识"%>| | || ◆注;pageEncoding是jsp文件本身的编码| contentType的charset是指做事器发送给客户端时的内容编码||||||||--------|--------------------------------↓↓↓↓↓↓↓JSP常用内置标签↓↓↓↓↓↓↓----------------------------------------------------||| Jsp常用标签;| 为什么要有?| 在JSP规范中哀求只管即便要少涌现Java代码,|| 1.Jsp是用于显示页面的,不是进行处理业务逻辑的|| 2.Jsp文件假如要进行解析-编译-运行 | 如果Java代码太多会导致解析,编辑等效率低落,由于是显示在浏览器的|| 以是SUN公司为 Jsp设计了一部分的标签,便于利用| | | | 语法;| 1.<jsp:标署名 …… ></jsp:标署名>| 2.<jsp:标署名 …… />| | | 常用标签;| 1、<jsp:include page="文件路径"></jsp:include>----- 用于动态包含| | 解释;合并的文件是分开的, | 如果被引用的页面代码太多了 | 会先显示当前页面的代码 | --------include---------> ● 无法利用被合并文件的数据等。。。。。。。 2、<jsp:forward page="转发路径"></jsp:forward> ----- 用于跳转 解释;是一个···转发的跳转··· 不是重定向,把稳转发和重定向的差异。 3.<jsp:param name="" value=""/> 解释;这个是设置一个属性, ● 这个是必须要和forward标签一起利用,不可以单独利用。 ◆◆◆◆◆注;Jsp语法内置标签,也叫 ● Jsp动作标签 ● --------------------------------------------↓↓↓↓↓↓↓JSP —— EL表达式↓↓↓↓↓↓↓----------------------------------------------------EL表达式;由于Jsp的规范中只管即便不要写Java代码,那么获取到Servlet.java文件处理完成的业务逻辑结果显示到页面那么只能通过EL表达式获取紧张是用于···打算···和···获取到域数据···逻辑判断以是一样平常处理好的业务逻辑都是会存放到域中的。 ◆注;在EL表达式不可以写在注释里,会报错-----------------------------------------↓↓↓↓↓↓↓JSP —— EL表达式_语法↓↓↓↓↓↓↓----------------------------------------------------EL表达式语法; ${ …… } ◆注;EL表达式的语法不可以写在注释里,要利用字符分隔否则会报错--------------------------------------------↓↓↓↓↓↓↓JSP —— EL表达式_运用↓↓↓↓↓↓↓----------------------------------------------------EL表达式;EL获取到域的值;{ 内置工具.属性名 }{ 属性名 } EL表达式中改变了域的名称。page ----- pageScoperequest ----- requestScopesession ----- sessionScopeapplication ----- applicationScope 代码; 1、通过内置工具获取到域的name对应的值${ pageScope.a }${ requestScope.b }${ sessionScope.c }${ application.d }2.直接获取到name对应的值 --- 不指定域${ c }解释;直接获取没有指定域获取的话,默认是按照从一个范围的小到大获取如果在一个范围中获取到了,那么则直接返回值3.获取到单列凑集的值${ name(键)[num] } --- 获取到凑集的某一个值${ request.sett[0]} --- 获取到request域中凑集的第一个值 ${ name(键) } --- 获取到全体凑集${ sett } ----- 获取到全体凑集4.获取到双列凑集的值${ name.凑集key } ----- 获取到Map凑集指定的key的值${ request.map.a } ----- 获取到request域key为a 的值${ name } ----- 获取到全体双列凑集(是一个内存地址)${ map } ----- 获取到全体双列凑集5.获取到工具${ name } ----- 获取到这个类的工具${ request.student} ----- 获取到request域的学生工具${ name } ----- 获取到某一个域的key的工具${ student } ------ 获取到某一个域key的student工具6.获取到方法的值类;studen 属性 name 方法 getName()${ request.student.name } ------ 获取到request域的学生名字${ stdent.name } ----- 获取到某一个域的学生的名字◆◆◆注; 在EL表达式中要获取方法的值,这个方法必须是无参的,而且是没有返回值的,一样平常都是get方法 在EL表达式中调用这个方法是不加get ◆ 直接属性名小写 ◆◆◆◆◆◆注;在EL表达式中是可以利用三元运算符的, 由于EL表达式实质便是java代码,而且EL表达式的用场包括逻辑判断的。。。。。。但是EL表达式无法利用if等语句。。。。。。但是三元运算也是逻辑判断的,而且是符合EL表达式的哀求的。-------------------------------↓↓↓↓↓↓↓JSP —— Out和PrintWriter差异↓↓↓↓↓↓↓----------------------------------------------------Out和PrintWriter差异; 在JSP中的Out对应的Servlet工具是response.getWriter JSP的Out是带有缓冲功能的写出, 先将页面加载到缓存中在一起写出。 Out写出的机遇; 1.页面加载完成 2.缓存满了 ◆注;默认的缓存是8KB,可以通过修正page处理指令的buffer属性来修正缓存 如果修正的缓存为0KB的话,那么当前页面的Out工具则失落去缓存功能 response.getWriter是没有缓存的加载到一条文直接写出。 相同;都是写出功能 ◆◆◆注;response.getWriter获取到的工具和Out是一样的都是JspWriter,只不过reseonse.getWriter进行了封装,都是指向JspWriter ——————————————————————===↓↓↓↓↓JSP —— 自定义标签↓↓↓↓↓↓↓↓===—————————————————————Jsp自定义标签;为什么要有?JSP的自定义标签是为了取代JSP页面的Java代码, 而Jsp自带的标签有时根本就知足不了需求, 以是要根据需求进行定义干系的标签。 由于JSP页面的Java代码不便于掩护,而且使得JSP页面的简洁性差,掩护困难,由于如果前端在进行定义样式等一系列的页面布局的时候JSP页面的Java代码过多的话,不便于后期的掩护,而且在掩护期间可能涌现欠妥心删除美工代码等。。。。。。 是什么?JSP自定义标签实质便是一系列的Java代码浸染;取代JSP页面的Java代码,犹如EL表达式取代JSP表达式<%=……%>使得JSP页面变得简洁,提高掩护性等。。。。。特点;实质还是Java代码须要建立.tld文件做关联标签是有一个声明的-------------------------------------------↓↓↓↓↓↓↓JSP开拓步骤↓↓↓↓↓↓↓----------------------------------------------------JSP开拓步骤; 1.创建一个类继续SimpleTagSupport类 2.调用这个类的doTag()方法 3.在doTag()方法内部写业务逻辑处理代码 a.当前继续的工具通过父类的方法获取到PageContext工具 可以通过PageContext获取到其他八大类工具,或者设置其他域的属性。代码; 由于获取到的是父类的PageContext pc = (PageContext)this.getContext(); 4.创建一个.tld文件, 在这个文件的里定义文件关联标署名, 以及定义这个标签类对应的标署名。 5.在JSP文件中导入 代码;<@% taglib uri=".tld文件对应的" prefix=".tld文件标署名"%><@% taglib uri="http://www.baidu.com" prefix="bd"%> 6.在JSP文件调用 代码;<tld文件标署名:类标署名><bd:student>-------------------------------------↓↓↓↓↓↓↓JSP自定义标签的实行过程↓↓↓↓↓↓↓----------------------------------------------------JSP自定义标签的实行过程;一、解析;1.Tomcat做事器启动,就会自动加载WEB-INF下的web.xml和.tld文件到内存中。2.客户端访问JSP文件页面3.做事器解析JSP文件,解析到这个自定义标签的时候 4.检讨这个标签是否来自于自定义标签则会检讨这个JSP文件的taglib标签库声明a)不是则会报错5.是来自标签库的则会查找内存中是否有.tld文件的uri标签和JSP文件声明的uri是同等的以及声明的文档标签声明是否是一样的。。。。。。a)不一致则报错5.同等则会获取到这个标签对应的标签类6.创建工具,调用doTag()方法 ◆◆◆注;一个标签对应则的是一个类由于都是调用doTag()方法而每一个类的继续都只有一个doTage()方法----------------------------------------↓↓↓↓↓↓↓JSP —— .tld文件书写↓↓↓↓↓↓↓----------------------------------------------------.tld文件书写;办法一;在Tomcat做事器查找.tld文件,将这个文件的信息拷贝过去办法二;手写<!-- 根标签 --><taglib><!-- tld文件版本声明 --><tlib-version> 1.0 </tlib-version><!-- Jsp文件版本声明 --><jsp-version> 1.2 </jsp-version><!-- 设置本.tld文档的标签声明 --><short-name> itcast </short-name><!-- 设置文档的标记信息,在全体Tomcat资源下的tld文件是的uri标签内容是唯一的 --><uri>http://asdf</uri><!-- 设置标签 --><tag><!-- 标署名 --><name>my</name><!-- 设置标签的对应类的全路径 --><tag-class>包名+类名</tag-class><!-- 设置输出的格式 -->|---------------设置输出格式--------------><body-content> …… </bodycntent>|| <!-- 设置属性 -->| <attribute>| <!-- 属性名 -->| <name></name>|| <!-- 设置这个属性是否必须写的| 设置为false则是可以···写可不写···| 设置为true则是··必须··写上这个属性 -->| <required> boolean </required>|| <!-- 设置是否支持EL表达式,布尔类型 -->| <rtexprvalue> boolean </rtexprvalue>| </attribute>| </tag>| </tagblib>|||-----> 设置输出的格式;1.jsp --- 这个只能用在JSP1.0的版本,标签内容可以写java代码和起浸染这个违反了JSP页面的规范,以是不到极度不该用。。。。。。2.scriptless --- 标签内容不能写java代码,会报错a)在scriptless中标签的内容不可以是纯字符或纯数字必须和字母或中文一起利用3.tagdependent --- 标签的内容可以写java代码,但是不会其浸染,会原样的输出4.empty --- 标签内容是空的,这个标签是一个空标签◆◆重◆注; 所有的标签属性都是标签类的成员变量,◆ 而这个成员变量必须要供应set方法, 否则会涌现报错的情形,由于在调用时类都是遵照封装性的,而在JSP页面调用都是不须要加上set,◆ 直接小写的属性名就可以了。代码;标签类;setName()调用;name-------------------------------------------↓↓↓↓↓↓↓JSP内部实行顺序↓↓↓↓↓↓↓----------------------------------------------------JSP内部实行顺序; 在JSP的自定义标签类中都是继续SimpleTagSupport类 而SimpleTagSupport实现了SimpleTag接口的, 从而所有的自定义标签类都是间接的实现了SimpleTag接口。 而在这个SimpleTagSupport类实现了SimpleTag所有的方法,从而实行也是实行这些方法顺序;而这些方法的实行的顺序都是优先实行doTag()方法,而在doTag()方法中一样平常都是调用接口的其他方法进行利用的,而在这些方法的实行顺序都是取决位于doTag()方法内部调用的顺序的。。。。。。。。。 SimpleTag接口的方法; 1.doTag() --- 在利用自定义标签类的时候, 内部会自动的调用这个方法, 实行这个方法的逻辑业务处理。 2.setParaent(JspTag paraent) --- 设置父类标签,传入一个父类的标签类 3.setJspBody(JspFragment jf) --- 设置标签内容,传入一个内容存储类的工具 4.setJspContext(JspContext jc) --- 设置标签内容的属性,实际传入是子类 PageContext pc ---实际传入是子类 ◆注;一个标签会被Tomcat做事器翻译成一个方法,在这个方法按照逻辑顺序处理---------------------------------------↓↓↓↓↓↓↓JSP自定义标签常用的用场↓↓↓↓↓↓↓----------------------------------------------------JSP自定义标签常用的用场;1.掌握标签内容是否显示 --- 在doTag()方法中实行顺序↓↓↓↓↓↓↓↓代码; 办法一; 0.获取到标签的内容,而这个标签内容被封装成了工具 JspFragment jf = this.getBody(); 1.获取到PageContext类的父类 PageContext pc = (PageContext)this.getContext(); 2.通过PageContext类可以获取到其他八大工具 JspWriter out = pc.getOut(); 3.调用JspFragment的invoke方法, 传入一个输出网页的输出流工具,将其内容写出 jf.invoke(out); 办法二; 1.获取到标签的内容 JspFragment jf = this.getBody(); 2.直接调用JspFragmentinvoke方法,传入一个null, 在内部会进行输出的处理,从而提高开拓效率。 jf.invoke(null); 2.掌握标签后面的内容是否显示或不显示 --- 在doTag()方法中 抛出SkipPageException代码; 一、不显示后面的内容 ---抛出SkipPageException非常, 则后面内容都不会显示。 二、不显示标签内容 ---在doGet方法中什么都不写为空 3.重复显示标签内容或动态的显示标签内容 --- 利用循环代码; 一、静态的重复显示标签内容 1.获取到标签的内容 JspFragment jf = this.getBody(); 2.利用for循环输出 for(int i =0; i < 5; i++){ //调用invoke方法 jf.invoke(null); } 二、动态的重复显示标签内容 1.创建一个成员变量, 而这个成员变量作为标签的属性存在。 可以通过EL表达式获取到这个属性的信息。 在利用时将这个属性放到域中,从而利用EL表达式获取。4.改变标签内容代码;1.获取到标签内容JspFragment jf = this.getBody();2.创建一个输出流的容器StringWriter sw = new StringWriter();3.调用invoke方法,传入一个输出流的容器,通过这个invoke方法的获取到这个内容到输出流容器jf.invoke(sw);4.获取到输出流容器的存储的内容String temp = sw.toString();5.必须手动写出this.getContext().getOut().write(temp);-----------------------------------------↓↓↓↓↓↓↓JSP —— 把稳↓↓↓↓↓↓↓----------------------------------------------------1.重启了做事器等一系列操作,操作后还是没有错,那么则要看下 Tomcat —> webapps —> 项目源文件是否修正的时候重发布成功2.在调用域的信息的时候,可以先在文件测试域是否为空,避免涌现遍历等一系列业务逻辑处理的时候缺点。3.在属性中利用EL表达式必须要利用" "4.在属性中利用EL表达式必须设置.tld文件的属性标签下的子标签内容为true<rtexparvalue> true </rtexparvalue> 5.在scriptless格式中不能输出纯数字或纯字符必须和字母或中文一起利用 —————————————————————===↓↓↓↓↓JSP —— Jstl标签库↓↓↓↓↓↓↓↓===——————————————————————Jstl标签库; 为什么要有? SUN公司为了提高业界开拓效率将, 常常须要实现的功能的代码封装成一个一个标签, 而这些标签都统称为Jstl标签库。 是什么? Jstl标签库是一系列封装好的标签。 浸染; 用于页面逻辑,处理自定义标签等。。。。。 便于调用,提高开拓效率。。。。。。。 特点;-----------------------------------------↓↓↓↓↓↓↓Jstl标签库分类↓↓↓↓↓↓↓--------------------------------------------------- Jstl标签库的分类; 核心标签库 ---> core/c ---> 文件标署名是( c ) 国际化(格式化)标签库 ---> framat/fmt fn(EL)标签库 ---> fn/SQL标签库 ---> sql |\XML标签库 ---> x ◆注;SQL标签库和XML标签库基本都不该用了,由于XML和SQL都是用于存放数据了,而不会将这些数据显示在客户端浏览器。 ------------------------------------------↓↓↓↓↓↓↓Jstl开拓步骤↓↓↓↓↓↓↓----------------------------------------------------Jstl开拓步骤; 1.在MyExlipce中创建web项目 2.检讨是否有J2ee5的lib a)如果没有则须要导包 3.在JSP文件中直接调用。 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> a)一样平常利用的是核心标签库的标准版,要把稳uri的地址 4.直接调用--------------------------------------↓↓↓↓↓↓↓Jstl核心标签库常用标签↓↓↓↓↓↓↓----------------------------------------------------Jstl核心标签库常用标签; 导标签库; <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 1.set; 设置属性,默认设置的属性浸染在pageContext域 代码; <c:set var="x" value="x" scope="request/session/application"></c:set> 解释; var --- 设置域属性名 value --- 设置域属性名对应的属性值 scope --- 设置域的浸染域,如果不设置默认是pageContext 2.out; 输出内容 代码; <c:out value="${域.属性名}" default="x" escpeXml="boolean"></c:out> 解释; value --- 域的属性名 defalut --- 默认值,如果value/值为null则输出默认值 escpeXml --- 设置默认值是否有效 3.if 单条件判断,输出内容,只有true和false。 代码; <c:if test="true/false"> xxx </c:if> <c:if test="${5>0}"> xxx </c:if> 解释; test --- 设置判断语句 如果要判断则须要利用EL表达式 由于EL的浸染便是逻辑处理, 和获取域的属性值。 4.choose-when-otherwise 多条件判断,输出符合条件内容 代码; <choose> <when test="true/false"> xxx </when> <when test="${5>3}"> vvv </when> <otherwise> ccc </otherwise> </choose> 解释; 与if-else if...-else 利用相同 choose - when -otherwise if else if else test --- 设置判断语句,boolean 如果要判断一样平常都是EL表达式, 由于EL的浸染便是逻辑处理, 和获取域的属性的值。 5.forEach 遍历数据和凑集 <c:forEach items="${x}" begin="num" end="num" step="num" var="x" varStatus="vs"> xxxxxxxxxxxxxxxxxxxx </c:forEach> 解释; items --- 遍历的凑集或数组, 只能传入凑集或者是数组, 如果不是凑集或者数据, 会原样输出这个items的值。 以是一样平常都是传入一个EL表达式获取到的凑集或数组 begin --- 从哪个元素的角标开始遍历,默认是第一个 end --- 遍历到哪个角标结束,默认是末了一个 step --- 每次遍历的角标的位置,默认是 1++ var --- 吸收元素每一个遍历的元素 varStatus --- 每一个元素的状态, 而在varStatus有一个count方法, 获取到每一个元素的系列号, 代表的是第几个元素。 6.forTokens 遍历字符串 <c:forTokens items="${x}/string" delims="符号" begin="num" end="num" step="num" var="x" varStatus="vs"> xxxxxxxxxxx </c:forTokens> 解释; items --- 传入一个字符串 delims --- 切割的字符 begin --- 开始位置,切割符号的子字符串是元素, begin是指从第几个子字符开始。 以切割字符作为一个分隔。 默认是第一个元素。 end --- 结束位置, 因此切割的元素的角标进行标识的 默认是这个字符切割符的末了一个元素。 step --- 每次切割的字符的位置遍历是增加几,默认是1++ var --- 用于吸收每次切割之后的元素 varStatus --- 每一个切割的之后的元素的状态, 有一个count的方法可以, 获取到这个状态Id。 7.redirect 简化重定向 代码; <c:redirect url="/x" ></redirect> 解释; url要跳转的资源, 而这个资源只能是当前项眼前的, ◆但是不用指定项目名而已。 8.url 简化的url 代码; <c:url value="/x"></c:url> 解释; value是要跳转的地址,不须要写项目名 这个标签紧张是用于 ( a ) 标签等一起利用, 由于可以避免路径出错 如果单独利用则是无效的, 如果有项眼前的一个文件路径则会输出这个项目的路径 ◆◆◆注;在属性中是可以嵌套EL表达式,把稳↓↓↓◆◆◆注;建议在标签属性利用EL表达式必须EL表达式必须要利用"EL",并且不可以有空格,由于会认为是一个字符串。。。。。。—————————————————————===↓↓↓↓↓JavaBean规范↓↓↓↓↓↓↓↓===——————————————————————JavaBean规范; 为什么要有? 有了JavaBean规范,将数据进行封装,提高代码的重用性等。。。。。。。 是什么? 是SUN公司定义的规范, JavaBean也叫PoJo(plain old java Object) VO(Value Object)或DO(data Object) ◆JavaBean便是一个java类,JavaBean只是一个规范。 浸染; 紧张是为了封装数据,提高代码的重用性,使得代码的页面整洁等。。。。。 ◆规范哀求(特点); JavaBean规范的类,必须要有无参的布局方法 必须把属性私有化 必须供应public 的 get/is和set方法 ◆注;is方法也是属性get方法,由于这个紧张是在一些布尔类型会利用。。。。。。 ◆◆◆◆◆注;建议(必须)要实现Serializable接口, 使得该类可以进行系列化, 才可以在网络上进行一个传输。 ———————————————————————===↓↓↓↓↓MVC & 三层架构↓↓↓↓↓↓↓↓===————————————————————————MVC&三层架构开拓模型; 为什么要有? 1.在开拓架构模型中, a)可以利用 Jsp + javaBean 但是程序的操作过于依赖Jsp 可是大略,开拓效率高, 不便于进行一个掩护。 b)可以利用jsp + servlet + javaBean 但是Serlet类似一个数据到显示页面的桥梁 而这个业务处理,如果在Serlvet类中太多 不便于程序的掩护,排错等。。。。 由于所有的业务逻辑到 写在Servlet类中。 是什么? 是一个架构开拓的模型。 浸染; 使得程序的,代码简洁,客不雅观,利于排错,掩护等。。。。。。 特点; 分层开拓--------------------------------------↓↓↓↓↓↓↓MVC & 三层架构层次↓↓↓↓↓↓↓----------------------------------------------------MVC架构层次; 1.表示层(web) --- javaBean(model)、servlet(control)、jsp(view) a)javaBean将获取到的数据进行一个封装 b)jsp是用于显示后台处理的结果的 c)servlet是掌握数据的处理(如;登录须要进行什么业务处理) 2.业务逻辑层(service) --- 处理业务 客户端浏览器要与做事器进行交互数据, 而这个数据的交互规则则是业务处理。 如;登录等。。。 3.数据访问层(Dao) --- CRUD 增编削查 掌握客户端浏览器访问数据的操作。 Dao是直接与数据进行交互的。↓↓↓↓↓↓Servlet域↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓大到小↓↓↓↓↓↓ Servlet域分类; ServletContext ----- 全局范围 浸染; 存储浸染的全体做事器的数据。 如;下拉列表等,固定的非常少修正的数据。。。。。。 HttpSession ----- 会话范围 浸染; 存储当前会话的用户的数据。 HttpServletRequest ----- 当前要求的范围 浸染; 存储当前要求信息的数据,如果不是转发那么再次要求会创建一个新的 【pageContext】 ----- 当前页面的范围 浸染; 只是在JSP中有,并且是咋当前的页面获取到其他工具 Servlet域; ServletContext ---J--- application ---E--- applicationScope HttpSession ---J--- session ---E--- sessionScope HttpServletRequest ---J--- page ---E--- request 分外;【PageContext】 ---J--- pageContext ---E--- pageScope ◆ 注;在Servlet中是无法利用pageContext域的, 由于也没故意义,这个域的只浸染在当前页面 这个域的浸染是为了获取其他的工具◆◆◆◆◆注;在EL表达式中域工具如果加上了Scope则是获取域信息,如果没有加上Scope则是调用方法,而在EL表达式中假如须要获取别的工具要利用pageContext域对来获取↓↓↓↓↓↓Servlet常见的缺点↓↓↓↓↓↓↓↓常见的缺点;◆ 1.在获取到域信息的时候把稳空指针的非常 2.把稳路径的非常,建议把web.xml的访问虚拟路径名改成和文件一样的 3.在JSP中的注释不可以写EL表达式,JS脚本代码语法,表达式,声明等。。。。。。 有时出错了便是这里的注释出错,而工具没有检测出来这个缺点。。。。 4.重定向的路径是要写项目名的,转发是不用写项目名的◆ 5.在获取文件的时候,把稳;如果不是Servlet的语句块内,可能写相对路径没用 a.可以利用类获取到 b.绝对路径 6.JSP文件必须要翻译的。。。。。才会在页面显示出效果 7.在利用EL表达式调用域的属性值的时候,是利用xxxScope,在EL表达式中必须要加上Scope 8.在利用PageContext域的 setAttribute(x,x,x)方法 调用其他域的时候, ◆ 利用常量的XXX_SCOPE 9.把稳在利用Jstl标签库的时候, 在属性的值是利用EL表达式获取的, 那么这个 " " 双引号不可以有空格 由于会认为是一个字符串。。。。。。 value="${ request.s }" 精确 value=" ${request.s} " 缺点 不能是闭合标签 ◆10.技巧;可以利用自定义非常,来抛出,从而进行将这个非常的内容进行一个转发输出到页面 11.把稳;如果在一条语句中有多个EL表达式利用 ( ) 空格分隔————————————————————————————————————↓↓↓↓↓↓Servlet开拓小技巧↓↓↓↓↓↓↓↓——————————————————————————————————————————表单; 1.在对表单的数据进行某些后台处理的时候可以在表单利用 recodonly='xxx'事宜, 这个事宜可以使得用户无法修正某一个表单的数据, 以达到用户无法修正表单的某些数据。 在JSP中利用EL合营利用 如;<input type='text' ${request.account?recodonly='xx':''}/> 2.当须要获取某些数据, 而这些数据是不想让用户瞥见的可以利用hidden, 在CSS中也有hidden关键字, 也可以在表达中利用hidden格式使得用户提交的时候,要获取到某些信息。 如;<input type='hidden' value=${ xx.id}/> 3.在利用<a>标签的时候可以将href属性的值设置为javascript:void(), 可以使得href属性失落效,但是不会影响到a连接的特性 4.在Servlet开拓中在EL表达式里要善用三元运算符