JSP的基本使用

JSP

1.什么是jsp

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

2.JSP的优势

以下列出了使用JSP带来的其他好处:

  • 与ASP相比:JSP有两大优势。首先,动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用。第二点就是JSP易于移植到非MS平台上。
  • 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
  • 与SSI相比:SSI无法使用表单数据、无法进行数据库链接。
  • 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
  • 与静态HTML相比:静态HTML不包含动态信息。
格式

中文编码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

JSP表达式的语法格式:

<%! 全局变量 %>
<% 代码片段 %>
<%= 输出表达式 %>
<%-- 注释 -->

3.内置对象

标准脚本变量

[编辑]

以下是永远可用的脚本变量:

  • out:JSPWriter,用来写入响应流的数据
  • page:servlet自身
  • pageContext:一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间传递。
  • request:HTTP request(请求)对象
  • response:HTTP response(响应)对象
  • session:HTTP session(服务端会话)对象

4.SP动作

[编辑]

JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:

jsp:include和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页中共享而不用复制。
jsp:param可以在jsp:include, jsp:forward或jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。
jsp:forward用于处理对另一个JSP或SERVLET的请求和响应。控制权永远不会交还给当前JSP页。
jsp:pluginNetscape Navigator的老版本和Internet Explorer使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个APPLET所需要的指定浏览器标签。
jsp:fallback如果浏览器不支持APPLETS则会显示的内容。
jsp:getProperty从指定的JavaBean中获取一个属性值。
jsp:setProperty在指定的JavaBean中设置一个属性值。
jsp:useBean创建或者复用一个JavaBean变量到JSP页。
标签样例

[编辑]

jsp:include

[编辑](嵌入)

<html>
<head></head>
<body>
<jsp:include page="mycommon.jsp" >
    <jsp:param name="extraparam" value="myvalue" />
</jsp:include>
name:<%=request.getParameter("extraparam")%>
</body>
</html>

将页面放在当前页面同时出现

jsp:forward

[编辑](跳转)

<jsp:forward page="subpage.jsp" >
     <jsp:param name="forwardedFrom" value="this.jsp" />
</jsp:forward>

在本例中,请求被传递到"subpage.jsp",而且请求的处理权不会再返回前者。

jsp:plugin

[编辑](标签)

<jsp:plugin type=applet height="100%" width="100%"
            archive="myjarfile.jar,myotherjar.jar"
            codebase="/applets"
            code="com.foo.MyApplet" >
    <jsp:params>
        <jsp:param name="enableDebug" value="true" />
    </jsp:params>
    <jsp:fallback>
        Your browser does not support applets.
    </jsp:fallback>
</jsp:plugin>

上述plugin例子说明了一种在网页中嵌入applet的统一方法。在<OBJECT>标签出现之前,并没有一种嵌入applets的通用方法。这个标签设计得并不好,但有希望在以后加入动态属性(height=" p a r a m . h e i g h t " , c o d e = " {param.height}", code=" param.height",code="{chart}"等)和动态参数的新功能。当前jsp:plugin标签不允许动态调用applets。例如,你如果有一个图表applet需要数据点以参数形式被传入,除非数据点的数量是一个常量,否则你就不能使用ResultSet循环来创建jsp:param标签,你不得不手写每个jsp:param标签的代码。而每个上述jsp:param标签可以有一个动态命名和动态值。

jsp:useBean

[编辑](方法)

<jsp:useBean id="myBean" class="com.foo.MyBean" scope="request" />类的全名称
<jsp:getProperty name="myBean" property="lastChanged" />
<jsp:setProperty name="myBean"(名) property="lastChanged"() value="<%= new Date()%>" 值/>赋值
<jsp:setProperty name="myBean" propertyt="user" value = "asd"/>

scope属性可以是request, page, session or application,它有以下用意:

  • request— 该属性在请求的生命周期内有效,一旦请求被所有的JSP页处理完后,那么该属性就不可引用。
  • page— 该属性只是当前页中有效。
  • session— 该属性在用户会话的生命周期内有效。
  • application— 该属性在各种情况下都有效,并且永远不会被变为不可引用,和全局变量global variable相同。

上述例子将会用一个创建一个类的实例,并且把该实例存储在属性中,该属性将在该请求的生命周期内有效。它可以在所有被包含或者从主页面(最先接收请求的页面)转向到的JSP页之间共享。

5.指令

1.page指令

引用包:
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="/error.jsp"%>
    如果报错会跳转到error.jsp
isELIgnored = "true" 是否支持计算:支持就是false,不支持就是true
	如:${1+1}
	false: 2 true:${1+1}
2.include指令
静态包含:
<%include file = "/地址">
    动态包含:<jsp:include page="header.jsp"></jsp:include>
        静态包含:在翻译时就把两个文件进行合并
        动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容
3.taglib指令
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段
<%@ taglib url="http://"%>

6.内置对象

EL表达式

表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScriptXPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

语法

[编辑]

以“${”开始,以“}”作为结束:

${EL表达式}

获取某对象的值可以直接写入对象的名称,如获取对象名为“user”的对象的值:

${user}

获取某对象的属性的值使用点操作符(“.”操作符),如获取对象user的name属性和age属性的值的语法如下:

<%
	user = ....;
%>

 ${requestScope.user.name} 
点操作
${user.name}
中括号操作
${requestScope.user["name"][""]}

${name}
${getName()}
<!--
		List list = new ArrayList<String>();
		list.add("小米");
		list.add("苹果");
		application.setAttribute("list", list);
-->
${list[0]}
<!--map:
	Map map = new HashMap<String,String>();
		map.put("zh", "中国");
		map.put("us", "美国");
		application.setAttribute("map", map);
-->
${ map.zh }
${ map["us"] }
<!-- 数字为键值时只能用第二个 -->

不用el的方式

	<%
	User u = (User)session.getAttribute("user");
	out.println(u);
	%>

JSTL

jstl.jar

standard.jar

所谓的导包:

在文件头

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

1.在某个作用域中,给某个变量赋值

<c:set var="name" value="zhangsan" scope="request"/>
	${requestScope.name }

2.给某个对象的属性赋值(此方法无需scope变量)

set 添加

<c:set var="name" value="zhangsan" scope="request"/>

c:out

true:<c:out value='<a href="https://www.baidu.com">百度</a>' escapeXml="true"/><br/>
	false:<c:out value='<a href="https://www.baidu.com">百度</a>' escapeXml="false"/><br/>

c:remove 删除

<c:remove var="name"/>

条件:

	<c:if test="${10>2 }" var="result" scope="request">
		真221
		${result}
	</c:if>

选择:

	<c:set var="role" value="学生" scope="request"></c:set>
	<c:choose>
		<c:when test="${requestScope.role=='老师' }">
			老师
		</c:when>
		<c:when test="${requestScope.role eq'学生' }">
			学生
		</c:when>
		<c:otherwise>
		管理员
		</c:otherwise>
	</c:choose>

循环:

<!-- 数字循环-->
<c:forEach begin="0" end="5" step="1" varStatus="status">
	${status.index }
	test...
	</c:forEach>
	<br/>
<!-- 数组循环 -->
	<c:forEach var="name" items="${requestScope.names }">
	${name }
	</c:forEach>
	<br/>
<!-- 对象循环 -->
	<c:forEach var="student" items="${requestScope.students}"> 
		${student.sname}
	</c:forEach>

注意:不要使用itmes的值不要有多余的空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值