java学习之服务器第28天( --jsp--三个指令--六个动作标签--PageContext域--EL表达式--)

你想要多大的成功,你愿意为这份成功付出什么?

一.jsp

     定义: 每一种技术名称都一定说明他的作用. jsp 的全称: Java Server pages ( Java服务器页面),

既然他是Java服务器页面, 则它能支持 Java代码编写的web页面.

       jsb 是Java服务器动态web开发技术. 相当于: HTML+Servlet;

    1. jsp书写Java代码:  在<% %>中编写Java代码;

    2. jsp注释  在<%-- 注释内容   -- %>中编写Java代码;

    3. html注释:<!-- 注释内容 -->注释内容会被写到网页上

    4. 显示数据 :  <%=  % > 相当于out.print();

   5. 声明成员变量的<%!  %> : 在这里声明成员变量, 相当于声明在类中方法外.

   2.既然它是在Java服务器页面, 那它就是基于sun的JDK来执行, 也就是说, jsp文件是Java文件的

某种伪格式.

    3.jsp的运行: 1.jsp在tomcat以后发布, 2: 在浏览器访问过程中会有jsp生成,:jsp.Java 和jsp.class文件生成

 说明jsp在执行过程中先生成Java文件, 再使用Java语法编译成.class文件,然后再jvm上面运行 ,在服务器 work/catAlina/里面看到;

 二.  三个指令( 写在头上 )
   1.  page

      1. 1: <%@ page session = " true " %> : 相当于session开关,默认开启, 关上,系统默认不帮你创建session;

      1. 2: <%@ page errorPage = " 3.jsp " %> : 设置错误页面, ,直接跳转到错误页面3.jsp页面中

      1.3 :<%@ page isErrorPage = " true " %> : 默认是关闭的, 开启后可以使用Exception.getMassage() 获取信息;

               2.jsp文件

<%@page import="javax.websocket.Session"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!-- 相当于session开关,默认是开启  关上时候,系统默认不帮你创建w'j-->
<%@page session= "true" %>
<!-- 设置错误页面   网址没有动,直接跳转到错误页面;-->
<%@page errorPage= "3.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//session.getAttribute("123");
		int num = 10 / 0;  //如果3.jsp开启了isErrorPage,则可以获取到 Exception信息 by/zero,
	%>
</body>
</html>

       3.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 默认是关闭的,开启后可以使用Exception对象来获取异常信息; -->
    <%@page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   服务器正在升级维护中.....
   <%=
     exception.getMessage()
   %>
</body>
</html>
2. include

      1. 静态包含:      <%@ include file="/include2.jsp" %>

              作用:将两个页面放在一起,编译成一个.Java文件和.class文件 

               运行后: 会在服务器work/catalina 里面看到编译的文件;

     2.动态包含:   <jsp:include page="/include2.jsp"></jsp:include>

              作用: 只有读到动态包含的时候, 才会把动态包含的那个页面编译成.Java和.class文件

                运行后:我们会看到两个 .Java文件和.class文件.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 静态包含  <%@ include file="/include2.jsp" %>  生成一个Java文件-->
   
    <!-- 动态包含  当读取到动态包含时候 会把动态包含的那个页面, 才会被编译成.Java文件
    <jsp:include page="/include2.jsp"></jsp:include>-->
    
    <!-- prefix :使用标签时候起的别名 -->
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
wwwwwwww
</body>
</html>
3 .taglib 是标准标签库(c标签) : 也是引一个头文件,自往里面进行添加;

     1. 导入jar 包的时候可以使用  prefix: 使用标签的时候起的别名;

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


三 : 6个动作标签

      1 .<jsp: include> : 动态包含

      2.<jsp: forward> : 请求转发

     3< jsp:param> :  设置请求参数

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <%
    // pageContext 域对象
    //作用范围只能当前页面访问到
   pageContext.setAttribute("sex", "nv");
  %>
  <%=pageContext.getAttribute("sex") %>

	 <jsp:forward page="7.jsp">
		<jsp:param value="wanglong" name="username" />
		<jsp:param value="123" name="password" />
	</jsp:forward> 
