Java学习笔记——JavaWeb——JSP

JSP(Java Server Pages) ,是一个用于展现数据的页面. 本质是Servlet

HTML : 静态资源

JSP : 模板引擎,动态页面 , 适合用于展现数据 , 不适合写java逻辑代码

Servlet : 适合写java逻辑代码 , 不合适写html展现数据

 

语法

1 jsp文件可以写所有的html标签,css样式,js代码 (与之前html的用法一致)

2 写java代码

       使用<% java代码 %> ,在jsp中写java脚本

3 java代码的简化输出的写法

4 设置三大指令

5 写六个动作

6 使用9个内置对象

三大指令

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。

在JSP 2.0规范中共定义了三个指令:

page指令

Include指令

taglib指令

 

page指令

<%@ page 属性=”属性值” 属性=”属性值” %>

属性 :

1 import 导包

2 session: 是否会自动创建session对象。默认值是true; <%@ page session=”false” %>

3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.

4 errorPage: 如果页面中有异常,则跳转到指定的资源。

errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。

如果不写“/”则代表相对路径。

    5、 isErrorPage: 是否创建throwable对象。默认是false;

6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");
              告诉浏览器如何解析,以及编码格式

7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。

       告诉服务器使用什么编码格式解析

8、 isELIgnored: 是否忽略EL表达式。 默认是false既支持使用

 

include指令

让当前的jsp包含另外一个文件

位置 : 在当前jsp需要使用的任意地方

格式 : <%@ include file=”路径” %>

作用 : 将引入的文件内容,合并到当前的jsp中, 即将两个文件,变为一个文件 —— 静态包含/引入 : 可以使代码复用

taglib指令

主要用于在当前jsp页面引入 jstl标签库

JSP中动态include和静态include的区别?

a、静态include:语法:<%@ include file="文件名" %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。

        b、动态include:语法:<jsp:include page="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新

 

六个动作

动作的标签 : <jsp:动作名 属性=”属性值”> </jsp:动作名>

使用标签的形式来表示一段java代码。

  • <jsp:include > 动态包含:

程序运行到此处,才会去加载引入的其他文件,并没有将文件二合一

  • <jsp:forward> 请求转发:<jsp:forward page="TestJSP03.jsp"></jsp:forward>等价与

request.getRequestDispatcher("TestJSP03.jsp").forward(request, response);

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

       <jsp:forward page="TestJSP03.jsp">

              <jsp:param value="123" name="tom"/>

       </jsp:forward>

  • <jsp:useBean> 创建一个对象stu   <jsp:useBean id="stu" class="com.zhiyou.entry.Student"></jsp:useBean>
  • <jsp:setProperty> 给指定的对象属性赋值<jsp:setProperty name="stu" property="name" value=”张三” />
  • <jsp:getProperty> 取出指定对象的属性值<jsp:getProperty name="stu" property="name" />

九大内置对象

内置对象 : 在每个jsp页面中,可以直接使用的对象

对象名

类型

说明

request

javax.servlet.http.HttpServletRequest

得到用户请求信息,

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

session

javax.servlet.http.HttpSession

由session="true"开关

application

javax.servlet.ServletContext

所有用户的共享信息

exception

java.lang.Throwable

由isErrorPage="false"开关

page

java.lang.Object当前对象this

当前servlet实例

config

javax.servlet.ServletConfig

 

out

 javax.servlet.jsp.JspWriter

字符输出流,相当于 printWriter对象

pageContext

 javax.servlet.jsp.PageContext

 

 

四大作用域

域 : 一片区域,用来存储数据

一下四个域中的数据的作用范围不同

page域 : 此域中的数据,只在当前页面有效

request域 : 数据在一次请求中可以共享

session域 : 数据在一次会话内有效

       与服务器的交互就是会话.

       即使是重定向, 在两个Servlet类或者是两个jsp中数据都可以共享

application 域 : 数据在整个应用程序中有效果. 只有应用程序不宕机,就可以一直使用

四大域作用范围 :

       page < request < session < application

四大域都有各自的getAttribute()方法.从域中获得值.

pageContext.findAttribute(key) ; 从四大域依次查找值,找到了即输出

按照 pageà request à session à application的顺序查找


<h1>index4.jsp</h1>

<%



    // 设置所有域 : 给page域设置值

    // pageContext.setAttribute("key", "pageValue", PageContext.PAGE_SCOPE);

   

    // 请求域设置

    // request.setAttribute("key", "reqVal");

    // 请求转发

    //request.getRequestDispatcher("index5.jsp").forward(request, response);

    // 重定向

    //response.sendRedirect("index5.jsp");

   

    //Object obj = pageContext.getAttribute("pageKey");

    //out.write((String)obj);

   

    // 设置session域

    // session.setAttribute("key", "seValue");

    session.invalidate();

    // request.getRequestDispatcher("index5.jsp").forward(request, response);

    // response.sendRedirect("index5.jsp");

    // 设置 application域

    application.setAttribute("key", "appValue");

    // request.getRequestDispatcher("index5.jsp").forward(request, response);

    // response.sendRedirect("index5.jsp");

   

    Object obj = pageContext.findAttribute("key");

    out.print(obj);

   

%>
<body>

<h1>index5.jsp</h1>

<%=(String)application.getAttribute("appKey")%>

</body>

EL

JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

作用

简化jsp页面中的取值操作

语法

${expr}

本质

pageContext.findAttribute(“expr”)

EL中的基础操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符:

操作符描述
.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
( )组织一个子表达式以改变优先级
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值

JSTL 

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  1. 核心标签
  2. 格式化标签
  3. SQL 标签
  4. XML 标签
  5. JSTL 函数

理解 : 将java代码标签化, 更符合前端的写法.

使用

1 先将jstl.jar + standard.jar包导入项目

2 哪个jsp页面需要使用jstl标签,就在哪个页面使用taglib指令引入jstl标签库

3 使用jstl的标签

演示

<!-- 1 设置域变量-->
 <c:set var="k11" value="v13" scope="request"></c:set>
 <!-- 3 移除变量  -->
 <%-- <c:remove var="k11"/> --%>
<!--2 输出-->
<c:out value="${k11 }"></c:out>
<!-- 4 判断 -->
<c:if test="${1 < 0}">
	<p>正确1</p>
</c:if>
<c:if test="${k11 == 'v11'}">
	<p>正确2</p>
</c:if>
<!-- 5 判断 : 类似ifelse -->
<c:choose> 
	<c:when test="${k11 == 'v11' }"><!-- 相等于if  -->
		值是v11
	</c:when> 
	<c:when test="${k11 == 'v12' }"><!-- 相等于else if  -->
		值是v12
	</c:when> 
	<c:otherwise>  <!-- 相等于else  -->
		值是不知道
	</c:otherwise>
</c:choose>
<!-- 6 循环 
	begin  开始的值
	end    结束的值
	step   步长
-->
<c:forEach begin="1" end="5" step="2">
<p>p</p>
</c:forEach>
<%
ArrayList<String> list = new ArrayList<String>();
list.add("二");
list.add("一");
list.add("四");
list.add("三");
request.setAttribute("list", list);
%>
<!-- 7 迭代
	items 要遍历的对象
	var   遍历得到的值
 -->
<c:forEach items="${list }" var="i">
 ${i }
</c:forEach>
<br>

<!-- 8 路径标签 
	<c:url value="路径"></c:url>
	<c:url value="路径"/>
-->

<a href="<%=request.getContextPath() %>/login">点击1</a><br>
<a href="<c:url value="/login" />">点击2</a><br>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值