Jsp

第一个JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html"; charset="UTF-8">
<title></title>
</head>
<body>
	<h1>hello world</h1>
</body>
</html>

注释

在 JSP 中支持两种注释的语法操作,一种是显示注释,这种注释是允许客户端看见的;另一种是隐 式注释,此种注释是客户端无法看见的
① 显示注释语法:从 HTML 风格继承而来
② 隐式注释语法:从 JAVA 风格继承;JSP 自己的注释

JSP 的三种注释方式:
1)// 注释,单行注释 /* 多行注释 */

2)

3)<%-- JSP 注释 --%>

scriptlet

<!-- jsp中无法直接写java代码,会当做原样字符输出 -->
	<%--写java代码,必须使用scriptlet,在jsp中一共有三种scriptlet代码
		第一种:<% %> :java 脚本段,可以定义局部变量、编写语句
  		第二种:<%! %>:声明,可以定义全局(成员)变量、方法、类   
		第三种:<%= %>:表达式,数据、一个变量或具体内容 
	 --%>
	 <%
	  	int a=2;
	 	int b=3;
	 	System.out.println(a+b);
	 	out.write(""+(a+b));
	 	//采用response.getWriter()输出的字符,会一直在左上角,故一般不使用该方法输出字符,而是用out,进行输出
	 	response.getWriter().write("we"+(a+b));
	 	out.write(""+(a+b));
	 %>
	 <%! 
	 	int a = 3;
	 %>
	 <!-- <%=%> 有out.write的效果-->
	 <%="hello"%>

jsp的指令标签

page指令标签

<!-- page指令标签
			格式:
				< %@ page 属性1=1 属性2=2 % >
			属性:
				language:指定当前jsp所使用的语言,目前就只有java
				contentType:指定响应类型;指定编码字符集
				pageEncoding:指定编码字符集   优先级,charset=UTF-8 > pageEncoding="UTF-8" > 默认ISO-8859-1
				import:导包
				errorPage:指定当前页面报错跳转的错误页面,需要在错误页面打印错误信息 exception 需要设置 isErrorPage="true"
							指定所有页面报错跳转,通过配置web.xml  设置&lt;error-page&gt;
	 -->
<%@ page errorPage="error.jsp" %>//errorPage格式,语法错误不会跳转页面
//error页面
<%@ page isErrorPage="true" language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html"; charset="UTF-8">
<title></title>
</head>
<body>
	<h2>大家好,我是error页面</h2>
	<%=exception%><!--返回错误信息  -->
</body>
</html>

1,include

include 动作用于动态地包含另一个资源,它可以包含另一个 JSP 页面、一个 Servlet 或者一个静态 的 HTML 页面。

为什么要使用包含?
因为有些页面有相同的部分,相同的内容直接提取出来生成单独的文件,
每次要使用的时候,只需要包含即可,而且当要修改相同部分内容的时候,只需要修改提取出来的文件即可。

静态包含、动态包含

静态包含:

格式:<%@ include file="要包含的页面路径" %>
		注意:就相当于将包含页面的内容复制黏贴到了标签所在位置,经过JSP引擎翻译后只生成一个文件
			所以不能声明相同的变量
			运行效率高一点点。耦合性较高,不够灵活
//include1
<h1>我是包含页面</h1>
	<%@include file="/include2.jsp" %>
	<%int a=3; %><!--两边不能定义同样的变量  -->
	<%=1/0 %>//测试错误页面,应删除
        
//include2
 <h1>我是被包含的页面</h1><!--两边的内容会放在一起-->
	<%int a=2; %>
	<%=a %>       

动态包含:

<jsp:include page="include.jsp"></jsp:include>//格式

动态包含:
			格式:
				&lt;jsp:include page="指定动态包含页面的路径"&gt;&lt;/jsp:include&gt;
			注意:通过JSP引擎翻译后生成多个文件,相当于方法的调用,所以和静态包含不一样,不会发生变量冲突。
				除非要通过子标签来传递参数,否则不要在标签内部加任何内容包括空格
//include3
<h1>我是包含页面</h1>
	<jsp:include page="include4.jsp"></jsp:include><!-- 动态包含 -->
	<%int a=3; %><!--两边可以定义同样的变量  -->
	<%=a %>
	
//include4
<h1>我是被包含的页面</h1><!--两边的内容会放在一起-->
	<%int a=2; %>
	<%=a %> 

forward

forward 动作用于请求转发,可以将一个用户的请求(request),从一个页面传递到另一个页面,跳 转的语法:

<!-- 不传参数 -->
<jsp:forward page="要转到的资源路径|<%=表达式%>"></jsp:forward> 
<!-- 传参数 --> 
<jsp:forward page="要转到的资源路径|<%=表达式%>">    
	<jsp:param value="参数内容" name="参数名称"/> 
</jsp:forward>

jsp 的 forward 动作标签,其作用的理解可以等价于 Servlet 域对象 HttpServletRequest 的请求转 发,即 request.getRequestDispatcher(“要转到的资源路径”).forward(request, response);

//forward1
<%
		pageContext.setAttribute("uname","xiaohong");//当前页面有效
		request.setAttribute("uname","xioaming");//一次请求有效
		pageContext.setAttribute("uname","xiaohei",pageContext.SESSION_SCOPE);
		//通过pageContext往session中存数据 
		pageContext.setAttribute("uname", "dabai", pageContext.APPLICATION_SCOPE);
		//通过pageContext往application中存数据
	%>
	pageContext中的uname:<%=pageContext.getAttribute("uname") %><br/>
	request中的uname:<%=request.getAttribute("uname") %>
	<jsp:forward page="forward2.jsp">
		<jsp:param value="xiaolan" name="uname"/>
	</jsp:forward>

//forward2
<h1>我是请求转发后的页面</h1>
	<%=request.getParameter("uname") %><br/><!--获取跳转传过来的数据  -->
	<!-- JSP四大域对象 -->
	pageContext中的uname:<%=pageContext.getAttribute("uname") %><br/>
	request中的uname:<%=request.getAttribute("uname") %><br/>
	session中的uname:<%=session.getAttribute("uname") %><br/>
	application中的uname:<%=application.getAttribute("uname") %>

userBean

jsp:useBean
		格式:
		<jsp:useBean id="对象的别名" scope="设定对象存储在哪一个域对象中" class="类的全限定名"></jsp:useBean>
				<!-- 
					相当于
					if(user == null){
						user = new User();
					}
				-->
</jsp:useBean>
		
	jsp:setProperty:给对象设置属性
		<jsp:setProperty property="属性名" name="对象的别名" value="属性值">
		
	jsp:getProperty:获取对象中的属性值
		<jsp:getProperty property="属性名" name="对象的别名">
   //在userbean标签中使用
<jsp:useBean id="user" scope="page" class="com.mage.po.User"></jsp:useBean>
<jsp:setProperty property="name" name="user" value="liuhh"/>
<jsp:getProperty property="name" name="user"/>
<%-- <%=user.getName() %> --%>

jsp的9大内置对象:

EL表达式

EL 表达式一般操作的都是域对象中的数据,操作不了局部变量。域对象的概念在 JSP 中一共有四 个:pageContext, request, session, application;范围依次是,本页面,一次请求,一次会话,整个 应用程序。而 EL 默认的查找方式为从小到大查找,找到即可。当域对象全找完了还未找到则返回空字 符串””。

${requestScope.user.id} // 在 request 作用域中获取 user 对象的 id 属性
<%  
		List <String> list = new ArrayList<String>();    
		list.add("aaa");    
		list.add("bbb");    
		list.add("ccc");   
		request.setAttribute("list", list); 
	%>
	${empty list} <!--判断是否为空,为空显示true,放在显示false -->

jsp导包:

<%@ page import="java.util.*"%>//导入所有util包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值