您的位置:首页 > Web前端 > JavaScript

JSP动作指令初级解析

2016-01-28 21:25 711 查看
编译指令与动作指令的不同动作指令与编译指令不同,编译指令是同志Servlet引擎的处理消息,而动作指令只是运行时候的动作。编译指令在将JSP编译成Servlet时起了作用,而处理指令通常可替换成JSP脚本,forward指令,执行页面转向,将请求的处理转发到下一个页面。forward指令用于将页面响应转发到另外的页面,既可以是静态的HTML页面,也可以是动态的JSP页面,或者转发到容器中的Servlet。语法:
<span style="white-space:pre">	</span><jsp:forward page="relativeURL|<%=expression%>"/><%--可以通过<jsp:param>来添加额外的请求参数。该请求参数可以通过HttpServletRequest的getParameter方法获取。--><jsp:param name="paramName" value="paramValue"/></jsp:forward>
注意:执行forward指令转发请求时,用户请求的地址没有改变的,但是页面的内容完全被forword目标页的内容修改。请求的信息,属性都是同一条。编译后的内容为:
if (true) {_jspx_page_context.forward(	"forward.jsp" + "?"+ org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("age", request.getCharacterEncoding())+"="+org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("11", request.getCharacterEncoding()));return;}
include指令:用于动态引入一个JSP页面。include指令是一个动态include指令,用于包含某个页面。不会导入被include页面的编译指令,仅仅是将被导入的页面的body部分插入到被include页面中。语法:
<span style="white-space:pre">	</span><jsp:include page="relativeURL|<%=expression%>" flush="true|false">
<span style="white-space:pre">		</span><%-- <span style="font-family: Arial, Helvetica, sans-serif;">可以通过<jsp:param>来添加额外的请求参数。该请求参数可以通过HttpServletRequest的getParameter方法获取。</span> -->
	<span style="white-space:pre">	</span><jsp:param name="paramName" value="paramValue"/><span style="white-space:pre">	</span></jsp:forward>
flush属性是指定输出缓冲是否被转移到被导入的页面中,注意:动态导入时使用一个include方法将导入页面的数据包含进来。编译后的内容:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "include.jsp" + "?"+ org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("age", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("11", request.getCharacterEncoding()), 
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "include.jsp" + "?"+ org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("age", request.getCharacterEncoding())+ "="+ org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("11", request.getCharacterEncoding()),out,false);
注意:include动作与include指令的区别1、 include动作(动态导入)是在Servlet中使用include方法来引入被导入页面的内容,(运行时引入)include指令(静态导入)是将被导入页面的代码全部融入,两个页面融合成一个整体(编译时导入)2、 静态导入时被导入页面的编译指令会起作用,动态导入时被导入页面的编译指令会失去作用。只是插入body内容。3、 动态导入可以添加额外的参数。注意:include动作与forward动作的区别1、 相同点:都采用方法来引入目标页面。forward动作使用_jspx_page_context的forward方法引入目标页面,include动作使用JspRuntimeLibrary的include方法引入目标页面2、 不同点:执行forward动作时,页面会被完全替代。执行include时,只是将body部分的内容插入到原有页面。param指令:用于在include和forward动作中传递参数语法:
<jsp:param name="paramName" value="paramValue" />
setProperty、useBean、getPropertyuseBean:在JSP页面中初始化一个Java实例setProperty:为javaBean实例的属性设置值getProperty:输出JavaBean实例的属性useBean:创建一个JavaBean的实例。语法:
<jsp:useBean id="beanId" class="className" scope="page|request|session|application"/>id:设置的javabean变量名class:用于创建javaBean的类scope:范围属性:page:该javaBean实例尽在该页面有效request:在本次请求中有效session:在本次对话中有效application:在本应用中一直有效
翻译后的内容
cn.jiang.Person person = null;person = (cn.jiang.Person) _jspx_page_context.getAttribute("person", javax.servlet.jsp.PageContext.PAGE_SCOPE);if (person == null){person = new cn.jiang.Person();_jspx_page_context.setAttribute("person",person, 												javax.servlet.jsp.PageContext.PAGE_SCOPE);}
setProperty:设置JavaBean实例的属性值。语法:
<jsp:setProperty name="beanName" property="propertyName" value="propertyName"/>name:设置的javaBean名property:要设置的javaBean的属性名value:设置的javaBean属性的属性值
其中propertyName对应的是javaBean的setPropertyName,即该属性值应该是对应的set方法翻译后的内容:
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"),"name","测试名1",null,null,false);
getProperty:输出JavaBean实例的属性值。语法:
<jsp:getProperty name="beanName" property="propertyName"/>name:javaBean的实例名property:输出的javaBean的属性名
其中propertyName对应的javaBean的getPropertyName,即该属性值对应的是get方法翻译后的内容:
out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((cn.jiang.Person)_jspx_page_context.findAttribute("person")).getName())));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: