淘先锋技术网

首页 1 2 3 4 5 6 7

此博客用于个人学习,来源于网上,对知识点进行一个整理。

一,JSP:

Java Server Page

1.什么是 JSP:

从用户角度看待,就是是一个网页,从程序员角度看待,其实是一个 java 类,它继承了 servlet,所以可以直接说 JSP 就是一个 Servlet。

2.为什么会有 JSP:

html 多数情况下用来显示静态内容,一成不变的。但是有时候我们需要在网页上显示一些动态数据,比如:查询所有的学生信息,根据姓名去查询具体某个学生。这些动作都需要去查询数据库,然后在网页上显示。html 是不支持写 java 代码,jsp 里面可以写 java 代码。

3.怎么用 JSP:

指令写法:<%@ 指令名字 %>

  1. page 指令:
  • language

    表明 jsp 页面中可以写什么类型的代码,比如 java

  • contentType

    声明这个文件是什么类型,告诉浏览器是什么内容类型,以及使用什么编码

    contentType=“text/html; charset=UTF-8”

    text/html MIMEType 这是一个文本,html 网页

  • pageEncoding

    JSP 的内容编码

  • extends

    用于指定 jsp 翻译成 java 文件后,继承的父类是谁,一般不用改

  • import

    导包使用的,一般不用手写

  • session

    值可选的有 true or false

    用于控制在这个 JSP 页面里面,能够直接使用 session 对象

    具体的区别是,请看翻译后的 java 文件,如果该值是 true,那么在代码里面会有 getSession() 的调用,如果是 false,那么就不会有该方法调用,也就是没有 sessio n对象了,在页面上自然也就不能使用 session了

  • errorPage

    指的是错误的页面,值需要给错误的页面路径

  • isErrorPage

    上面的 errorPage 用于指定错误的时候跑到哪一个页面去。那么这个 isErroPage , 就是声明某一个页面到底是不是错误的页面。

  1. include 指令:

    <%@ include file=“文件名”%>

    包含另外一个 jsp 的内容进来,把另外一个页面的所有内容拿过来一起输出,所有的标签元素都包含进来

  2. taglib指令:

    <%@ taglib prefix="" uri=""%>

    uri: 标签库路径
    prefix : 标签库的别名

4.JSP动态标签:

  1. jsp:include:

    <jsp:include page=""></jsp:include>
    

    包含指定的页面,这里是动态包含。也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来

  2. jsp:forword:

    <jsp:forward page=""></jsp:forward>
    

    前往哪一个页面,类似于 servlet 中的请求转发

    //请求转发
    request.getRequestDispatcher("other.jsp").forward(request, response);
    
  3. jsp:param:

    在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数

    在 dome1.jsp 中:

    <jsp:forward page="demo2.jsp">
    	<jsp:param value="beijing" name="address"/>
    </jsp:forward>
    

    在 demo2.jsp 中获取参数:

    <br>收到的参数是:<br>
    <%= request.getParameter("address")%>
    

5.JSP 内置对象:

所谓内置对象,就是我们可以直接在 jsp 页面中使用这些对象,不用创建。

  • 作用域对象

    表示这些对象可以存值,他们的取值范围有限定。setAttribute 和 getAttribute

        这是demo01的页面<br>
        <% 
        pageContext.setAttribute("name", "pageContext");
        request.setAttribute("name", "request");
        session.setAttribute("name", "session");
        application.setAttribute("name", "application");
        %>
        输出四个内置对象<br>
        <%=pageContext.getAttribute("name") %><br>
        <%=request.getAttribute("name") %><br>
        <%=session.getAttribute("name") %><br>
        <%=application.getAttribute("name") %><br>
    

    作用域大小排列:
    pageContext > request > session > appliaction

    • 以上四个作用域的区别

      • pageContext 【PageContext】

      作用域仅限于当前的页面

      还可以获取到其他八个内置对象

      • request 【HttpServletRequest】

      作用域仅限于一次请求,只要服务器对该请求做出了响应,这个域中存的值就没有了

      • session 【HttpSession】

      作用域限于一次会话(多次请求与响应)当中

      • application 【ServletContext】

      整个工程都可以访问,服务器关闭后就不能访问了

    • out 与 response 的区别

      • out 【JspWriter】

      • response 【HttpServletResponse】

在这里插入图片描述

  • 另外三个
    • exception【Throwable】
    • page【Object】 —就是这个jsp翻译成的java类的实例对象
    • config 【ServletConfig】

二,EL 表达式:

是为了简化咱们的 jsp 代码,具体一点就是为了简化在 jsp 里面写的那些 java 代码。

写法格式:{表达式}

如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。一直把四个作用域取完都没有,就没有显示。

