动态网页基础——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开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...
随机推荐
- 007-zabbix Server 4.0 监控TCP的12种状态
大家对TCP三次握手比较熟悉了,都知道当发生DOSS攻击时,客户端发送SYN给服务端后,服务端响应SYN+ACK,此时客户端就不回应服务端ACK啦(如果正常建立三次握手客户端会回应ACK,表示三次握手 ...
- PCRE does not support \L, \l, \N{name}, \U, or \u...
PCRE does not support \L, \l, \N{name}, \U, or \u... 参考文章:YCSUNNYLIFE 的 <php 正则匹配中文> 一.报错情景: 使 ...
- Web Api 接口测试工具:Swagger
前言:WebApi接口开发完毕后,交付给前端人员或手机端开发者时接口说明文档是必不可少的配套设备,如果公司流程不规范大家使用口口相传的交接方式,而且没有改进的欲望,那你可以到此为止了.Swagger是 ...
- SpringMVC入门示例
1.新建一个Java Web项目 2.导入jar包 3.在WEB-INF下面建一个hello.jsp页面. 1 <%@ page language="java" import ...
- Shell-06 函数
Shell-06 函数 #编写脚本,使用chkconfig命令,循环执行,关闭所有5级别服务 #!/bin/bash name=`chkconfig --list | cut -d' ' -f1` f ...
- linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
问题背景 平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在php引擎中需要配置使用mysql.so扩展.这时需要手动编译生成 ...
- vs中free内存失败
关于vs中free内存失败: 主要有以下两个原因: 1. 函数参数调用写错.特别是传指针进去的时候,若形参与实参不对应,会出错. 2. 内存分配不够,这个原因主要是因为程序中访问到了内存外的地址,即使 ...
- 消息队列之--Kafak
序言 消息丢失如何解决? 解耦 异步 并行 Docker安装Kafak 1.下载镜像 # zookeeper镜像 docker pull wurstmeister/zookeeper # kafka镜 ...
- Charles模拟数据
安装好Charles 桌面创建json文件
- 将DVD.iso 挂载到虚拟机
将DVD.iso挂载到虚机之后,默认设备名是/dev/sr0 挂载DVD.iso文件到/mnt. 操作: mount /dev/sr0 /mnt 查看: ll /mnt