15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > JavaWeb之JSP

JavaWeb之JSP

时间:2023-07-07 12:36:02 | 来源:网站运营

时间:2023-07-07 12:36:02 来源:网站运营

JavaWeb之JSP:+ 概念:

1)JSP(Java Server Page)是Java服务器端动态页面技术。是sun公司制订的一种服务器端的动态页面生成技术规范。




2)为什么要使用JSP:因为直接使用Servlet,虽然也可以生成动态页面。但是,编写繁琐(需要使用out.println来输出),并且维护困难(如果页面发生了改变,需要修改Java代码),所以sun指定了JSP规范。




3)与Servlet的关系:JSP其实是一个以.jsp为后缀的文件,容器会自动将.jsp文件转换成一个.java文件(其实就是一个Servlet),然后调用该Servlet。所以,从本质上讲,JSP其实就是一个Servlet。




4)编写:

① 创建一个以“.jsp”为后缀的文件。

②在该文件里面,可以添加如下的内容:

—> HTML(CSS、JS):直接写即可

—> Java代码:

形式一:Java代码片段:<% Java代码 %>

形式二:JSP表达式:<%= Java表达式 %>

形式三:JSP声明:<%! %>

③指令:通知容器,在将.jsp文件转换成.java文件时,作一些额外的处理,比如导包。

—> 语法:<%@指令名称 属性名=属性值 %>

—> import属性:导包。

—> contenType属性:设置response.setContentType的内容。

—> pageEncoding属性:告诉容器.jsp的文件的编码格式,这样,容器在获取jsp文件的内容(即解码)时,不会出现乱码。最好加入,有些容器默认以ISO-8859-1编码。

—> session属性:true/false,缺省值true,如果值为false,则容器不会添加获得session的语句。

—> isELIgnored属性:true/false,缺省值true,如果值为false,则告诉容器不要忽略el表达式。J2EE5.0需要使用isELIgnored=“false",否则EL表达式无效

—> isErrorPage属性:true/false,缺省值false,如果值为true,表示这是一个错误处理页面(即专门用来处理其他JSP产生的异常,只有值为true时,才能使用exception隐含对象去获取错误信息)。

—> include指令:<%@include file="head.jsp" %>

file属性:

①对于页面的公共部分,我们可以使用相同的jsp文件,并使用include指令导入,如此实现代码的优化。

②告诉容器,在将.jsp文件转换成.java文件时,在指令所在的位置插入相应的文件的“内容“(由file属性来指定)。插入的页面并未运行,而是机械的将内容插入。

—> errorPage属性:设置一个错误处理页面。<%@page errorPage="a4.jsp" %>

—> taglib指令:<%@taglib uri="命名空间" prefix="前缀" %>

①uri:在standard.jar/META-INF/c.tld中查找,

②prefix:前缀,用于代表命名空间。

—> jsp:include: <jsp:include page="common/base.jsp" flush=“false"/>

【flush:默认为 false。在同一个 JSP 中,如果不断 include 自己(源文件),在逻辑上会形成死循环。若默认情况下,服务器会等待该文件被读到底端,然后才输出到客户端,并且销毁该次访问的 request 和 response。而当把flush 属性赋为真值时,在缓存累积了一定数据时,服务器会先提供一部分数据给浏览器,并等待后续内容。

由此可以得出结论,在简单页面中,该属性不纳入考虑,而在页面包含大量数据时,为缩短客户端延迟,可将一部分内容先行输出。该属性在 Servlet 中也有对应的应用。】




5)如何运行:

①容器依据.jsp文件生成.java文件(也就是先转换成一个Servlet):

1)HTML(CSS、JS)放到service方法里,使用out.write输出

2)<% %>也放到service方法里,照搬,不改动。

3)<%= %>也会放到service方法里,使用out.print输出。

4)<%! %>给Servlet添加新的属性或者新的方法(转成.java文件后,声明内的部分添加在service方法之外)。 这样就把一个JSP变成了一个Servlet容器。

②容器接下来就会调用Servlet来处理请求了(会将之前生成的.java文件进行编译、然后实例化、初始化、调用相应的方法处理请求)

③隐含对象:

—> 所谓隐含对象(共9个),指的是在.jsp文件里面直接可以使用的对象,比如out、request、response、session、application(ServletContext上下文)、exception、pageContext、config、page。

* exception:当jsp页面运行时发生了异常,容器会将异常信息封装到该对象,可以使用该对象提供的方法来输出异常的信息。另外,必须在页面设置isErrorPage=“true"指令才能使用该隐含对象。

* pageContext:容器会为每一个JSP实例(JSP所对应的那个Servlet对象)创建唯一的一个符合pageContext接口的对象,称之为page上下文。该对象会一直存在,除非JSP实例被销毁。它作用:

①绑定数据(绑定的数据只有对应的JSP实例才可以访问):setAttribute、removeAttribute、getAttribute。

②找到其他八个隐含对象

—> 之所以能直接使用这些对象,是因为容器会自动添加创建这些对象的代码。(JSP仅仅是个草稿,最终会变为一个Servlet。)




+ 注释:

1)<!-- 注释内容 —>:允许注释的内容是Java代码,如果是Java代码,会被容器执行,但是执行的结果会被浏览器忽略(不会显示出来)

2)<%-- 注释内容 --%>:注释的内容不能是Java代码,如果是Java代码,会被容器忽略。




+ JSP标签:sun公司制定的一种技术规范,利用JSP标签(类似于HTML标签)来代替JSP中的Java代码。这样作的好处是,JSP页面会更加简洁,并且更好维护,jsp标签可以复用。

