动态网页基础——JSP
WEB项目的目录结构
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)普通的 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 或 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代码%>
实例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 配置文件
动态网页基础——JSP的更多相关文章
- JSP技术基础(动态网页基础)
前言:如果说html为静态网页基础,那么jsp就是动态网页基础,两者的区别就是jsp在html的前面多加了几行而已.当然,jsp里面对java的支持度更高.要明白,js只是嵌入在客户端的小程序小脚本而 ...
- JSP/Servlet开发——第一章 动态网页基础
1.动态网页:在服务端运行的使用程序语言设计的交互网页 : ●动态网站并不是指具有动画功能的网站,而是指网站内容可根据不同情况动态变更的网站(股票网站),一般情况下动态网站通过数据库进行架构. ●动态 ...
- JavaEE-01 JSP动态网页基础
学习要点 B/S架构的基本概念 Web项目的创建和运行 JSP页面元素 MyEclipse创建和运行Web项目 Web程序调试 Web简史 web前端技术演进三阶段 WEB 1.0:信息广播. WEB ...
- 动态网页技术---JSP
JSP(全称JavaServer Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML.XML或其他格式文档的Web网 ...
- 《The Django Book》实战--第二章--动态网页基础
这章演示了一些最基本的Django开发动态网页的实例,由于版本不一样,我用的是Django 1.,6.3,有些地方按书上的做是不行的,所以又改了一些,写出来让大家参考. 这是一个用python写的一个 ...
- 动态网页开发jsp
1.动态网页的优势? ①交互性:即网页会根据用户的要求和选择而动态改变和显示内容. ③自动更新:即无需改变页面代码,便会自动生成新的页面内容. ④随机性:即当不同的时间.不同的人访问 ...
- 第三章 Django之动态网页基础(1)
前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器.当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked!消息.让我们来做些改变.本章将介绍 ...
- 转!!常用的4种动态网页技术—CGI、ASP、JSP、PHP
1.CGI CGI(Common Gateway Interface,公用网关接口)是较早用来建立动态网页的技术.当客户端向Web服务器上指定的CGI程序发出请求时,Web服务器会启动一个新的进程 ...
- Java Web开发技术教程入门-初识动态网页
这段时间学校搞了一个"阅战阅勇"的阅读活动,奖品还是挺丰富的~于是,奔着这些奖品,我去图书馆借了这本<Java Web开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...
随机推荐
- 023-zabbix性能优化中的几个中肯建议
随着zabbix的广泛应用,少数人的zabbix服务器在性能上出现瓶颈,或者在未来会出现性能方面的瓶颈,接下来讨论几个有效并且简单的优化方案. 服务器硬件 想通过几个简单的配置让服务器提高成倍的性能, ...
- cmd命令删除文件夹或文件
删除空文件夹rd /s/q "D:\Program Files\afish" 删除里面的文件del /a/f/q "D:\Program Files\afish\123. ...
- java 基本包
1. import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java ...
- 安装 mysql odbc连接器
下载地址: https://dev.mysql.com/downloads/connector/odbc/ 可以选择旧版本的下载 一. 配置数据源 1. 安装后如果找不到软件可以按 win键 后 输 ...
- 图片转base64的几种场景(网络图片,本地图片,用户上传图片)
转载于博客园 https://www.cnblogs.com/zhangdiIT/p/7895903.html 写的很棒 推荐给大家 场景一:将用户本地上传的资源转化,即用户通过浏览器点击文件上传时 ...
- Linux系统中的硬件问题如何排查?(4)
Linux系统中的硬件问题如何排查?(4) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...
- conda Pyhon版本切换
1.首先确保你的系统里已经安装了Conda,打开命令行窗口,执行命令:conda --version 2.查看你的系统当前已有的Python环境,执行命令:conda info --envs,从图中我 ...
- 转发(forward)和重定向(redirect)的区别?
1)forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所 ...
- UIScrollView的简单使用
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; //将scrollView添加到当前 ...
- 用class语法派生Enum并增加描述值的类属性来定义一个新枚举
import enum class BugStatus(enum.Enum): new = 7 incomplete = 6 invalid = 5 wont_fix ...