jsp页面中嵌入java代码

1.jsp页面中嵌入java代码

jsp的脚本元素
jsp的指令元素
jsp的动作元素

1.1 jsp的脚本元素(直接嵌入java代码)

	第一种:表达式(expression)
		形式:<%= %>
		例如:<%="hello" %>
			 <%=1+1 %>
			 <%=s.getName() %>

		将来翻译到java文件中的位置:
		【_jspService方法中的out.print(..)里面的参数.】
		例如上面那几个例子会翻译成
		out.print("hello");
		out.print(1+1);
		out.print(s.getName());
		
		所以System.out.prntln()这个方法的参数可以写什么,那么我们这个jsp页面中表达式里面就可以写什么.

		注意:在jsp中的表达式里面不需要加;号。


	第二种:脚本(scriptlet)
		形式:<% ... %>
			 或者
			 <%
			....
			 %>

		例如:
			 <%
			 Student s = new Student();

			 String name = "tom";

			 String username = s.getName();

			 List<String> list = new ArrayList<String>();
			 list.add("hello")
			 %>
		 将来翻译到java文件中的位置:
		 【脚本中的代码将来会被直接翻译到_jspService这个方法中.】
		 
		 在一个普通的方法中我们可以写什么样的代码,那么在脚本中就可以写什么样的代码.

		 注意:在脚本中所写的代码,代码的最后是要加上;号的.因为我们在一个方法里面所写的没一句代码后面都是要加;号。
		 在脚本声明的变量,我们是可以在表达式里面使用的,但是要注意要先声明变量再使用变量.只要查看脚本和表达式分别翻译到java文件中的位置,就可以很清楚的认识到这一点.


	第三种:声明(declaration)
		形式:<%!
			.....
			 %>

		例如:
		 <%!
			private String name;
	
			public String go(){
				System.out.println("hello world "+name);
				return "this is go()";
			}
		 
		 %>

		 将来翻译到java文件中的位置:
		  【直接将声明中的代码翻译到java文件里面所定义的类中。】
		  所以我们直接可以在一个类中写什么,就可以在声明中写什么.(一般在声明中会去定义一些类中的成员变量或者方法)

		注意:这里面的代码,定义变量的时候要加;号,定义方法的时候不用加;号,这是和我们写一个java类语法是一样的。

1.2 jsp的指令元素
jsp的指令是给jsp引擎看的,让jsp引擎在翻译jsp页面成java文件的时候,知道需要注意哪些地方的设置.比如页面中的编码、页面中脚本里面所用的编程语言、翻译的java文件中需要引入哪些其他包下的java类等等.

	写法: <%@指令名字  属性="值" ..  %>
	指令包含page include taglib三种

	page指令:
		1.表示当前页面中的编程语言是java,目前这个属性值只能写java
			language="java"

		2.在当前页面中要引入哪些包下的类.
			import="java.util.HashMap"
			import="java.util.HashMap,java.sql.Connection"

		3.设置jsp页面文件保存时候所用的编码
			pageEncoding="UTF-8"
			
		4.设置服务器将来使用io把jsp页面内容一行一行的输出给浏览器的时候,使用什么编码向浏览器输出.
			contentType="text/html; charset=UTF-8"

		5.设置jsp页面被翻译成java文件的时候,java文件中的类要继承那个父类.这个属性不用设置,jsp引擎会给它一个默认的父类去继承的.
			extends=""

		6.设置当前这个jsp页面是否支持session对象的使用.默认是支持的.
			session="true"

		7.设置jsp页面是否是线程安全的.
			isThreadSafe="true"

		8.如果a.jsp页面中设置了errorPage="b.jsp",那么a.jsp页面在运行的时候一旦出错,就会自动跳转到b.jsp里面.
			errorPage=""

		9.如果一个页面中设置了isErrorPage="true",那么就表示这个页面是用来专门显示错误信息的页面.然后在这个页面中就能够使用到隐藏对象exception来显示出错误的信息了.(需要使用jsp的内置对象)
			isErrorPage=""



	include指令:
		<%@include file="" %>
		作用:在当前页面中使用include指令可以把另外一个页面的内容引入到当前页面。
		
		一个页面包含/引入另外一个页面有俩种方式:静态包含 动态包含。
		这个include指令就属于静态包含
		
		静态包含特点:例如a.jsp页面中静态包含了b.jsp页面,那么在翻译期间,jsp引擎在翻译a.jsp成为一个a_jsp.java文件的时候,发现jsp页面中有include指令,这时候jsp引擎就会把被包含的页面b.jsp中内容原封不动的拿到a_jsp.java中,然后用io输出出去.



	taglib指令:
		作用:在当前jsp页面中引入一些特殊的标签库.比如jstl标签库、struts2标签库、spring标签库等等【实际上都是封装好的Java代码】.

1.3 jsp的动作元素

	1.<jsp:useBean id="s" class="com.briup.bean.Student" scope="page"></jsp:useBean>
	   相当于代码:
		   <%
			Student s = null;
			s = (Student)pageContext.getAttribute("s");
			if(s==null){
				s = new Student();
				pageContext.setAttribute("s",s);
			}
		   
		   %>


   2.<jsp:setProperty property="name" value="tom" name="s"/>
	   相当于代码:
		   <%
			Student s = (Student)pageContext.getAttribute("s");
			s.setName("tom");
		   %>

   3.<jsp:getProperty property="name" name="s"/>
	   相当于代码:
		   <%
			Student s = (Student)pageContext.getAttribute("s");
			out.write(s.getName());
		   %>
    
   4.页面跳转
		<jsp:forward page="target.jsp"></jsp:forward>
   
   5.跳转的同时还可以传参数
		<jsp:forward page="target.jsp?name=tom"></jsp:forward>
	   或者
		   <jsp:forward page="target.jsp">
			<jsp:param value="tom" name="name"/>
		   </jsp:forward>
   

   6.这个动作元素专门是传参数使用的
		<jsp:param value="tom" name="name"/>

   7.动态包含
	   <jsp:include page="foot.jsp">
			<jsp:param value="lisi" name="name"/>
	   </jsp:include>
	   注意不能使用url?name=tom这种方式传
	   
	   动态包含特点:在把jsp文件翻译成java文件的期间,动态包含并不会去把被包含的页面原封不动的拿过来,而是会把动态包含这个标签翻译成一个方法的调用,将来运行页面调用到这个方法的时候才会去拿被包含页面的内容.同时还可以给动态包含的页面传参数.静态包含是不能传参数的。

	   注意:总结和对比后,分析出动态包含和静态包含各自的特点,以及哪一个执行的效率更快一些.


   8.使用jsp的动作元素向浏览器输出一个标签
	   <jsp:element name="font">
			<jsp:attribute name="color">blue</jsp:attribute>
			<jsp:body>hello world</jsp:body>
	   </jsp:element>
	   
	   这个效果相当于在页面代码中直接写上
			<font color="blue">hello world</font>
	   或者:
		   <%
		   out.println("<font color='blue'>hello world</font>");
		   %>
  • 3
    点赞
  • 14
    收藏
  • 打赏
    打赏
  • 0
    评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

weixin_44289032

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值