</body>
</html>
   7.jsp文件   来进行获取上面的内容6的内容;
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    hha
    <%=request.getParameter("password") %>
    <%=request.getParameter("username") %>
    
    <!-- 测试配置Context -->
    <%=pageContext.getAttribute("sex") %>
</body>
</html>

     4.<jsp:useBean>: 创建一个对象

     5<jsp:setProperty> :给指定的对象属性赋值

     6<jsp:getProperty> : 取出指定对象的属性值

<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		User user = new User();
		user.setUsername("wanglong");
		user.setPassword("123");
	%>
	<!-- 方式1 获取到username; -->
	<%=user.getUsername()%>
	<!-- 使用userBean标签创建对象; 	
	 id 表示创建的这个对象的名字; 
	 class: 表示使用哪个类创建该对象;
	 name: 表示要赋值哪个对象;
	 property相当于from表单中的name; 
	-->
	<jsp:useBean id="user1" class="com.lanou3g.User" />
	<jsp:setProperty property="username" name="user1" value="kuner" />
	<jsp:setProperty property="password" name="user1" value="123" />

	<!-- 获取对象 方式2 获取到username;-->
	<jsp:getProperty property="username" name="user1" />
</body>
</html>
四: PageContext 域

     定义: 指的是当前页面的域对象: 离开了当前页面也就消失了;

       1 .pageContext:的强大之处是可以获取所有的域对象:  

            当然;也可以往各个域对象里面存值了

      2. 获取所有域对象的时候是从小域到大域进行查找:  注意session 是保存浏览器的,关闭浏览器才会消失

           public  void fun(PageContext pageContext) {
			//该对象提供了获取所有域对象的方法;
        	   pageContext.getRequest();
        	   pageContext.getServletContext();
        	   pageContext.getRequest();
        	   pageContext.getSession();
        	   //从全域查找保存的值,并且该方法是按域对象的范围从小到大进行查找, 
        	   pageContext.findAttribute("name");
		}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% // 所以尽量不要使用一样的名字;
          //利用配置PageContext对象往各个域中存值. 参数2= 存的值, 参数3 向哪个域中存值.
          // pageContext.setAttribute
         //pageContext.setAttribute("www", "pageContext", PageContext.PAGE_SCOPE);
        //相当于request.setAttribute("www","request")
         pageContext.setAttribute("www", "request",PageContext.REQUEST_SCOPE);
            //直接注释session 也不会找到ServletContext, 浏览器不关闭session会一直保存;
         pageContext.setAttribute("www", "session",PageContext.SESSION_SCOPE);
         pageContext.setAttribute("www", "ServletContext", PageContext.APPLICATION_SCOPE );
%
五: EL表达式: 

            定义: 一个书写规范: 提供了Java代码在jsp页面简便书写方式, 可以简化代码;

1. ${www}  : 代表全域查找, name = www的值, 并且帮你输出到网页上, 如果没有网页什么都不显示;

2.利用EL表达式获取对象的 属性值  分别从 --对象中 --集合中--map集合中

<%@page import="com.lanou3g.City"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- EL表达式 获取对象的属性值 
      javaBean導航(对象导航)  
 -->
	<%
		City city = new City();
		city.setAddress("sh");
		User u1 = new User();
		u1.setUsername("wanglong");
		u1.setPassword("123");
		u1.setCity(city);

		request.setAttribute("u1", u1);

		//创建数据保存俩值
		ArrayList<String> list = new ArrayList();
		list.add("zhansan");
		list.add("lisi");
		request.setAttribute("list", list);

		//创建map 保存俩值
		HashMap<String, String> m1 = new HashMap<>();
		m1.put("a", "aaaa");
		m1.put("b", "bbb");
		m1.put("c", "ccc");
		request.setAttribute("m1", m1);
	%>
	<!-- 内部相当于调用了getUsername()这个方法;   使用[]但是里面要加""号或者''单引号 -->
 <!-- 用点能获取的,用[]都能获取, 用[]获取的 点获取不了 -->
 ${u1.username}    //
 ${u1["username"]}
 ${ list[1]}
 ${m1["b"] }
 ${m1.c}
 ${u1.city.address } 
 ${u1["city"]["address"]}     //页面显示内容wanglong     wanglong lisi bbb ccc sh  sh    
 
</body>
</html>

 3.使用EL表达式的隐式对象:注意隐式对象在EL表达式中书写.    https://www.cnblogs.com/wwlearn/articles/3034235.html

 作用范围有关的隐式对象:   pageScope ,requestScope ,sessionScope ,applicationScope

       在EL中则使用下面的方法:${sessionScope.username}

注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。

  利用隐式对象获取你想要的保存在各个域中的值:   可以获取你想要的

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <!--  EL表达式的隐士对象: 写在哪里 注意; 隐式对象在el表达式中书写 
   利用隐式对象获取,你想要的值;
  -->
	<%
		//利用pageContext对象向各个域中保存值
		pageContext.setAttribute("xxx", "pageContext", PageContext.PAGE_SCOPE);
		pageContext.setAttribute("xxx", "request", PageContext.REQUEST_SCOPE);
		pageContext.setAttribute("xxx", "session", PageContext.SESSION_SCOPE);
		pageContext.setAttribute("xxx", "application", PageContext.APPLICATION_SCOPE);
	%>
	<!-- 使用隐式对象必须和el表达式里面去写; 指定域中查找对应的值 ${ xxx}  -->
	${pageScope.xxx }
	${requestScope.xxx }
	${sessionScope.xxx }
	${applicationScope.xxx }
	
	<br>
	<!-- .相当于get();方法 -->>
	<form action="${pageContext.request.contextPath }/13.jsp" method="post">
	
	  账号 <input type="text" name ="username"><br>
	  密码 <input type="text" name ="password"><br>
	  唱歌 <input type="checkbox" name ="hobby" value ="sing"><br>
	  求 <input type="checkbox" name ="hobby" value ="boll"><br>
	  <input type="submit" value="提交">
	</form>
</body>
</html>

5 .获取表单提交数据    表单就在上面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html: charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <%  // 设置编码格式否则会乱码的
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
   %>

   <!-- 获取表单提交的数据   多数值要指定你要查询哪一个-->
   ${param.username }
   ${param.password }
   ${paramValues.hobby[0] }
</body>
</html>

6 .EL表达式对空值的判断 以及显示

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- EL表达式 对空值的判断 -->
	<%
		String str1 = null;
		request.setAttribute("str1", str1);

		String str2 = "";
		request.setAttribute("str2", str2);

		String str3 = "wanglong";
		request.setAttribute("str3", str3);
		ArrayList<String> list2 = new ArrayList<>();
		 request.setAttribute("list2", list2);
		 
	//wanglong [] [hahahaahahahhahhahah, bbbbbbbb]  如果存的是数组为空,显示只有一对中括号;
		
			ArrayList<String> list3 = new ArrayList<>();
			list3.add("hahahaahahahhahhahah");
			list3.add("bbbbbbbb");
			 request.setAttribute("list3", list3);
			 
			 //测试三目 根据从域中取出的值 来让单选框默认选择哪个值;
			 String name = "nan";
			 request.setAttribute("name", name);
		 
	%>
	<!-- 测试EL表达式对空值的显示结果 
	  el表达式里面只要是null还是没有内容 都不会报错;
	   真正的值才会显示: (容错性高);
	  -->
	${str1 } 
	${str2 }
    ${str3 }
    ${list2 }
    ${list3 }
    <!-- 判断空值的方法empty  -->
    ${empty str1 }
     ${empty str2 }
      ${empty str3 }
       ${empty list2 }
        ${empty list3 }
        
        <!-- 支持三目表达式打印结果  wanglong [] [hahahaahahahhahhahah, bbbbbbbb] true true false true false 我是后面的 
         根据你域里面取出来的值判断是什么?
         -->
        ${ empty str3 ? "我是前面的":"我是后面的"}
        
        <!-- 测试 根据request里面保存的数据,判断男还是女; -->
        <br>
      男:   <input type="radio" name ="sex" value="nan" ${name=="nan"?"checked='checked'":"" }>
      女:   <input type="radio" name ="sex" value="nv" ${name=="nv"?"checked='checked'":"" }>
      
 
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值