1.如何使用:

  1. 取出四个作用域的值:

        先在作用域里面存值<br>
        <%
        pageContext.setAttribute("name", "pageContext");
        request.setAttribute("name", "request");
        session.setAttribute("name", "session");
        application.setAttribute("name", "application");
        %>
    
        <br>通过普通手段进行取值<br>
        <%=pageContext.getAttribute("name") %>
        <%=request.getAttribute("name") %>
        <%=session.getAttribute("name") %>
        <%=application.getAttribute("name") %>
    
        <br>通过EL表达式取值<br>
        ${ pageScope.name }
        ${ requestScope.name }
        ${ sessionScope.name }
        ${ applicationScope.name }
    
  2. 如果域中的是数组:

    	<br>如果存的是数组<br>
    	<%
    		String[] aa = {"pageContext","request","session","application"};
    		pageContext.setAttribute("aa", aa);
    	%>
    	${aa[0]},${aa[1]},${aa[2]},${aa[3]}
    
  3. 如果域中的是集合:

    	<br>如果存的是集合<br>
    	<%
    		List list = new ArrayList();
    		list.add("pageContext");
    		list.add("request");
    		list.add("session");
    		list.add("application");
    		pageContext.setAttribute("list", list);
    	%>
    	${list[0]},${list[1]},${list[2]},${list[3]}
    
  4. 如果域中的是Map集合:

    	<br>如果存的是Map集合<br>
    	<%
    		Map map = new HashMap();
    		map.put("one", "pageContext");
    		map.put("two", "request");
    		map.put("three", "session");
    		map.put("four", "application");
    		pageContext.setAttribute("map", map);
    	%>
    	${map.one},${map.two},${map.three},${map.four}
    

2.取值细节:

  1. 从域中取值,得先存值:

    	<% 
    		pageContext.setAttribute("name", "pageContext");
    		request.setAttribute("name", "request");
    	%>
    	${name},${pageScope.name},${requestScope.name}
    

    结果为:pageContext,pageContext,request

    	<% 
    		//pageContext.setAttribute("name", "pageContext");
    		request.setAttribute("name", "request");
    	%>
    	${name},${pageScope.name},${requestScope.name}
    

    结果为:request,request

    • 如果直接是 name,按照 pageContext > request > session > appliaction 的顺序进行查询,如果都没有,那就没有输出
    • 可以通过直接指定获取具体的值
  2. 取值方式:

    • 如果是有下标:

      	<br>如果是有下标的<br>
      	<%
      		String[] a = {"aa","bb","cc","dd"};
      		pageContext.setAttribute("a", a);
      	%>
      	${a[0]},${a[1]},${a[2]},${a[3]}
      
    • 如果没有下标:

      	<br>如果是没有下标的<br>
      	<% 
      		User user = new User("zhangsan","18");
      		pageContext.setAttribute("user", user);
      	%>
      	${user.name},${user.age}
      

      一般使用 EL 表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。

3.EL表达式的11个内置对象:

${ 对象名.成员 }

  • pageContext

作用域相关对象

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

头信息相关对象

  • header
  • headerValues

参数信息相关对象

  • param

  • paramValues

  • cookie

全局初始化参数

  • initParam

三,JSTL:

全称 :JSP (Standard Tag Library jsp) 标准标签库

简化 jsp 的代码编写。替换<%%>的写法,一般与 EL 表达式配合

1.怎么使用:

  1. 导入 jar 文件到工程的 WebContent/Web-Inf/lib jstl.jar standard.jar
  2. 在 jsp 页面上,使用 taglib 指令,来引入标签库
  3. 注意:如果想支持 EL 表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持 EL 表达式
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

2.常用标签:

<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>
  1. c:set:
	<!-- 定义一个变量,其中,var:变量,value:变量的值,scope:取出的工作域,默认为pageContext -->
	<c:set var="name" value="zhangsan" scope="session"></c:set>
	${sessionScope.name}
  1. c:if:
	<!-- 判断语句,如果成立,执行if便签内的内容,test里面写的是if语句的判断条件,要用EL语句 -->
	<c:set var="age" value="18"></c:set>
	<c:if test="${age > 20}">
		年龄大于20...
	</c:if>
	<c:if test="${age <= 20}">
		年龄小于等于20...
	</c:if>
  1. c:forEach:
	<!-- 普通遍历,begin为初始值,end为末尾值,var为循环数的变量名,step为增加的大小 -->
	<c:forEach begin="0" end="10" var="i" step="2">
		${i}
	</c:forEach>
	<br>
	<% 
		List list = new ArrayList();
		list.add(new User("zhangsan","18"));
		list.add(new User("lisi","28"));
		list.add(new User("wangwu","38"));
		list.add(new User("zhaoliu","48"));
		list.add(new User("qianqi","58"));
		pageContext.setAttribute("list", list);
	%>
	<!-- forEach也可以用来循环输出集合,其中var为集合的每个值赋予的对象名,items为遍历的集合,要用EL语句 -->
	<c:forEach var="user" items="${list}">
		${user.name}----${user.age}
	</c:forEach>