Javaweb二(JSP详解)

Posted 乘凉者 栽树人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javaweb二(JSP详解)相关的知识,希望对你有一定的参考价值。

8、JSP

8.1、JSP原理

首先了解什么是jsp

  • java服务端页面,和servlet一样,用于动态的web技术

  • 特点:

    • 写jsp跟html差不多
    • HTML只能提供静态的数据
    • jsp页面嵌入Java代码,可以提供动态
  • 原理:

    • 我们执行jsp文件会发现,在我们电脑的地址下,它变成了一个Java程序
    • 也就是说浏览器向服务器发送请求,不管访问什么问题,其实都是访问servlet
    • jsp本质上就是一个Servlet
  • 导入jasper-runtime依赖包

    <dependency>
      <groupId>tomcat</groupId>
      <artifactId>jasper-runtime</artifactId>
      <version>5.5.15</version>
    </dependency>
    
  • 通过HttpJspBase不难发现

    public abstract class HttpJspBase extends HttpServlet implements HttpJspPage 
    

    它继承了servlet

    //初始化
    public void jspDestroy() 
        
    //销毁
        protected void _jspDestroy() 
        
    //JSPService
        public abstract void _jspService(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;
    
    

8.2、JSP语法

JSP是Java技术的一种应用

依赖准备

  <dependencies>
<!--    servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
<!--    JSP依赖-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>
<!--   jstl依赖-->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
<!--    stand标签-->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>

JSP表达式

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

JSP脚本片段

<%
  int sum=0;
  for (int i = 1; i <=100 ; i++) 
    sum+=i;
  
  out.print(sum);
%>
<%--  代码中嵌入HTML元素--%>
<%
  for (int i = 0; i <5 ; i++) 
%>
  <h1>Hello,World <%=i%></h1>
<%
  
%>

Jsp声明

<%!
  static
    System.out.println("你好");
  
  private int a=0;
  public void kong()
    System.out.println("进入方法kong");
  
%>

JSP声明:会被编译到JSP生成Java的类中!其他的,会被生成到jspService方法中!在jsp中,嵌入java代码即可

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

<%--注释--%>

jsp的注释,不会出现在客户端,Html就会!

8.3、JSP指令

<%@page args....%>
<%@include file=""%>
<%--@includ会将两个页面合二为一--%>
<%--jsp标签
    jsp:include拼接页面,本质还是三个--%>

8.4、9大内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application 存东西
  • config
  • out
  • page
  • exception
PageContext.setAttribute("name","kongkong1");
request.setAttribute("name","kongkong2");
session.setAttribute("name","kongkong3");
application.setAttribute("name","kongkong4");

request:客户端向服务器请求的数据,用户看完就没用,例:新闻

session:客户端向服务器请求的数据,用户用完还有用,例:购物车

application:客户端向服务器请求的数据,这个用户用完,另外的用户还能用,例:聊天记录

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

JSP标签

<jsp:forward page="/jsp1.jsp">
    <jsp:param name="name" value="kongkong"></jsp:param>
    <jsp:param name="age" value="21"></jsp:param>  
<jsp:forward>        

JSTL表达式

JSP标签库的使用就是为了弥补HTML标签的不足,它定义许多标签,可以供我们使用,标签的功能和Java代码一样

格式化标签

SQL标签

XML标签

核心标签(掌握)

<form action="jsp1.jsp" method="get">
    <input type="text" name="username" value="$param.username">
    <input type="submit" value="登录">
</form>
<c:if test="$param.username=='admin'" var="isAdmin">
    <c:out value="登录成功"/>
</c:if>


<c:out value="$isAdmin"/>

头文件还得加上一个

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

注意:要是出现xml无法解析jstl的情况

解决:将jstl-api.jar和standard.jar一起导入tomcat的lib目录下即可

  • 使用JSTL标签库步骤
    • 引入对应的taglib
    • 使用其中的方法
    • 在Tomcat也需要引入jstl的包
<c:set var="gradle" value="80"/>
    <c:choose>
        <c:when test="$gradle>90">
            优秀!
        </c:when>
        <c:when test="$gradle>70">
            一般!
        </c:when>
        <c:when test="$gradle>60">
            及格!
        </c:when>
        <c:when test="$gradle<60">
            不及格!
        </c:when>
    </c:choose>
  • For-Each
<%

    ArrayList<String> person = new ArrayList<>();
    person.add(0,"kong");
    person.add(1,"kong4");
    person.add(2,"kong3");
    person.add(3,"kong2");
    person.add(4, "kong1");
    request.setAttribute("list",person);
%>

<c:forEach var="person" items="$list">
    <c:out value="$person"/><br>
</c:forEach>

<hr>
<c:forEach var="person" items="$list" begin="0" end="4" step="2">
    <c:out value="$person"/>
</c:forEach>

以上是关于Javaweb二(JSP详解)的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb详解(第四篇)之JSP 简介

JavaWeb学习篇之----Jsp详解

JavaWeb学习篇之----Jsp详解

Tomcat与JavaWeb开发技术详解的目录

JavaWeb 技术文章 [他山之石]

JAVAWEB开发之JSPEL及会话技术(Cookie和Session)的使用详解