WEB项目的目录结构 jsp page指令 错误页面 jsp声明

WEB项目的目录结构

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_html

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_html_02

META-INT  WEB-INF 对外都是不可访问的,不可把index.jsp/index.html 放这

 

JSP

 

JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的。

 

JSP本身就是一种Servlet其实JSP文件在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)

 

 

 

编译过程:

  • 浏览器第一次请求1.jsp时,Tomcat会将1.jsp转化成1_jsp.java这么一个类,并将该文件编译成class文件。编译完毕后再运行class文件来响应浏览器的请求
  • 以后访问1.jsp就不再重新编译jsp文件了,直接调用class文件来响应浏览器。当然了,如果Tomcat检测到JSP页面改动了的话,会重新编译的
  • 既然JSP是一个Servlet,那JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了。原来就是用write()出去的罢了。说到底,JSP就是封装了Servlet的java程序罢了
out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>简单使用JSP</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");

 

相对比Servlet内置了9个对象————out、session、response、request、config、page、application、pageContext、exception

 

一个 JSP 页面可由5种元素组合而成:

(1)普通的

(2)JSP 标签:如,指令标签、动作标签。

(3)变量和方法的声明。

(4)Java 程序片。

(5)Java 表达式。

3,4,5 构成 JSP 的脚本部分,也叫做scriptlet。

 

JSP的脚本必须使用下面三种方式括起来!

<%  %>【定义局部变量,编写语句】这里面声明的变量只在该<%%>内有效。

可以在“<%”和“%>”之间插入 Java 程序片。一个 JSP 页面可以有许多程序片,这些程序片将被 JSP 引擎按顺序执行。在一个程序片中声明的变量称做它们在

当程序片被调用执行时,这些变量被分配内存空间,所有的程序片调用完毕,这些变量即可释放所占的内存。当多个客户请求一个

 

 

<%!  %>【定义类或方法或数据声明部分】这里面声明的数据在整个 JSP 页面内有效。

原因:因为当多个客户(浏览器)请求一个 JSP 页面时,JSP 引擎为每个客户启动一个线程,这些线程由 JSP 引擎服务器来管理,这些线程共享,因此任何一个用户对

“<%!”和“%>”之间如果声明一个类,那么该类在

 

<%=  %>(也称之为表达式输出)【输出各种类型的变量,int、double、String、Object等】

可以在“<%=”和“%>”之间插入一个表达式(注意:不可插入语句,“<%=”是一个完整的符号,“<%”和“=”之间不要有空格),这个表达式必须能求值。表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。

  • 如果过多地使用<%%>会导致代码混乱,JSP还提供了一种scriptlet标签,使用此标签和<%%>有相同的功能,只不过它更美观了一些
<jsp:scriptlet>
    
        String s = "HelloWorld";
        out.println(s);
    
</jsp:scriptlet>

 

配置JSP 运行环境 :

在使用jsp之前要配置jsp引擎,我们使用tomcat服务器作为jsp引擎。

 

JSP 中的注释可分为两种

(1) HTML 注释:在标记符号“ <!--”和“-->”之间加入注释内容:

客户通过浏览器查看

 

(2) JSP 注释:在标记符号“ <%--”和“--%>”之间加入注释内容:

JSP 引擎忽略 JSP 注释,即在编译 JSP 页面时忽略 JSP 注释。

<%@ page language="java" import="java.util.*,java.text.*" 
    contentType= "text/html; charset=utf-8" %>
<html>
    <head>
        <title>输出当前日期</title>
    </head>
    <body>
        你好,今天是
        <% SimpleDateFormat formater =
              new SimpleDateFormat("yyyy年 MM月dd日");
            String strCurrentTime = formater.format(new Date()); %>    
        <%=strCurrentTime %>
    </body>
</html>

JSP中的 PAGE指令

通过设置内部的多个属性定义整个页面的属性

<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_html_03

