Dynamic pages foundation --JSP

WEB project directory structure

META-INT WEB-INF outside are inaccessible, not the index.jsp / index.html put this

 

JSP

 

JSP is to simplify the Servlet alternatives work appeared, Servlet output HTML is very difficult, JSP is an alternative Servlet output HTML is.

 

JSP itself is a Servlet . In fact, JSP documents in time is first accessed will be compiled into HttpJspPage class (which is HttpServlet a subclass)

 

 

 

Compilation process:

  • The browser first request 1.jsp time, Tomcat will 1.jsp transformed into 1_jsp.java such a class, and compile the file into a class file. Compilation is completed and then run the class files in response to browser requests .
  • 以后访问1.jsp就不再重新编译jsp文件了,直接调用class文件来响应浏览器。当然了,如果Tomcat检测到JSP页面改动了的话,会重新编译的
  • 既然JSP是一个Servlet,JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了。原来就是用write()出去的罢了。说到底,JSP就是封装了Servletjava程序罢了
      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个对象————outsessionresponserequestconfigpageapplicationpageContextexception

 

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

(1)普通的 HTML标签。

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

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

(4)Java 程序片。

(5)Java 表达式。

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

 

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

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

可以在“<%”和“%>”之间插入 Java 程序片。一个 JSP 页面可以有许多程序片,这些程序片将被 JSP 引擎按顺序执行。在一个程序片中声明的变量称做 JSP 页面的局部变量它们在 JSP 页面内的所有程序片部分以及表达式部分内都有效。这是因为 JSP 引擎将 JSP 页面转译成 Java 文件时,将各个程序片的这些变量作为某个方法的变量,即局部变量。

当程序片被调用执行时,这些变量被分配内存空间,所有的程序片调用完毕,这些变量即可释放所占的内存。当多个客户请求一个 JSP 页面时,JSP 引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对 JSP 页面局部变量操作的结果,不会影响到其它客户的这个局部变量。

 

 

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

原因:因为 JSP 引擎将 JSP页面转译成 Java 文件时,将这些变量作为类的成员变量。这些变量的内存空间直到服务器关闭才释放。当多个客户(浏览器)请求一个 JSP 页面时,JSP 引擎为每个客户启动一个线程,这些线程由 JSP 引擎服务器来管理,这些线程共享 JSP 页面的成员变量,因此任何一个用户对 JSP 页面成员变量操作的结果,都会影响到其他用户。

“<%!”和“%>”之间如果声明一个类,那么该类在 JSP 页面内有效,即在 JSP 页面的 Java 程序片部分可以使用该类创建对象。

 

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

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

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

 

配置 JSP 运行环境 :

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

 

JSP 中的注释可分为两种

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

客户通过浏览器查看 JSP 的源文件时,能够看到 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"%>

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 falsesession 属性默认的属性值是 true

 

错误页面:

errorPageisErrorPage

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代码%>

 

 

实例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  配置文件

 

Guess you like

Origin www.cnblogs.com/expedition/p/11199437.html