+ JSTL:Java Standard Taglib(Java标准标签库,apache开发了一套标签,捐献给了sun,sun将其命名为JSTL)

—> 使用:

① 将JSTL标签对应的jar(标签类)文件拷贝到WEB-INF/lib下,standard.jar、jstl.jar

② 使用taglib指令引入JSP标签




+ EL表达式:是一套简单的计算规则,用于给JSP标签的属性赋值,也可以直接输出。使用:

1) 访问bean的属性:

—> 第一种方式:例如:${user.name},容器会依次从4个隐含对象中pageContext、request、session、application中查找(getAttribute)绑定名为”user"的对象。接下来,会调用该对象的"getName"方法(自动将n变大写然后加get),最后输出执行结果。

* 优点:

①会自动将null转换成”"输出。

②如果绑定名称对应的值不存在,会不报null指针异常,会输出”"。

【注意::依次是指先从pageContext中查找,如果找不到,再查找request,如果找到了,则不再向下查找。如果要指定查找范围,可以使用pageScope、requestScope、sessionScope、applicationScope来指定查找的范围。】

—> 比如${user[“name"]},与第一种方式是等价的!

* 优点:

①中括号[]里面可以出现变量。

②中括号[]里面可以出现下标从0开始的数组。

【注意:中括号[]里的字符串用双引号、单引号都可以;EL表达式中没引号的为变量,有引号的为字符串】

2)进行一些简单的计算,计算的结果可以用来给JSP标签的属性赋值,也可以直接输出。

①算术运算:“+”、“-”、“*”、“/”、“%”;【+”号操作不能连接字符串。】

②关系运算:“>”、“>=”、“<”、“<=”、“!=”、”==“;【“eq”也可判断是否相等】

③逻辑运算:"&&"、"||"、"!" ,与Java中的一样

④empty运算:判断是否是一个空字符串,或者是一个空的集合,如果是,返回true。【为true:A.空字符串。B.空集合。C.null。 D.根据绑定名找不到值。】

3)获取请求参数值:

①${param.username}等价于request.getParameter(“username");

②${paramValues.city}等价于request.getParameterValues("city");




+ JSTL中的核心标签

—> if:<c:if test="" var="" scope=“”></c:if>//当test属性值为true,执行标签体的内容,test属性可以使用EL表达式。

* var属性:用来指定绑定名称。

* scope属性:指定绑定范围,可以是page(pageContext)、request、session、application

【注意:可以在if标签里写Java代码。】

—> choose:

<c:choose><!-- 用于分支,当满足某个条件,执行某一个分支 --> <c:when test=""><!--分支,可多次出现 --> </c:when>...<c:otherwise><!-- 当其他分支都不满足条件,则执行该标签的内容 --></c:otherwise> </c:choose>


【注意:when和otherwise必须要放到choose标签里面才能使用;when可以出现1次或者多次,otherwise可以出现0次或者1次,表例外】


—> forEach :

1)遍历集合: <c:forEach var="" items="" carStatus=""></c:forEach>

① items 属性:用来指定要遍历的集合,可以使用EL表达式。

② var 属性:指定绑定名,绑定范围是pageContext,绑定值是从集合中取出的某个元素。

③ carStatus 属性:指定绑定名,绑定范围是pageContext,绑定值是一个由容器创建的一个对象,该对象封装了当前迭代的状态。比如,该对象提供了getIndex、getCount方法,其中,getIndex会返回当前迭代的元素的下标(从0开始),getCount会返回当前迭代的次数(从1开始)。

2)指定位置迭代: <c:forEach var="" begin="" end=“"></c:forEach>

① begin :如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。

② end :如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。

【注意:forEach还一个属性为 step=“" :迭代的步长。】

—> url : <c:url value="">

①当用户禁止cookie以后,会自动在地址后面添加sessionId。

②当使用绝对路径时,会自动在地址前添加应用名。

③ value 属性:指定地址,在表单提交、链接当中,可以使用该标签。

—> set : <c:set var="" scope="" value=“”> , 绑定一个对象到指定的范围。

// value 属性:绑定值。

—> remove : <c:remove var="" scope=“"> , 解除绑定。

—> catch : <c:catch var=“"> , 处理异常,会将异常信息封装成一个对象,绑定到pageContext对象上。

—> import : <c:import url=“">

* url 属性:指定一个 jsp 文件的地址, jsp 会在运行时调用这个 jsp 。

—> redirect : <c:redirect url=“"> ,重定向到另外一个地址。

* url 属性:指定重定向的地址。

—> out : <c:out value="" default="" escapeXml=“"> , 用于输出 el 表达式的值。

* value 属性:指定输出的值。

* default 属性:指定缺省值

* escapeXml 属性:设置成 true ,会将 value 中的特殊字符替换成相应的实体。缺省值就是 true 。




+ JSP标签运行原理:

容器依据命名空间找到标签的描述文件( .tld 文件),接下来,依据标签的名称找到标签类的类名,然后将该标签实例化,最后,调用标签实例的相应的方法。

【注意:容器会从 WEB-INF 下查找,如果找不到,还会查找 WEB-INF/lib 下的 jar 文件。】

+ 自定义标签:

1) 写一个 Java 类(标签类),且必须继承 SimpleTagSupport 类

2)在 doTag 方法里面(覆盖 doTag 方法),编写相应的处理逻辑。标签有哪些属性,则标签类也有哪些属性,并且类型要匹配。此外,这些属性必须提供相应的 set 方法

3)在 .tld 文件当中,描述该标签。 .tld 文件可以放在 WEB-INF 下(或它的子文件夹下),也可以放到 META-INF 下,可以参考 c.tld 文件来写。





关键词:

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