JSP基础知识:

JSP基础知识:

1.JSP简介:

1.JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。

2.JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

3.JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

4.优势: 它相比 html 而言,html 只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套 java 代码,为用户提供动态数据;相比 servlet 而言,servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产生动态数据的同时,也很容易对数据进行排版。

2.基础语法:

1)注释:

(1)显示注释语法:(浏览器可以看到的注释,可以给用户看的注释)

​ 从 HTML 风格继承而来:

(2)隐式注释语法:(浏览器无法看到的注释,不给用户看的)

​ 从 JAVA 风格继承: // 注释,单行注释 /* 多行注释 */
​ JSP 自己的注释: <%-- JSP 注释 --%>

2) Scriptlet

(1) <% %> :java 脚本段,可以定义局部变量、编写语句
(2)<%! %>:声明,可以定义全局(成员)变量、方法、类
(3)<%= %>:表达式,数据、一个变量或具体内容

(4)代码示例:

<%@ 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);
	%>
	
	<%!
		int c = 8;
	%>
	
	<%="hellojsp" %>
	
</pre>
</body>
</html>
3)JSP的指令标签

(1) page 指令:

格式:<%@ page 属性1=值1 属性2=值2 %>
属性:

​ **language:**指定当前jsp所使用的语言,目前就只有java
​ **contentType:**指定响应类型;指定编码字符集
​ **pageEncoding:**指定编码字符集 优先级,charset=UTF-8 > pageEncoding=“UTF-8” > 默认ISO-8859-1
​ **import:**导包
​ **errorPage:**指定当前页面报错跳转的错误页面,需要在错误页面打印错误信息 exception 需要设置 isErrorPage="true"指定所有页面报错跳转,通过配置web.xml 设置<error-page

<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page errorPage="/error.jsp" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

(2)include 静态包含:

​ 格式:<%@ include file=”要包含的文件路径”%>相对路径

	<%@ include file="/04include2.jsp" %>

​ 注意:就相当于将包含页面的内容复制黏贴到了标签所在位置,经过JSP引擎翻译后只生成一个文件,所以不能声明相同的变量
​ 优缺点:运行效率高一点点。耦合性较高,不够灵活


(3) taglib 导入标签库:

​ 当使用到第三方标签库时需要通过 taglib 标签进行导入。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4)JSP的动作标签:

注意:**动作标签是由 tomcat(服务器)来解释执行!与 java 代码一样,都是在服务器端执行;html 由浏览器来执行!

(1)include:

方法一:在每个 JSP 页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容。
方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,以后使用的时候直接导入进来。(一般使用第二种);
**静态包含:**静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样。(就是上面那种)

**动态包含:**动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当页面被请求的时候时,才会动态包含进来,好比方法的调用。

格式:<jsp:include page=“指定动态包含页面的路径”></jsp:include>

<jsp:include page="/05jsp_include2.jsp">
		<jsp:param value="zhangsan" name="uname"/>
	</jsp:include>

​ **注意:**通过JSP引擎翻译后生成多个文件,相当于方法的调用,所以和静态包含不一样,不会发生变量冲突;除非要通过子标签来传递参数,否则不要在标签内部加任何内容包括空格。


(2)forward:

> forward 动作用于请求转发,可以将一个用户的请求(request),从一个页面传递到另一个页面,跳转的语法。

格式:<jsp:forward page=“请求转发的路径”></jsp:forward>相当于
request.getRequestDispatch(“请求转发的路径”).forward(request,response);

<jsp:forward page="/06forward2.jsp">
	<jsp:param value="小小" name="uname"/>
</jsp:forward>

(3)useBean、setProperty、getProperty:

格式:<jsp:useBean id=“对象的别名” scope=“设定对象存储在哪一个域对象中” class=“类的全限定名”>

<jsp:useBean id="user" scope="page" class="com.mage.po.User"></jsp:useBean>
<jsp:setProperty property="name" name="user" value="liuhh"/>
<jsp:getProperty property="name" name="user"/>

注意:

jsp:setProperty:给对象设置属性
<jsp:setProperty property=“属性名” name=“对象的别名” value=“属性值”/>中的 name 值要与 中的 id 值相同

jsp:getProperty:获取对象中的属性值
<jsp:getProperty property=“属性名” name=“对象的别名”/>

useBean:

属性描述
id指定Bean的别名
class指定Bean的完整包名。
type指定将引用该对象变量的类型。
beanName通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。

3.Jsp 的九大内置对象:

NO内置对象类型描述
1PageContextjavax.servlet.jsp.PageContextJSP的页面容器
2requestjavax.servlet.http.HttpServletRequest得到用户的请求信息
3responsejavax.servlet.http.HttpServletResponse服务器向客户端的回应消息
4sessionjavax.servlet.http.HttpSession用来保存每一个用户的信息
5applicationjavax.servlet.ServletContext表示所有用户的共享信息
6configjavax.servlet.ServletConfig服务器配置,可以取得初始化参数
7outjavax.servlet.jsp.JspWriter页面输出
8pagejava.lang.Object表示从该页面中表示出来的一个Servlet实例
9exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用

4.EL 表达式:

**1)概念:**EL(Expression Language)是为了使 JSP 写起来更加简单。表达式语言的灵感来自于ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让 Jsp 的代码更加简化。

2)语法结构:${expression}

3)格式:

返回域对象中指定键对应的值:${域对象中键的名称 }
获取域对象中对象指定属性对应的值:${域对象中键的名称.属性名 }
判断域对象中指定键对应的值是否为空:${empty 键的名称 }
判断域对象中指定键对应的值是否相等:${键1==键2 }

4)注意:

从小到大获取域对象中的数据,如果都没有则显示"",
获取指定域对象中的数据:${域对象名称Scope.uname }

1)代码示例:
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.mage.po.User"%>
<%@ 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>el表达式</title>
</head>
<body>

	<!-- 往四大域对象中存数据 -->
	<%
		pageContext.setAttribute("uname", "xiaoxao");
		request.setAttribute("uname", "mengmeng");
		session.setAttribute("uname", "pengpeng");
		application.setAttribute("uname", "xixi");
		
		User user = new User();
		user.setName("lh");
		user.setAddress("江西");
		user.setSex(true);
		request.setAttribute("user", user);
	%>
el表达的方式:<br>
	${uname1 }<br>
	el表达式获取指定域对象中的值:<br>
	pageContext中:${pageScope.uname }<br>
	request中:${requestScope.uname }<br>
	session中:${sessionScope.uname }<br>
	application中:${applicationScope.uname }<br>
	el表达式方式获取对象中的属性对应的值:<br>
	${user.name }
	
	el表达式获取List数据:<br>
	<%
		List list = new ArrayList();
		list.add("a");
		list.add("b");
		list.add("c");
		request.setAttribute("list", list);
	%>
	获取list中指定数据:${list[1] }<br>
	判断是否为空:${empty list[3] }<br>
	
	el表达式获取map数据:<br>
	<%
		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 }<br>
	
	el表达式运算:<br>
	<%
		request.setAttribute("a", "1");
		request.setAttribute("b", 1);
		request.setAttribute("c", 2);
		request.setAttribute("d", "1");
	%>
	加法:${a+c }<br>
	判断是否相等:1${a==d }
	
	
</body>
</html>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值