JSP学习记录

JSP

1. JSP基础语法

1.1 简介

JSP:Java Server Page动态网页编程技术,是Java Web服务器端的动态资源。
较html而言,JSP允许在页面嵌套java代码。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

较servlet而言,JSP除了可以用java代码产生动态数据同时,也很容易对数据进行排版。
JSP和Servlet都可用于开发动态web资源,servlet一般作为web应用中的控制器组件来使用,JSP作为数据显示模板来使用。(其实JSP就是一个Servlet,当我们第一次访问Jsp时,jsp引擎会将其翻译成一个servlet,存在在tomcat(源码目录)中的work目录中)

1.2 注释

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP</title>
</head>
<body>
<%
    //隐式注释:不能在客户端查看的注释
    /*隐式注释:不能在客户端查看的注释*/
%>
<!--显式注释:能在客户端查看的注释-->
<%--隐式注释:不能在客户端查看的注释--%>
<h2>hello jsp</h2>
</body>
</html>

1.3 Scriptlet(脚本小程序)

Scriptlet(脚本小程序)即所有嵌入在HTML代码中的Java程序。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
...
<!--java脚本段,可以写java代码,定义局部变量、编写语句等。生成的代码在Servlet的service方法体中-->
<% ... %>

<!--声明,声明全局变量、方法、类等,生成的代码在servlet的类体中-->
<%! ... %>

<!--输出表达式,可以输出变量或字面量,生成的代码在servlet的service方法体中,相当于out.print()输出-->
<%=...%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Scriptlet脚本小程序</title>
</head>
<body>
<%
    String str="hello jsp";
    System.out.println(str);//输出到控制台
    out.print(str);//输出到浏览器
    out.write(num);
%>
<%!
    int num=10;
%>
<%=str%>
<%=num%>
</body>
</html>

2. 指令标签

2.1 include静态包含

静态包含在编译阶段会将内容进行整合,相当于代码直接替换,最终只会生成一个源码文件放在_jspService方法体中(源码文件中),只生成了一个servlet,几个页面不能有同名变量,运行效率高一点,但耦合性较高,不够灵活。不可传递参数。

使用include指令实现:

<%@include file="相对路径"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>m
    <title>include静态包含</title>
</head>
<body>
<%@include file="04-header.jsp"%>
<h2>主体内容</h2>
<%@include file="04-footer.jsp"%>
</body>
</html>

2.2 include动态包含

动态包含相当于调用方法,会生成多个源码文件,可以定义同名变量
运行效率较高,但耦合性较低。
可传递参数。不需要传递参数时,include双标签之间不要有任何内容,包括换行和空格。
传参使用:<jsp:param name="参数名" value="参数值"/>(name属性不支持表达式,value属性支持表达式)
获取参数:request.getParameter("参数名");

使用include动作标签实现:

<jsp:include page="04-footer.jsp">
    <jsp:param name="uname" value="name"/>
</jsp:include>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>include动态包含</title>
</head>
<body>

<jsp:include page="04-header.jsp"></jsp:include>
<h2>动态包含主体内容</h2>
<!--
<%! String footy="04-footer.jsp"; %>
<jsp:include page="<%=footy%>"></jsp:include>
-->
<jsp:include page="04-footer.jsp">
    <jsp:param name="uname" value="name"/><%--传递参数--%>
</jsp:include>
</body>
</html>

04-footer.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>footer</title>
</head>
<body>
<h2>footer</h2>
<%
    String name=request.getParameter("uname");//获取参数
    out.print(name);
%>
</body>
</html>

3. 四大对象

  • page范围的域对象。当前页面有效,跳转后无效
  • request范围的域对象。在一次请求中有效,服务端跳转有效,客户端跳转无效
  • session范围的域对象。在一次会话中有效,服务端和客户端跳转均有效
  • application范围的域对象。在整个应用中都有效

Jsp中服务端跳转:

  • 服务端跳转
<jsp:forward page="目标地址"></jsp:forward>
  • 客户端端跳转
<a href="目标地址">跳转</a>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP四大对象</title>
</head>
<body>

<%
    //page范围的域对象,当前页面有效,跳转后无效
    pageContext.setAttribute("pname","张三");
    //request范围的域对象,在一次请求中有效,服务端跳转有效,客户端跳转无效
    request.setAttribute("rname","李四");
    //session范围的域对象,在一次会话中有效,服务端和客户端跳转均有效
    request.getSession().setAttribute("sname","王五");
    //application范围的域对象,在整个应用中都有效
    application.setAttribute("aname","赵六");
%>
<%
    String pname=(String)pageContext.getAttribute("pname");
    String rname=(String)request.getAttribute("rname");
    String sname=(String)request.getSession().getAttribute("sname");
    String aname=(String)application.getAttribute("aname");
    System.out.println("pname :"+pname);
    System.out.println("rname :"+rname);
    System.out.println("sname :"+sname);
    System.out.println("aname :"+aname);
%>
<%--jsp服务端跳转
<!--服务端跳转-->
<jsp:forward page="06-JSP四大对象-02.jsp"></jsp:forward>--%>
<!--客户端端跳转-->
<a href="06-JSP四大对象-02.jsp">跳转</a>
</body>
</html>

06-JSP四大对象-02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP四大对象-02</title>
</head>
<body>
<%
    String pname=(String)pageContext.getAttribute("pname");
    String rname=(String)request.getAttribute("rname");
    String sname=(String)request.getSession().getAttribute("sname");
    String aname=(String)application.getAttribute("aname");
    out.print("pname :"+pname);
    out.write("<br/>");
    out.print("rname :"+rname);
    out.write("<br/>");
    out.print("sname :"+sname);
    out.write("<br/>");
    out.print("aname :"+aname);
%>
</body>
</html>

4. EL表达式

EL表达式是为了使JSP写起来更加简单。

4.1 EL表达式的语法

EL表达式${expression}一般操作对象都是域对象中的数据,不能操作局部变量。

指定从某个特定域对象中查找可以使用四个域对象对应的空间对象:

pageScope
requestScope
sessionScope
applicationScope

4.2 EL表达式的使用

4.2.1 获取数据

获取域对象中的数据:
默认从小范围查找(pageContext<request<session<application),没找到则返回空字符串("")。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式</title>
</head>
<body
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值