【JSP】学习笔记
目录
【JSP】学习笔记
二、JSP代码使用小贴士
三、JSP指令与动作类型
四、Responce对象的redirect方法(sendRedirect函数)与forward指令方法的区别
五、session对象与application对象
六、servlet编程
一、JSP中主要的代码形式
类型 | 代码形式 |
JSP注释 | <%-- --%> |
JSP表达式 | <%=变量/返回值/表达式> |
JSP程序段 | <% Java代码 %> |
JSP声明变量、方法、类 | <% !代码 %> |
JSP指令 | <% @指令类别 属性值=" " .... %> |
二、JSP代码使用小贴士
- JSP程序段不能定义函数。
- JSP表达式不能以";"结束。
- JSP表达式不能出现多条语句。
- JSP表达式中内容只能为字符串类型。
三、JSP指令与动作类型
- JSP指令:page/include/taglib
- JSP动作:include/forward/useBean/setProperty/getProperty/plugin
四、Responce对象的redirect方法(sendRedirect函数)与forward指令方法的区别
- redirect方法属于客户端操作,会改变浏览器的地址显示;forward属于服务器端操作,不会改变浏览器的地址显示。
- redirect方法不能使当前页面与目标页面共享request中的数据,但forward方法可以共享。
- redirect方法可以重定向到当前应用程序的其他资源或其他应用程序的资源,如百度页面;但forward方法只能在同一个web应用程序的资源间转发请求。
- redirect方法效率较低,forward方法效率较高。
五、session对象与application对象
1.session对象存储在客户端,可以实现“跨页面保持”。

session原理图(图源于网络,侵删)
2.application存储在服务器端,可以实现所有用户共享对象。(狗头)
application原理图(图源于网络,侵删)
六、servlet编程
1.生命周期:init()初始化、service()调用get或post请求方法、destroy()消亡。
Servlet生命周期图(图源于网络,侵删)
2.设置欢迎页面
在web.xml中找到welcome-fle-list标签下的welcome-file字段中设置即可。部署后,浏览器地址栏的输入方法可以有两种。例如http://localhost:8888/Prj/cart3.jsp或http://localhost:8888/Prj/都可以进入同一个欢迎页面。
3.在Servlet中读取参数
- 全局参数(必须放在web.xml的最上面!)
<context-param>
<param-name>全局参数名称</param-name>
<param-value>全局参数值</param-value>
</context-param>
获取全局参数的方法如下:
ServletContext application = this.getSerletContext();
application.getInitParameter("参数名称");
- 局部参数
<servlet>
<servlet-name>Servlet名称</servlet-name>
<servlet-class>Servlet类路径</servlet-class>
<init-param>
<param-name>局部参数名称</param-name>
<param-value>局部参数值</param-value>
</init-param>
</servlet>
获取局部参数的方法如下:
this.getInitParameter("参数名称");
七、JavaBean
- 定义JavaBean
<jsp:useBean id="idName(实例名称)" class="package.class" scope="page|session|..."></jsp:useBean>
- 设置JavaBean属性
1.值的来源是String常量时,设置方法如下
<jsp:setProperty property="属性名称" name="对象名" param="常量" />
2.值的来源是request参数时,设置方法如下:
<jsp:setProperty property="属性名称" name="对象名" param="参数名" />
- 获取JavaBean属性
<jsp:getProperty property="属性名称" name="bean对象名" />
八、EL与JSTL
1.EL(作用于JSP表达式相同)
1.1基本运算符
EL的运算符"."与"[]"功能几乎一致,但有两种情况只能使用"[]"运算符:
- 当存取的数据的名称中包含特殊字符(字母与数字符号以外的);
- 当动态取值时,如${sessionScope.对象名[param]},其中param是变量参数。
在使用关系运算符时,判断两个变量是否相等只能采取第一种形式,不能采取另外两种形式。
- ${ 变量1 == 变量2 }
- ${变量1} == ${变量2}
- ${ ${变量1} == ${变量2} }
empty运算符,即$ { empty A }只有当A为null/不存在/空字符串/空数组时才会返回true,其他情况返回false。
1.2数据访问
JSP中存在四种作用域:pageScope、requestScope、sessionScope、applicationScope。使用方法是$ { XXXScpoe.对象}。
- 注意:当在不同作用域存在同名对象时,会按以下顺序查找:pag=>request=>session==>application。
EL中定义了五个隐含对象,在数据访问时可以调用这些对象,包括pageContext/param/paramValues/cookie/initParam,调用方式如$ { cookie.对象名称.属性名称 }
2.JSTL
2.1.JSTL标签库
JSTL | 推荐前缀 | URI | 范例 |
---|---|---|---|
核心标签库 | c | http://java.sun.com/jsp/jstl/core | < c:out > |
I18N标签库 | fmt | http://java.sun.com/jsp/jstl/fmt | < fmt:formatDate> |
SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql | < sql:query > |
XML标签库 | x | http://java.sun.com/jsp/jstl/xml | < x:forBach > |
函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | < fnL:sqlit > |
注意:引入标签库时,需要在page指令之后加入taglib指令
2.2.核心标签库
2.2.1显示数据:<c:out value="变量名" escapeXml="true"></c:out>,escapeXml属性为false ,不会显示HTML标签。
2.2.2赋值数据:<c:set value="变量值" scope="session" var="变量名"></c:set>
2.2.3删除变量:<c:remove var="变量名" scope="session" ></c:remove>
2.2.4流程控制
- 简单条件
<c:if test = "${判断条件}">..........</c:if>
- 复杂条件
<c:choose>
<c:when test="${条件1}">代码段</c:when>
...
<c:when test="${条件n}">代码段</c:when>
<c:otherwise>代码段</c:otherwise>
</c:choose>
- 循环控制
<c:forEach var="元素名" items="集合名" begin="起始" end="结束" step="步长">
代码段
</c:forEach>
九、AJAX
AJAX实现的核心代码有五个步骤,实例如下 。
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<SCRIPT LANGUAGE="JavaScript">
function showInfo(){
var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//步骤一:在IE中实例化Msxml2.XMLHTTP对象
xmlHttp.open("GET", "info.jsp", true);//步骤二:指定异步提交的目标和提交方式
xmlHttp.onreadystatechange=function() {//步骤三:指定xmlHttp状态改变时的处理方法
if (xmlHttp.readyState==4) {//步骤四:编写处理方法代码
infoDiv.innerHTML = xmlHttp.responseText;
}
}
xmlHttp.send();//步骤五:发出请求
}
</SCRIPT>
</body>
</html>