JSP

本文详细介绍了JSP的工作原理,包括其编译过程、指令、隐含对象、EL表达式及JSTL的使用,帮助读者理解JSP如何处理页面内容和用户请求。

JSP文件最终会被容器编译为一个servlet类

JSP文件内的html代码会被编译成out.write()输出

<% java代码%>

<%=java表达式%>

<%! 声明属性或方法 %> 

指令:

<%@ page import="包名,包名"%> 导包

<%@ page ContentType="text/html;charset=utf-8"%> 设置JSP源文件和响应正文的字符集编码及mime类型。

<%@ page pageEncoding="UTF-8"%> 设置JSP源文件本身和响应正文中的字符集编码。

<%@ page errorPage="***.jsp" %>用来指定一个异常处理页面,当页面发生异常则容器会调用该异常处理页面。

<%@ page isErrorPage="true" %>默认不写值为false,如果值为true,则可以使用exception隐含对象

<%@ page session="false" %>默认不写值为true,如果值为false,则servlet不再添加获得session对象的代码了,也就不能够使用session隐含对象了

<%@ include file="url" %> 插入JSP或HTML代码片段

<%@ taglib uri="必须与描述文件内uri值相同" prefix="c"> prefix:别名

隐含对象:

对象

描述

request

HttpServletRequest类的实例

response

HttpServletResponse类的实例

out

PrintWriter类的实例,用于把结果输出至网页上

session

HttpSession类的实例

application

ServletContext类的实例,与应用上下文有关

config

ServletConfig类的实例

pageContext

PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

page

类似于Java类中的this关键字

Exception

Exception类的对象,代表发生错误的JSP页面中对应的异常对象

web.xml配置

<servlet>
    <servlet-name>myjsp</servlet-name>
    <jsp-file>/myjsp.jsp</jsp-file>
    
    <!--此参数只能通过此配置访问才能或得到-->
    <init-param>
        <param-name>name</param-name>
        <param-value>tom</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>myjsp</servlet-name>
    <url-pattern>/myjsp</url-pattern>
</servlet-mapping>

pageContext:

容器会为每一个jsp实例创建唯一的一个符合pageContext接口要求的实例对象,该对象一般称之为页面上下文。

页面上下文有两个特点:

唯一性:一个jsp实例对应一个pageContext

持久性:只要jsp实例还在pageContext就一直存在

excepiton:

对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。

使用exception对象需要在产生异常的页面添加<%@ page errorPage="***.jsp" %>指令来指定一个处理异常的页面,

该处理异常页面需要添加<%@ page isErrorPage="true" %>指令才能使用exception隐含对象

注释:

<!-- 注释内容 --> 被注释的内容如果是java代码,java代码会执行。

<%-- 注释内容 --%>被注释的内容如果是java代码,java代码不会执行。

el表达式:

el表达式是一套简单的运算规则,用于给jsp标签的属性来赋值,也可以脱离jsp标签,直接使用。

使用el表达式读取Javabean的属性

方法一:${user.username}

方法二:${user['username']} 等价于${user.username},另外,[]里面可以出现绑订名,比如${user[s1]}。[]里面还可以出现从0开始的下标,用于访问数组中的指定下标的某个元素。

执行过程:默认情况下容器会依次从pageContext-->request-->session-->application中查找绑订名为"user"的对象,找到之后,调用该对象的"getUsername"方法。可以通过pageScope、requestScope、sessionScope、applicationScope来指定查找的范围。比如:${pageScope.user.username}

优点:会将null转换成""空字符串输出。如果依据绑订名找不到对应的对象,不会报空指针异常(会输出"")。

算术运算符:+ - * / % 这里 “+” 只能求和 若是字符串相加 servlet会将其先转换成数值再进行相加,若不能被转换则抛出异常

关系运算符 逻辑运算符与Java相同

empty运算符 用于判断集合内容是否为空,或者一个字符串是否内容为空。

读取请求参数值:

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

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

 

标签:

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

jstl的使用

1.导入jstl相关的jar包

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

2.使用taglib指令引入使用的标签:

uri:jstl的jar包内META-INF文件夹下c.tld文件内<uri>的值;prefix:别名

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

3.使用:<c:if test="true">test属性为true则执行标签体内的内容,test属性值可以用el表达式<c:if>

自定义标签:

1.写一个java类继承SimpleTagSupport,标签有哪些属性,标签类也要有相应的属性,属性名要相同,并且提供set方法

2.重写doTag方法,添加响应的处理逻辑,通过继承自SimpleTagSupport类提供的方法来获得PageContext,PageContext提供获得其它所有隐含对象的方法。

3.添加描述标签,在标签描述文件(即.tld文件)中,描述该标签。

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
	version="2.1">

	<tlib-version>1.1</tlib-version>
	<short-name>c1</short-name>
	<uri>http://tedu.cn/tag</uri>

	<tag>
		<name>hello</name>
		<tag-class>tag.HelloTag</tag-class>
		<!-- 
		body-content用来告诉容器,标签有无标签体,如果有标签体,内容是什么
		empty:该标签没有标签体
		scriptless:该标签有标签体,但是,标签体的内容不能够出现java代码
		JSP:该标签有标签体,并且标签体里面可以出现java代码。只有复杂标签技术才支持该值,简单标签技术只支持empty和scriptless。
		 -->
		<body-content>empty</body-content>
		<attribute>			
			<name>info</name>
			<!-- 
				如果值为true,表示该属性必选,如果值为false,表示该属性可选。
			 -->
			<required>true</required>
			<!-- 
				如果值为true,表示该属性可以动态赋值(比如可以使用el表达式来赋值)
			 -->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>qty</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值