以下内容为个人的学习笔记整理,如有错误,请指出,谢谢~
一、jsp
1、jsp概念:是建立在Servlet规范之上的动态网页开发技术。在jsp中,html和java代码共同存在,html实现静态内容,Java用来实现网页动态内容。文件扩展名为.jsp。
2、基本语法
①jsp模板元素:其静态html内容称为jsp模板元素。jsp模板元素定义了网页的基本骨架。
②scriptlet元素:在jsp页面中,使用<% %>格式嵌套java代码。
注意:使用<%=expression%>格式,在Scriptlet中声明变量是在服务方法之内的局部变量。
使用<%!Java代码 %>格式,被声明的Java代码将被翻译到Servlet的_jspService()方法之外,即在JSP声明中定义的都是成员方法、成员变量、静态方法、静态变量、静态代码块等。
③page指令:在JSP页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,JSP页面采用的语言等,可以通过page指令来实现,语法格式:<%@ page 属性名= "属性值"%>
常用属性名有:
④可以在xml文件中配置页面错误转跳页面:
⑤include指令:
有时候需要在JSP页面静态包含一个文件,例如HTML文件,文本文件等,可以通过include指令来实现,语法格式:<%@ include file="relativeURL"%>
其中file属性用于指定被引入文件的相对路径,如果以"/"开头,表示对于当前web应用程序的根目录。被引入的文件必须遵循jsp语法,其中可以是静态hrml,jsp脚本元素和jsp指令等普通jsp页面所具有的一切内容。除了指定元素,被引入的文件中其他元素被换成相应的java代码,然后插入当前jsp页面所翻译的servlet源文件中,插入位置与include指令在当前jsp页面中位置保持一致。
3、jsp的九个隐式对象:
①out对象:在jsp页面中,向客户端发送文本内容的时候可以使用out对象,out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。所以如果response.getWriter().println("")和out.println("")相比下,会让前者先输出。
除非加
那么就可以按顺序输出了。
②requst对象:
String getParameter(String name):根据页面表单组件名称获取请求页面提交数据
String[ ] getParameterValues (String name):获取页面请求中一个表单组件对应多个值时的用户的请求数据
Enumeration getParameterNames( ):获取请求所有参数
getSession([boolean]):获取、创建会话
setAttribute(属性,属性值) :设置请求属性
getAttribute(属性) :获取请求属性
③response对象:
void setContentType (String name):设置作为响应生成的内容的类型和字符编码void sendRedirect (String name):发送一个响应给浏览器,指示其应请求另一个URL(重定向)
④session对象:web服务器为单个用户发送的多个请求对话,存储有关用户会话的所有信息。
setAttribute(String name,Object value)
getAttribute(String name)
getId()
inValidate()
removeAttribute(String name)
⑤application对象 :作用在jsp页面所属的应用程序(类似于servletcontext)
setAttribute(String name,Object value)”以键/值的方式,将一个对象的值存放到
application中getAttribute(String name):根据名称去获取application中存放对象的值
⑥pageContext对象:使用户可以访问页面作用域中定义的所有隐式对象,它的作用范围是在同一个页面。
除了可以获取隐式对象,还提供了存储数据的功能:
注意:参数scope指定的是属性的作用范围有四个值:
pageContext.PAGE_SCOPE:表示页面范围
pageContext.REQUEST_SCOPE:表示请求范围
pageContext.SESSION_SCOPE:表示会话范围
pageContext.APPLICATION_SCOPE:表示Web应用程序范围
当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找(从小到大),如果找到,则返回属性的名称,否则返回null。
⑦page对象:代表jsp正在运行所产生的类对象本身,只在jsp页面中使用。page对象本质上包含当前servlet接口引用的变量,类似于this。
⑧config对象:存储在编译jsp页面过程中创建的servlet信息,提供了检索servlet初始化参数的方法。
⑨exception对象:在jsp页面在,经常需要处理一些异常信息,可以通过exception对象实现。封装jsp抛出的异常信息,其只能在错误处理页面才可以使用(page指令中指定了属性<%@ page isErrorPage=”true”%>的页面)
4、jsp的标准动作
①jsp动作利用xml语法格式的标记来控制servlet引擎行为,利用jsp动作可以动态的插入文件、重用Javabean组件,把用户请求重定向到另外的页面、为Java插件生成html代码。
常用有:<jsp:include>、 <jsp:param>、 <jsp:forward>、 <jsp:useBean>、 <jsp:setProperty> 、<jsp:getProperty>
②<jsp:include>:用来把指定文件(文本、html、jsp)插入正在生成的页面中,还可以向被加载的jsp文件传递参数。
page:<jsp:include>动作的必选属性,指明要包含文件的路径;
flush属性:用于指定输出缓存是否被转移到被导入的文件,为true时,则包含在被导入文件,为false时,则包含在源文件中。
③<jsp:include>和<jsp:param>一起使用:
④<jsp:forward>:请求转发到另一个页面,在请求的过程中会连同请求的参数一起转发到目标页面,只有一个page属性:
<jsp:forward page="relativeURL" /> 或者
<jsp:forward page="fileName"">
<jsp:param name="paramName" value="paramValue"/>
</jsp:forward>
二、javabean
1、JavaBean是java开发语言中一个可以重复使用的软件组件,本质就是一个java类。用其实现业务功能的扩展,使jsp页面干净简洁。
2、标准JavaBean组件需要遵循的编码规范:
①必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。
②提供公共的setter和getter方法让外部程序设置和获取JavaBean的属性。
3、<jsp:useBeaan>标签用于某个指定域范围(pagecontext/requst/session/application)中查找一个指定名称的JavaBean对象,如果存在则返回对象的引用,如果不存在则实例化一个新的JavaBean对象并将它按照指定的名字存储在指定域的范围中。
4、<jsp:setProperty>标签为 bean的属性赋值
①指定属性名,为其赋值:<jsp:setProperty name="对象名" property="属性名" value="属性值 ">
其对象名跟usebean中的id是一样的。
②属性名为请求参数名:
③利用param属性,把指定属性名设置为一个请求参数的值:
<jsp:setProperty name=“id” property=“属性名” param=“请求参数名”/>
④所有请求参数名与bean属性名相同
<jsp:setProperty name=“id” property=“*”/>
5、<jsp:getProperty>标签获取bean的属性值:
三、EL标签
1、jsp页面中经常利用jsp表达式<%=%>来输出声明的变量以及页面传递的参数,当变量很多的时候,就会变得累赘,EL标签简化了表达式。如果在某个页面中禁止EL标签,可通过page指令设置:<%@page isELIgnored=”true” %>
EL标签语法形式:${参数名}
2、EL标签的功能;
①可以访问jsp中不同域的对象。
②可以访问javabean中的属性。
③可以访问集合元素。
④支持简单的运算符操作。
3、EL标签的隐式对象有12个:
①pageContext:与JSP中的pageContext对象相同,可以获取其它对象。
②与范围有关的4个:
pageScope、requestScope、sessionScope、applicationScope它们基本上和JSP的pageContext、request、session和application一样,JSP中的4个对象除获取属性外,还可以有其它用途,例如:JSP中的request对象除可以存取属性之外,还可以取得用户的请求参数或表头信息等等。 但是在EL中,它就只能单纯用来取得对应范围的属性值,
例如: ${sessionScope.username}可获取session 中名为username的属性值,相当于JSP 中的session.getAttribute("username")
③与输入有关的2个:
param:按名称存储请求参数单一值的Map类
paramValues:请求参数的所有值构成的String数组
例如:
${param.name} 相当于:request.getParameter(“name”)
${paramValues.hobby} 相当于:request.getParameterValues(“hobby”)
④与请求头有关的2个:
header:请求头参数值的Map类。例如:${header.host}
header Values:请求头参数的所有值构成的 String 数组
⑤获取web应用程序初始参数的隐含对象:initParameter
例如:${initParam.userid} 相当于
String userid = (String)application.getInitParameter(“userid”);
用来获得名为userid的web上下文参数
⑥获取Cookie对象的隐含对象:
例如:要取得cookie中有一个名color的值,可以使用${cookie.color}来获得
四、JSTL标签库
1、jstl是Apache的jakarta小组开发的一个开源jsp标准标签库,是一组与html标签相似但又比html标签强大的功能的标签,编程人员可以通过它编写出动态的jsp页面。
2、优点:
①简化jsp和web程序的开发,本需要大量的java代码完成的功能,可以用少量jstl代码代替。
②jstl可读性强,易于理解。
桑拿利用jstl标签编写的web程序易于维护。
3、jstl两种使用方式:
①官网下载,将jstl.jar和standard.jar添加到项目中,如果需要Tomcat中所有项目都能使用JSTL,将两个jar包拷贝到Tomcat安装目录中的lib文件夹中;
②在pom.xml添加依赖
4、在jsp页面中使用JSTL标签,需要使用taglib指令,例如引入核心库(core),格式如下:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
5、 jstl标签中的标签库主要分为五类:
①core标签库(核心):包括通用标签(输出标签)、流程控制标签和循环控制标签。
②fmt标签库:包括格式化、国际化标签。
③fn标签库:函数标签库。
④xml标签库:有关xml操作的标签库。
⑤sql标签库:操作数据库的标签库。
6、<c:out>标签:用于显示数据的内容,类似于<%=%>,使用方式为:
<c:out value=“… “ escapeXml=“true|false” default=“缺省值”/>或者
<c:out value=“… “ escapeXml=“true|false” >
缺省值
</c:out>
注意:
①只有当value的值为空时,才会输出缺省值;
②default属性不能与标签体同时出现;
③escapeXml属性值为false,以下字符不转为字符串输出
<(<) >(>) &(&) ‘(') “(")
7、c:set标签:用于在某个作用域范围中设置某个值,或者设置某个对象(JavaBean、Map)的属性。
①<c:set>中不能同时有var和target属性(要么设置某个变量的值,要么设置某个对象的属性)
②scope是可选的,默认为page
③如果value为null,var指定的属性将被删除
删除变量的话:
8、<c:if>标签:用于if条件语句测试,无else匹配有局限性。
<c:if test="条件表达式" var="true/false" scope="范围" >或者
<c:if test="条件表达式" var="true/false" scope="范围" >
标签体
</c:if>
9、<c:choose>标签:用于条件选择,常常和<c:when>以及<c:otherwise>使用。
10、<c:forEach>标签:对某一段标签体内容遍历多次或者遍历一个对象集合。
①var变量名存放每一次迭代的内容;
② varStatus(属于loopTagStatus类,其中属性count、index、last、first):用来保存当前迭代的状态。
11、forTokens标签:遍历一组由指定分隔符隔开的字符串,类似于Java中的split()方法。
12、<c:catch>标签:用于异常捕获
13、<c:url>标签:将URL格式化为一个字符串,然后存储在一个变量中
14、<c:import>标签:提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。
15、
16、fn标签库使得处理字符串变得简单。
若要使用fn标签库,需要在jsp页面的头部加入如下语句: