jsp页面中嵌入java代码_jsp内嵌java代码获取前端的值_weixin_44289032的博客-程序员宅基地

技术标签: jsp  

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>");
		   %>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44289032/article/details/103180959

智能推荐

使用RandomAccessFile 实现文件复制_randomaccessfile复制文件_易水寒1011的博客-程序员宅基地

public class Test4_CopyDemo { public static void main(String[] args) throws IOException { //路径可以用字符串保存。 String src = "E:\\web学习\\华创\\JHC2108\\API讲义\\API讲义.md"; RandomAccessFile rafsrc = new RandomAccessFile(src,"r") ; //_randomaccessfile复制文件

oracle开发中的存储过程,游标,if判断经典例子_我是一颗小小小草的博客-程序员宅基地

1.简单输出create or replace procedure t_xuanze(name in varchar)astname varchar(10);begindbms_output.put_line('this is error!');end;(注意:1.没有declare;2.形参上没有类型范围)/////////////////////////////

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:-程序员宅基地

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]:# -*- coding: utf-8 -*-#利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。#输入:['adam', 'LISA', 'barT']...

JavaScript—for循环只运行了一次_js for 循环的点击事件只能走一次-程序员宅基地

当发现一个for循环明明没有使用break语句干预运行,却自己还未穷尽预计的次数就退出循环了。这是什么原因呢?如果你的主循环里调用了一个函数,而且函数里的循环变量的名和主循环一样,那么问题就出在这里。例如:function test(){ for(i=0;i<10;i++){ console.log('test:',i); }}for(i=0;i&..._js for 循环的点击事件只能走一次

Ubuntu20.04下配置intellij idea+java jdk17+javafx(图文指导)_openjdk17集成javafx_JANjz的博客-程序员宅基地

Ubuntu下配置intellij idea+java jdk17+javafx(图文指导)intellij idea的配置:到jetbrains官网下载ide:选择Ultimate 下的Download进行下载。之后会得到安装包(ideaIE-2021.3.3.tar.gz),使用归档管理器打开安装包,并将它拖到你想要下载的目录下去。如上图我将该文件夹拖到了主目录中。之后,点击该文件夹,点击bin目录,并在里面打开终端,在终端中输入:./idea.sh如图:执行完毕后启动安装i_openjdk17集成javafx

随便推点

LeetCOde#109 有序链表转二叉搜索树 Python_矮油葛格嗨你好的博客-程序员宅基地

一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。二叉搜索树:任一节点的值都大于其左子树的节点值,都小于其右子树的节点值。把链表转成数组,就和前一题一样辽:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None# Definition for a bin

iOS开发-KVC和KVO的理解-程序员宅基地

KVC和KVO看起来很专业,其实用起来还是比较简单的,KVC(Key-value coding)可以理解为键值对编码,如果对象的基本类型,那么键值对编码实际上和get,set方法没有区别,如果是属性是另外一个对象,那么发现KVC用起来还是非常顺手,KVO(key-value observing)是键值对的观察者模式,如果对象的属性发生变更,那么会触发observeValueForKeyPath事件...

生成mock测试数据_datagrip mock 数据_启猿泰坦的博客-程序员宅基地

【代码】生成mock测试数据。_datagrip mock 数据

adjustViewBounds和scaleType(ImageView属性)_adjustviewbounds 和sc_iblade的博客-程序员宅基地

一、首先:ImageView的scaleType的属性有好几种,分别是matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY (1),android:scaleType="center"保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。..._adjustviewbounds 和sc

matlab程序里nbus=x的意思,没什么用的matlab代码1-程序员宅基地

该楼层疑似违规已被系统折叠隐藏此楼查看此楼四数相加function answer=foursum_18_1(nums,target)combination = nchoosek(nums,4);m = sum(combination,2);n = find(m==target);answer = combination(n,:);end#三数最近function answer=threesumc...