jsp标签

1 jsp标签的作用


jsp标签作用:替换jsp脚本。




1)流程判断(if   for循环)


2)跳转页面(转发,重定向)


3)。。。。。



2 Jsp标签分类


1)内置标签(动作标签): 不需要在jsp页面导入标签


2)jstl标签: 需要在jsp页面中导入标签


3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签



3 动作标签(内置标签)


转发标签: <jsp:forward />  


​ <%-- 转发 --%>​​​​ <jsp:forward page="/jsp/action1.jsp">​

  1. </jsp:forward> --%>



        参数标签:  <jsp:pararm/>


​<%-- 转发带参 --%>​​​​<%-- <jsp:forward page="/jsp/action1.jsp">​​​​ <jsp:param value="marry" name="name"/>​​​​ <jsp:param value="Man" name="sex"/>​​​​ <jsp:param value="13" name="age"/>​​​​</jsp:forward> --%>​


   注意:jsp:param 动作标签,必须在jsp:include ,jsp:forward 或者 jsp:params等标签内部中使用。否则会报异常:



​org.apache.jasper.JasperException: /jsp/action.jsp (line: 36, column: 6) The jsp:param action must not be used outside the jsp:include, jsp:forward, or jsp:params elements​




            包含标签:  <jsp:include/>


原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。


(先翻译再合并),也叫: 动态包含


​<%-- 动态包含 ,page属性里面的值一定是一个文件的路径,不能用?在路径后面传参,但是能通过jsp:param标签传参--%>​​​​<jsp:include page="/common/head2.jsp">​​​​ <jsp:param value="good" name="name"/>​​​​</jsp:include>​




静态包含   vs   动态包含 的区别?


1) 语法不同


静态包含语法: <%@inclue file="被包含的页面"%>


动态包含语法: <jsp:include page="被包含的页面">



2)参数传递不同


静态包含 不能向被包含页面传递参数


动态包含 可以使用jsp:param标签向被包含页面传递参数



3)原理不同


静态包含: 先合并再翻译


动态包含: 先翻译再合并



        如下Demo代码案例 注意: include指令静态包含,是直接把 被包含的页面(head.jsp)的内容翻译到包含页面(action.jsp)中,合并翻译成一个java源文件,再编译运行,即 先合并再翻译 。但是,2个jsp页面中都有path和basePath两个变量了,jsp被翻译成jsp源文件后,属于变量重复定义。删除被包含页面中重复的jsp脚本问题即可解决。也可以运用jsp标签jsp:include动态包含来解决, 动态包含是先翻译再合并,即使存在重复变量定义,也不影响 。


Demo如下:


 

action.jsp如下:


​​<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>​​​​​​​​<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">​​​​<html>​​​​ <head>​​​​ <title>静态包含 vs 动态包含的区别</title>​​​​ </head>​​​​ ​​​​ <body>​​​​ ​​​​ <%-- 动态包含 ,page属性里面的值一定是一个文件的路径,不能用?在路径后面传参,但是能通过jsp:param标签传参--%>​​​​ <jsp:include page="/common/head2.jsp">​​​​ <jsp:param value="good" name="name"/>​​​​ </jsp:include>​​​​ ​​​​ <hr/>​​​​ ​​​​ <%-- 静态包含,不能用?在路径后面传参,file属性里面的值一定是一个文件的路径,传参会报错。 --%>​​​​ <%@include file="/common/head.jsp" %>​​​​ </body>​​​​</html>​​


head.jsp:


​​<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>​​​​​​​​<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">​​​​<html>​​​​ <head>​​​​ <title>head.jsp</title>​​​​ </head>​​​​ ​​​​ <body>​​​​ 这是一个通用的头部页面head<br/>​​​​ </body>​​​​</html>​​


head2.jsp:


​​<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>​​​​<%​​​​String path = request.getContextPath();​​​​String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";​​​​%>​​​​​​​​<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">​​​​<html>​​​​ <head>​​​​ <base href="<%=basePath%>">​​​​ ​​​​ <title>My JSP 'index.jsp' starting page</title>​​​​ <meta http-equiv="pragma" content="no-cache">​​​​ <meta http-equiv="cache-control" content="no-cache">​​​​ <meta http-equiv="expires" content="0"> ​​​​ <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">​​​​ <meta http-equiv="description" content="This is my page">​​​​ <!--​​​​ <link rel="stylesheet" type="text/css" href="styles.css">​​​​ -->​​​​ </head>​​​​ ​​​​ <body>​​​​ 这是一个通用的头部页面head<br/>​​​​ 动态资源传参,获取到的参数值:<%= request.getParameter("name") %><br/>​​​​ </body>​​​​</html>​​


效果: