jsp el标签 jstl标签

jsp

概述

1) 什么是jsp?

jsp:Java Server Pages ---java服务器端的页面
组成:html代码+jsp代码+java代码  后缀名:.jsp   存放位置和html一致
总结:能写java代码的html页面 用来展示服务端的数据

2) 为什么使用jsp?

在这里插入图片描述

使用servlet用来做页面的复杂数据展示特别的麻烦,可以使用jsp让页面的展示更加的简单
总结:jsp就是用来接收服务器端(Servlet)产生的各种数据(list map 对象)进行展示的
									    

3) 如何使用jsp?

Jsp底层就是servlet,servlet是一个java类
jsp也是一个java类,会有2个文件: .java文件 .class文件(存放在work目录下)

jsp的执行原理:(面试题)

1:根据请求的页面去当前项目下找到指定的jsp 没找到会报404
2:找到对应的jsp文件后.将jsp文件变成java文件.并调用编译器编译成class文件,最终放在了work目录下
3.编译后的class文件会被服务器当做Servlet执行,生成动态的内容,将动态的内容返回给服务器
4.服务器拿到生成的内容,组装成响应信息,返回给浏览器
5.浏览器收到响应,展示内容 
总结:jsp本质上是一个Servlet

jsp知识点学习

1 jsp的注释--知道
2 jsp的脚本语法--了解
3 jsp的指令配置--了解
4 jsp的内置对象--了解
5 jsp的域对象--知道
6 jsp的动作标签--了解

唯一核心:接受服务器servlet产生的各种复杂数据,进行展示--重点练习

1)jsp的注释

作用:给程序员做提示功能使用

格式:<%-- jsp注释 --%>

特点:

jsp中可以写html注释,但是jsp的注释不会显示在源码上,更加安全。
如果在jstl标签体内使用html的注释将会失效,所以在jsp页面中推荐使用jsp的注释。

2)jsp的脚本语法(了解)

作用:就是用来定义java代码的

<% %> :java程序片段
定义在它里面的java代码,在生成的servlet源码文件的service方法里面有一份
<%= %>:页面输出表达式 
(了解)定义在它里面的java代码,在生成的servlet源码的service方法里面有一份 做输出
<%! %>:定义成员
(了解)定义在它里面的java代码,在生成的servlet源码文件成员位置上有一份

3)jsp的指令配置

jsp的指令一共有3个:page指令 include指令 taglib指令 特点:可以出现多次 可以出现在任意地方

page指令:了解

作用:给当前jsp页面声明一些属性
格式:<%@page 属性名1=属性值1 属性名2=属性值2 属性名3=属性值3 %>
属性:
	language:当前页面支持的语言
	contentType:response.setContentType("text/html;charset=utf-8"); 解决输出中文乱码问题
	pageEncoding:当前jsp页面支持不支持写中文
	contentType和pageEncoding之间有一些联系:
		    			如果2个都出现,各自使用各自的
		    			如果2个只出现一个,另一个就是用出现的那一个
		    			如果2个都不出现,使用iso-8859-1
	import:导包 快捷键:alt+回车
	errorPage:当前页面发生了错误,要跳转的地址
	isErrorPage:默认是false true:代表当前页面是错误页面
		 			好处:可以获取错误信息 条件:必须使用内置对象(exception)
		 							exception:要想被使用,当前必须是错误页面
	
	session:支持不支持当前的jsp页面使用session这个内置对象
					默认是true 支持   false:不支持

include指令

 静态包含
 作用:用来包含其它jsp页面内容的,将被包含页面的内容全都整合到一个页面中
 特点:最终只编译生成一个文件  xxx.class

taglib指令

作用:引入外部jsp不支持的各种标签  引入之后就可以在jsp中使用该标签了

4) jsp的内置对象 (面试题)

内置对象:一访问jsp的时候,jsp就会创建出9个对象 无需我们创建,直接使用即可

HttpServletRequest	 		request (域对象)
HttpSession		     		session (域对象)
ServletContext	     		application (域对象)
JspWriter(jsp的输出流)--PrintWriter(Servlet的输出流)      out (页面输出语句)   
 				----------------------------
PageContext		     	    pageContext (jsp特有的域对象)
HttpServletResponse	     	response
Object			     	    page(this) 代表当前页面对象
ServletConfig		        config (servlet的配置对象)
Throwable		            exception (异常对象 使用条件:必须当前页面的isErrorPage="true"才能用) 

pageContext:jsp的域对象 但不是servlet的域对象

作用:也可以用来存储数据,但存储的数据只在当前页面有效,还不如一个变量好使
1 可以获取其他八大内置对象(了解)
2 可以从别的作用域中查找数据(了解)
			findAttribute("key")
		     作用:依次从作用域范围最小的开始查找 一直到最大的,如果都找不到 返回null
3 pageContext可以操作其他作用域(了解)
			request.setAttribute("msg", "aaa");
			pageContext.setAttribute("msg", "aaa",PageContext.REQUEST_SCOPE);
			参数:
				PageContext.REQUEST_SCOPE	request域
				PageContext.SESSION_SCOPE	session域
				PageContext.PAGE_SCOPE		pageContext域
				PageContext.APPLICATION_SCOPE   ServletContext域

5) jsp的域对象

servlet: request  ServletContext session
jsp: 	 request  ServletContext session  pageContext

6) jsp的动作标签(了解)

<jsp:forward page="..."></jsp:forward>  请求转发
<jsp:include page="...."></jsp:include> 动态包含  会把包含的所有页面都编译了 推荐使用静态包含

核心:使用jsp接收servlet产生的数据(字符串,集合,数组,map等等)并且展示

el标签

概述

el:Expression Language
能够嵌套到jsp页面的标签,使jsp中的java代码写起来更加的简化
el的书写格式:${el的表达式}
主要作用:在jsp中通过标签的书写方式 获取域中的数据且展示(重点)

el的学习知识点

1 通过el标签在jsp页面中获取Servlet的3大域中的数据且展示 (重点)
		简单数据(String  int  double 。。)
		复杂数据 (list 数组  map)
		对象属性  ( javabean )
           
        
2 通过el标签做一些运算  + - * / && || > < 三元运算(了解)			

1 通过el标签在jsp页面中获取Servlet的3大域中的数据 (重点)

el对域对象中简单数据的获取:${requestScope||sessionScope||applicationScope.key名}
el对域对象中复杂数据获取:
数组和list集合 ${requestScope||sessionScope||applicationScope.key名[角标]}
map集合:${requestScope||sessionScope||applicationScope.key名.map的键名}
el对域中对象属性值的获取:
${requestScope||sessionScope||applicationScope.key名.对象属性名}
或${requestScope||sessionScope||applicationScope.key名[“对象属性名”]}

注意:
requestScope:el其中提供的一个内置对象
sessionScope:el其中提供的一个内置对象
applicationScope:el其中提供的一个内置对象
​ 唯一作用:专门用来获取对应域中存储数据的

el的便捷方式:依次从最小的域中开始查找,找到了直接返回 找不到继续找下一个 如果都没有 返回的是空内容
域的范围大小:pageContext<request<session<servletContext
缺点:
1 在使用el的便捷方式的过程中,尽量保证多个域的key名不同
2 域的键名不要有一些特殊的符号_,.,+等 

2) 通过el标签做一些运算 (了解)

运算符: + - * / && || > < 三元运算等
特点:
在el做+ - * / 运算 不论运算符的后面是什么类型,只要能运算动的全都做运算,不能运算动的 一律报错 
没有字符串相连拼接的概念

${pageContext.request.contextPath}:在jsp页面获取当前项目的虚拟别名路径

empty(掌握)

作用:可以判断一个容器的长度是否为0
      可以判断一个对象是否为null

容器(list/map集合):
	    如果集合长度为0   true
	    如果集合长度不为0 false
对象(javabean):
	    如果对象为nulL   true
	    如果对象不为null false

取反值:!或 not

jstl标签(if判断 foreach循环)

注意:jstl不是jsp的内置标签,如果想要在jsp中使用这个标签
需要先在当前的jsp中,引入该标签库

1)jstl的入门

jstl的入门步骤:
	1 导2个jar包
	2 在哪个jsp页面使用jstl标签,就需要在当前的jsp中通过jsp的指令tagLib引入

2)jstl知识点:判断和循环

core核心下一共有13组标签,咱们只玩2组

if :判断

格式:	<c:if test="el表达式" [var="变量名"] [scope="保存的域"]>  
		   条件成立的时候输出的内容
	    </c:if>

foreach:循环

格式1:
<c:forEach begin="开始" end="结束" step="循环的间隔数" var="每次循环的变量名" varStatus="记录循环状态">
	${变量名 }
</c:forEach>	
varStatus="记录循环状态"
count:计数当前第几个
first:判断是否是第一个
last:判断是否是最后一个
格式2(掌握):<c:forEach items="要遍历的list/map" var="每一次遍历的内容"></c:forEach>

jsp案例场景

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
        <h2>
          <a href="/find">展示所有用户的数据</a>
        </h2>
  </body>
</html>

servlet

@WebServlet(name = "FindServlet",urlPatterns = "/find")
public class FindServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //收集用户的数据--后期(连上数据库拿用户数据)
        User user1 = new User("jack", "男", 22);
        User user2 = new User("rose", "女", 18);
        User user3 = new User("张三", "男", 21);
        User user4 = new User("李四", "男", 20);
        User user5 = new User("王五", "男", 25);

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        list.add(user5);
        //所有用户的数据都在list中
        request.setAttribute("list",list);
        request.getRequestDispatcher("/jsp/show.jsp").forward(request,response);


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>用户信息</title>
</head>
<body>
            <h2 align="center">用户的信息</h2>
            <table border="1" width="500" align="center">
                <tr>
                    <td>编号</td>
                    <td>姓名</td>
                    <td>性别</td>
                    <td>年龄</td>
                    <td>操作</td>
                </tr>

                <%-- el标签+jstl标签的内容 --%>
               <c:if test="${not empty list}">
                   <c:forEach items="${list}" var="user" varStatus="vs">
                       <tr>
                           <td>${vs.count}</td>
                           <td>${user.username}</td>
                           <td>${user.sex}</td>
                           <td>${user.age}</td>
                           <td>
                               <a href="#">删除</a>
                               <a href="#">修改</a>

                           </td>
                       </tr>
                   </c:forEach>
               </c:if>
            </table>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值