JSP

JSP

1.什么是JSP

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

最大的特点:

  • 写jsp就像在写html。

  • jsp页面中可以嵌入Java代码,为用户提供动态数据。

 


2.JSP原理(本质上就是Servlet)

理解思路:jsp到底是怎样执行的?

  • 在代码层面:没有任何问题,就是和servlet一样。

  • 在服务器内部层面:

    • 你运行完jsp项目之后,tomcat中有一个work目录。

    • IDEA中使用tomcat的会在IDEA的tomcat中产生一个work目录。

    • 点开之后,你会发现jsp页面被转变成了Java程序。

 index_jsp.class
 index_jsp.java

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

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

本质上就是一个Servlet

 public void _jspInit(){
 ?
 }
 public void _jspDestory(){
 ?
 }
 public void _jspService(req,resp){
 ?
 }

内置一些对象

 pageContext         #页面上下文
 session             #session
 application         #applicationContext
 config              #config
 out                 #out
 page                #当前
 req
 resp

JSP运行原理流程图:

JSP

在JSP页面中:

  • 只要是Java代码,就会原封不动的输出。

  • 如果是HTML代码,就会被转换为:内部自动转换

     out.write("<html>\r\n");

然后输出到前端。

 


3.JSP基础语法

任何语言都有自己的语法,Java有。JSP作为Java技术的一种应用,它拥有一些自己扩充的语法,其中Java所有语法他都支持。

JSP表达式

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

JSP脚本片段

脚本片段中的代码会被原封不动生成到.jap.java中,所以这里面组好不要写注释。

没有=开头
 ?
 <% 
     int sum = 0;
     for(int i =1; i <= 100; i++){
         sum += i;
     }
     out.println("<h1>Sum="+sum+"</h1>")
 %>

JSP声明

 !开头
 <%!
     static{
         System.out.println("Loading Servlet!");
     }
     
     private int globalval = 0;
     
     public void li(){
         System.out,println("进入了")
     }

注意:

  • JSP声明会被编译到JSP生成的Java类中,其它的,都会被生成到JavaSservice方法中。

  • JSP的注释,不会再客户端显示,HTML的会。

JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。

JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了。

# jsp页面编码信息
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 ?
 # import 来导入用到的Java包
 <%@page import=”java.net.*,java.util.*,java.sql.*”%>

page指令的errorPage和isErrorPage

在一个JSP页面出错后,Tomcat会响应给我用户错误信息!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!例如:

<%@page errorPage=”xxx.jsp”%>

这时,在当前JSP页面出现错误时,会转发到xxx.jsp页面。

pageError的路径,由于是服务器端的跳转,所以绝对路径不需要加项目名,直接指定项目名称后面的路径即可

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%@ page  errorPage="b.jsp" %>
     <%
     if(true){
         throw new Exception("抛出异常");
         }
     %>
 ?
 b.jsp
 <%@ page pageEncoding="UTF-8"%>
 <html>
   <body>
    输出异常文字或信息!
   </body>
 </html>
 ?
 <%@ page  isErrorPage="true" %>

还可以在web.xml文件中配置错误页面,在出现某种错误时跳转到对应的页面处理。

<error-page>
     <error-code>404</error-code>
     <location>/error404.jsp</location>
   </error-page>
   <error-page>
     <error-code>500</error-code>
     <location>/error500.jsp</location>
   </error-page>

include指令

include指令表示静态包含!

include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。

静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把a.jsp和b.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。

 

taglib指令

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:

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

其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。

JSTL标签库会说明taglib指令的使用方式。

 


JSP九大内置对象

PageContext 存东西

Request 存东西

Response

Session 存东西

Application(ServletContext) 存东西

config (ServletConfig)

out

page

exception

 pageContext.setAttribute("name1","lihui1");     #保存的数据只在一个页面中有效
 request.setAttribute("name1","lihui2");         #保存的数据只在一次请求中有效,但是请求转发可以携带这个数据
 session.setAttribute("name1","lihui3");         #保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
 application.setAttribute("name1","lihui4");     #保存的数据只在服务器中有效,从打开服务器到关闭服务器
 application > session > request > pageContext

使用场景:

request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻。

session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车。

application:客户端向服务器端发送请求,产生的数据,一个用户用完了,其它用户还可能使用,比如:聊天数据。

 


JSTL表达式

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

  • 格式化标签

  • SQL标签

  • XML标签

  • 核心标签(重点)

 <c:out>
 <c:set>
 <c:if>
 <c:choose>
 <c:when>
 <c:forEach>
 <c:params>

JSTL标签使用步骤:

  • 引入对应的taglib

    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 使用其中的方法

  • 在tomcat也需要引入jstl的包,否则会莫名报错:jstl解析错误。

 


JSP

上一篇:将xlsx解析的excel表头json数据转成树结构


下一篇:复习一下JS事件循环