JavaWeb学习(七)

8. jsp

8.1 什么是jsp

Java Server Pages:java服务器端页面,也和Servlet一样,用于动态web技术

最大的特点:

  • 写jsp就像写html
  • 区别:
    • html只给用户提供静态数据
    • jsp页面中可以嵌入java代码,为用户提供动态数据

8.2 JSP原理

思路:JSP到底怎么执行的?

  • 代码层面没有任何问题

  • 服务器内部工作

    tomcat中有一个work目录:

    IDEA中使用Tomat的话会在IDEA的tomcat中生成一个work目录

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!

JSP最终也会被转换成一个Java类

在JSP中:

只要是java代码就会原封不动的输出

如果是HTML代码,就会被转化成out.write在页面输出

8.3 JSP基础语法

任何语言都有自己的语法,jsp作为Java技术的一种应用,它拥有一些自己的扩充语法

JSP表达式

<%--  jsp表达式
    作用:用来将程序的输出,输出到客户端
    <%=变量或表达式%>
--%>
<%=new java.util.Date()%>

jsp脚本片段

<%--  jsp脚本片段--%>
<%
int sum=0;
for (int i = 0; i < =100; i++) {
    sum+=i;
}
out.print("<h1>Sum="+sum+"<h1>");
%>

代码中嵌入html元素

<%--  在代码中嵌入html元素--%>
<%
for (int i = 0; i < 5; i++) {
    %>
<h1>Hello,World<%=i%></h1>
<%
}
%>

jsp声明

<%!
    static {
    System.out.println("Loading Servlet!");
}

private  int globalVar=0;

public void yurrize(){
    System.out.println("进入了方法Yurrize");
}
%>

JSP声明:会被编译到jsp生成Java类中,其他的会被生成到_jspService方法中

在JSP嵌入java代码即可

<%%>
<%=%>
<%!=%>

<%--注释--%>

jsp的注释不会在客户端显示

8.4 jsp指令

<%@page args........%>
<%@include file=""%>
  1. 自定错误页面

    • 在jsp中定制

    <%@page errorPage=“error/500.jsp” %>

    • 在xml中定制

      <error-page>
          <error-code>404</error-code>
          <location>/error/404.jsp</location>
      </error-page>
      
  2. 定制页面开头和结尾

    • include方法

      <%--<%@include>会将两个页面合二为一--%>
      <%@include file="common/header.jsp"%>
      <h1>网页主体</h1>
      <%@include file="common/footer.jsp"%>
      
    • jsp标签定制

      <%--jsp标签
          <jsp:include:拼接页面,本质还是三个
              --%>
      <jsp:include page="/common/header.jsp"/>
      <h1>网页主体</h1>
      <jsp:include page="/common/footer.jsp"/>
      
    • 注意区别!!!

8.5 九大内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application 【ServletContext】存东西
  • config 【ServletConfig】
  • out
  • page
  • exception
<body>
<%--内置对象--%>
<%
    pageContext.setAttribute("name1","缘昔一号");//保存的数据只在一个页面中有效
    request.setAttribute("name2","缘昔二号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","缘昔三号");//保存的数据只在一次session会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","缘昔四号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>

<%--取东西,脚本片段的的代码,会被原封不动的生成到jsp.java
要求:这里面的代码必须保证java语法
--%>
<%
    //通过pageContext取出我们保存的值,通过寻找方式
    //从底层到高层(作用域)
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");



%>

<%--使用el表达式输出   ${}  --%>

<h1>取出的值为</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>

</body>

作用域:page->request->session->application

pageContext.setAttribute();//保存的数据只在一个页面中有效
request.setAttribute();//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute();//保存的数据只在一次session会话中有效,从打开浏览器到关闭浏览器
application.setAttribute();//保存的数据只在服务器中有效,从打开服务器到关闭服务器

Request:客户端向服务器发送的请求,产生的数据,用户看完就没用了

Session:客户端向服务器发送的请求,产生的数据,用户用完一会还有用

Application:客户端向服务器发送的请求,产生的数据,一个用户用完了,其他用户还可能使用

8.6 JSP标签、JSTL标签、EL表达式

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

EL表达式:${ }

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象
  • 调用java方法(一般不用)

JSP标签

<%--<jsp:include page=""--%>
<%--<jsp:forward --%>
<jsp:forward page="jsptag.jsp">
    <jsp:param name="name" value="Yurrize"/>
    <jsp:param name="age" value="18"/>
</jsp:forward>

JSTL标签库

JSTL标签库的使用就是为了弥补HTML标签的不足,他自定义了许多标签,可以供我们使用,标签的功能和java代码功能相同

  • 核心标签(掌握部分)

    引入核心标签库,才可以使用

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
  • 格式化标签

    <%@ taglib prefix="fmt" 
               uri="http://java.sun.com/jsp/jstl/fmt" %>
    
  • Sql标签

    <%@ taglib prefix="sql" 
               uri="http://java.sun.com/jsp/jstl/sql" %>
    
  • XML标签

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

使用步骤:

  • 引入对应taglib标签库

  • 使用其中的方法

  • 在tomcat中也需要引入jstl的包,否则会解析错误

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
        <head>
            <title>Title</title>
        </head>
        <body>
            <h4>if测试</h4>
            <hr>
            <form action="coreif.jsp" method="get">
    
                <input type="text" name="username" value="${param.username}">
                <input type="submit" value="登录">
            </form>
            <%--判断如果提交的用户名是管理员则登录成功--%>
            <%--<%--%>
            <%--    if(request.getParameter("username").equals("admin")){--%>
            <%--        out.print("登陆成功");--%>
            <%--    }--%>
            <%--%>--%>
    
            <c:if test="${param.username=='admin'}" var="isAdmin" >
                <c:out value="管理员欢迎你"/>
            </c:if>
            <c:out value="${isAdmin}"/>
        </body>
    </html>
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值