jsp基础语法
一、注释
在 JSP 中支持两种注释的语法操作,一种是显示注释,这种注释是允许客户端看见的;另一种是隐式注释,此种注释是客户端无法看见的
① 显示注释语法:从 HTML 风格继承而来
<!-- HTML 风格的注释 -->
② 隐式注释语法:从 JAVA 风格继承;JSP 自己的注释
// 注释,单行注释
/* 多行注释 */
<%-- JSP 注释 --%>
二、Scriptlet
在 JSP 中最重要的部分就是 Scriptlet(脚本小程序),所有嵌入在 HTML 代码中的 Java 程序都必须使用 Scriptlet 标记出来,在 JSP 中一共有三种 Scriptlet 代码:
-
第一种:<% %> :java 脚本段,可以定义局部变量、编写语句
注:通过JSP引擎翻译后,其实就是写在了_jspService()方法体里面。
-
第二种:<%! %>:声明,可以定义全局(成员)变量、方法、类
注:通过JSP引擎翻译后,其实就是写在了类体里面。
-
第三种:<%= %>:表达式,数据、一个变量或具体内容
通过观察解析为 java 文件的 jsp 代码理解三种小脚本
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP-scriptlet 脚本小程序</title>
</head>
<body>
<%
int a = 0;
int b = 1;
System.out.println(a+b);
response.getWriter().write(""+(a+b));
out.write(""+(a+b));
%>
<%!
int c = 8;
%>
<%="hellojsp" %>
</body>
</html>
三、 JSP 的指令标签
动作标签,它们被编译成执行某个操作的 Java 代码,例如访问某个 Java 对象,或者调用某个方法。JSP 容器有自己支持的标准动作。除标准动作之外,还可以创建指定的标签,用来执行某些操作。这些 jsp 的动作标签,与 html 提供的标签有本质的区别:
-
动作标签是由 tomcat(服务器)来解释执行!与 java 代码一样,都是在服务器端执行
-
html 由浏览器来执行!
格式如下:
<jsp:action_name attribute="value" />
3.1 include
静态包含
<%@include file="hello.jsp" %><!-- 相对路径 -->
<%@include file="index.jsp" %>
<%@include file="include.html"%>
静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样。
动态包含
动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当页面被请求的时候时,
才会动态包含进来,好比方法的调用。
<jsp:include page="include.jsp"></jsp:include>
注意:动态包含,中间不要加任何内容,包括空格,除非确认要使用参数,否则报错!
<jsp:include page="include.html"></jsp:include>
<%
String a = "hello.jsp";
%>
<jsp:include page="<%=a%>"></jsp:include>
使用动态包含还可以通过在页面之间传参。接收参数通过 request.getParameter(name) 来完成。
<jsp:include page="include.jsp">
<jsp:param value="zhangsan" name="uname"/>
</jsp:include>
<%=request.getParameter("uname"); %>
3.2 forward
forward 动作用于请求转发,可以将一个用户的请求(request),从一个页面传递到另一个页面,跳转的语法:
<!-- 不传参数 -->
<jsp:forward page="要转到的资源路径|<%=表达式%>"></jsp:forward>
<!-- 传参数 -->
<jsp:forward page="要转到的资源路径|<%=表达式%>">
<jsp:param value="参数内容" name="参数名称"/>
</jsp:forward>
jsp 的 forward 动作标签,其作用的理解可以等价于 Servlet 域对象 HttpServletRequest 的请求转发,即 request.getRequestDispatcher(“要转到的资源路径”).forward(request, response);
3.3 useBean
useBean 动作用来装载一个将在 JSP 页面中使用的 JavaBean。相当于创建了一个 JavaBean 对象,但是还没有进行属性设置,属性的设置和获取可以通过 jsp:setProperty 和 jsp:getProperty 动作标签来完成。
<jsp:useBean id="user" class="com.xxx.po.User">
<!--
相当于
if(user == null){
user = new User();
}
-->
</jsp:useBean>
属性 | 描述 |
---|---|
id | 指定Bean的别名 |
class | 指定Bean的完整包名。 |
type | 指定将引用该对象变量的类型。 |
beanName | 通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。 |
3.4 setProperty
setProperty 动作用来设置已经实例化的 Bean 对象的属性,可以使用如下两种方式。
①在 jsp:useBean</jsp:useBean> 后使用 <jsp:setProperty />
<jsp:useBean id="user" class="com.xxx.po.User"></jsp:useBean>
<jsp:setProperty property="uname" name="user" value="张三"/>
②<jsp:setProperty /> 出现在 jsp:useBean</jsp:useBean> 标签内
<jsp:useBean id="user" class="com.xxx.po.User">
<jsp:setProperty property="uname" name="user" value="张三"/>
</jsp:useBean>
注意:
<jsp:setProperty /> 中的 name 值要与 < jsp:useBean > 中的 id 值相同
<jsp:useBean >里面的代码,初始化的时候执行一次
3.5 getProperty
getProperty 动作用来获取指定 Bean 属性的值,转换成字符串,然后输出。
<jsp:useBean id="user" class="com.xxx.po.User"></jsp:useBean>
<jsp:setProperty property="uname" name="user" value="张三"/>
<jsp:getProperty property="uname" name="user"/>
注意:
1、在使用 <jsp:getProperty /> 之前,必须使用 jsp:useBean</jsp:useBean> 创建该对象,若没有进行赋值则为 null;若不创建,则会 500 报错。
2、setter 和 getter 存在且符合规范
四、 EL表达式
格式 | 作用 |
---|---|
${域对象中键的名称 } | 返回域对象中指定键对应的值 |
${域对象中键的名称.属性名 } | 获取域对象中对象指定属性对应的值 |
${empty 键的名称 } | 判断域对象中指定键对应的值是否为空 |
${键1==键2 } | 判断域对象中指定键对应的值是否相等 |
注意:
从小到大获取域对象中的数据,如果都没有则显示"",获取指定域对象中的数据:${域对象名称Scope.uname }
el表达式获取指定域对象中的值:
pageContext中:${pageScope.uname }
request中:${requestScope.uname }
session中:${sessionScope.uname }
application中:${applicationScope.uname }
el表达式方式获取对象中的属性对应的值:
<%
User user1 = (User)request.getAttribute("user");
String uname1 = user1.getName();
%>
${user.name }
el表达式获取List数据:
<%
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
request.setAttribute("list", list);
%>
${list[1] }
${empty list[3] }<%-- 判断是否为空: --%>
el表达式获取map数据:
<%
Map<String,String> map = new HashMap<String,String>();
map.put("a","1");
map.put("b","2");
map.put("c","1");
request.setAttribute("map", map);
%>
${map["a"] }<%-- 都行 --%>
${map.a }