PAGE指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • page 指令的作用对整个页面有效,与其书写的位置无关,但习惯把 page 指令写在 JSP 页面的最前面。
  • Page设置的属性只在当前页面有效,跳转页面属性就无效

 

contentType属性

contentType="text/html :text/html形式显示jsp的数据

在page指令中指定contentType="text/html;charset=UTF-8",就不会出现中文乱码问题!


language属性 :

该属性的值目前只能取"java"。如果没有指定该属性值的话,那么JSP 会默认填上.



import 属性:

该属性的作用是为 JSP 页面引入 Java 核心包中的类,这样就可以在 JSP 页面的程序

片部分、变量及函数声明部分、表达式部分使用包中的类。


JSP 页面默认 import 属性已经有如下的值:" java.lang.*"、 "javax.servlet.*" 、"javax.servlet.jsp.*"、"javax.servlet.http.*"。


如果为一个属性指定几个值话,这些值用逗号分割。page 指令只能给 import 属性指

定多个值;其它属性只能指定一个值。

例如:

<%@ page import="java.util.*" ,"java.io.*" , "java.awt.*" %>


当你为 import 指定多个属性值时,JSP 引擎把 JSP 页面转译成的 java 文件中会有如

下的 import 语句:

import java.util.*;

import java.io.*;

import java.awt.*;



session 属性:

用于设置是否需要使用内置的 session 对象。

session 的属性值可以是 true 或 false,session 属性默认的属性值是 true。

 

错误页面:

errorPage和isErrorPage

1.jsp出现了错误,通过page指令的errorPage属性跳转到error.jsp页面

<%@ page language="java" import="java.util.*,java.text.*"  
    contentType="text/html; charset=utf-8" errorPage="errorPSD.jsp"%>
<html>
<body>
</body>
 <%
            int result = 2 / 0;
        %>

</html>

2.通过page指令的isErrorPage属性设置页面就是错误页面

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true"   %>
    <html>
        <head>
            <title>友好提示页面</title>
        </head>
        <body>
            服务器正忙着呢!
        </body>
    </html>

 

很多错误的jsp文件:

可以在web.xml文件中全局设置错误页,只要发生了404错误或者空指针异常的错误都会跳转到error.jsp页面上

<error-page>
        <error-code>404</error-code>
        <location>/error.jsp</location>
</error-page>

<error-page>
     <exception-type>java.lang.NullPointerException</exception-type>
        <location>/error.jsp</location>
</error-page>

 



 

 

 

 

JSP中的声明

<%! Java代码%>

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_html_04

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_属性值_05

 

 

实例1:输出今天时间

<%@ page language="java" import="java.util.*,java.text.*"  
    contentType="text/html; charset=utf-8"%>
<html>
<%!
    String formatDate(Date d){
        SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日");
    return formater.format(d);
    }
%>你好,今天是
<%=formatDate(new Date()) %>
</body>
</html>

实例2:计算从xxxx年到yyyy年的闰年个数

<%@ page language="java" import="java.util.*,java.text.*"  
    contentType="text/html; charset=utf-8"%>
<html>
<%!
    int findYear(int x,int y){
    int count = 0;
    for(int i = x;i<= y;i++){
        System.out.print(i);//输出到控制台
        if(i % 4 == 0 ){
            count++;
        }
    }
    return count;   //页面显示的是返回值所在的JSP表达式
}
%>
</body>
个数是:<%= findYear(2000,2013) %>

</html>

个数是:4

java代码中的System.out.print(); 输出到控制台

 

 

 

 

 

 

遇到的问题:

1.端口占用问题: 在eclipse中在server上运行项目时,需要将PC的tomcat服务器关闭 ————cmd中,shutdown.bat    【开启是:startup.bat】

2.<%@   前面两个是放一块的  %>

3.web.xml  配置文件

springbot jsp 编译后class文件 jsp文件编译后是class文件吗_html_06