目录
1.什么是jsp?
2.C/S与B/S
3.Tomcat
tomcat 目录结构
4.端口占用
5.Jsp基本语法
jsp 脚本
6.注释
8.九大内置对象(面试易考)
1.request 对象
2.response 对象
3.session 对象
4.config 对象
5.application 对象
6.out 对象
7.page 对象
8.pageContext 对象
9.exception 对象
JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。 JSP文件后缀名为 *.jsp 。 JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。
C/S 又称 Client/Server 或客户/服务器模式。服务器通常采用高性能的 PC、工作站或小型机,并采用大型数据库系统,如 Oracle、Sybase、Informix 或 SQL Server。客户端需要安装专用的客户端软件,如优酷客户端。
B/S 是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser),如 360 浏览器、谷歌、火狐或 Internet Explorer,服务器上安装 Oracle、Sybase、MySQL 或 SQL Server 等数据库。浏览器通过 Web Server 同数据库进行数据交互,如优酷网页版。
C/S 的优点是能充分发挥客户端 PC 的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快,安全性高等。缺点主要有以下几个:
客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高 。对客户端的操作系统一般也会有限制。可能适应于 Win98,但不能用于 win2000 或 Windows XP。或者不适用于微软新的操作系统等等,更不用说 Linux、Unix 等。
B/S 最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如 CA 证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。
当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器
bin 包含有 startup.bat(启动服务器)与 shutdown.bat(关闭服务器)文件
conf 包含设置部署在 Tomcat 上的 Web 应用的变量的初始值的设置文件,其中常用 server.xml 配置服务端口
lib 包含被 Tomcat 使用的各种各样的 jar 依赖文件。
logs Tomcat 的日志文件。
webapps 部署 Web 应用的程序的地方,其中 ROOT 目录是 tomcat 首页目录,可以被其他项目替换,访问时不需要项目名
work 由 Tomcat 自动生成,这是 Tomcat 放置它运行期间的中间(intermediate)文件(诸如编译的 JSP 文件)地方
项目目录 Tomcat 的 Web 应用程序应该由如下目录组成
页面内容等文件的存放位置:*.html, *.jsp 等可以有许多目录层次,由用户的网站结构而定,实现的功能应该是网站的界面,也就是用户主要 的可见部分。除了HTML文件、JSP 文件外,还有 js(JavaScript)文件和 css(样式表)文件以及其他多媒体文件等。
WEB-INF/web.xml 这是一个 Web 应用程序的描述文件。这个文件是一个 XML 文件,描述了 Servlet 和这个 Web 应用程序的其他组件信息,此外还包括 一些初始化信息和安全约束等等。
WEB-INF/classes/ 这个目录及其下的子目录应该包括这个 Web 应用程序的所有 JavaBean 及 Servlet 等编译好的 Java 类文件(*.class)文件和相关配置文件。 通常 WEB-INF/lib/ 这个目录一般存放第三方 jar 包。
注意:WEB-INF 目录中包含应用软件所使用的资源,都不能被客户机直接所访问。
一般的,用作服务的应用每个都需要监听(占用)相应的端口,请求该端口获取对应的服务。然而在开发中经常会遇到端口占用问题,端口一旦被占用。
java.net.BindException: Address already in use: JVM_Bind
后面的应用要么采用换一个端口的方式、要么就强制结束占用的进程。下面两种分别针对 windows 和 linux 中的 centos 7 结束端口进程的命令。
windows :
C:\Users\Administrator>netstat -aon|findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6064
C:\Users\Administrator>taskkill /f /pid 6064
成功: 已终止 PID 为 6064 的进程。
centos:
ss -lpn src :8080
kill 6723
也可以使用 java 提供的统一查看 java 进程的命令 jps,然后再根据对应系统的结束进程命令结束。
C:\Users\Administrator>jps
2440 jar
6716 Jps
C:\Users\Administrator>taskkill /f /pid 2440
成功: 已终止 PID 为 2440 的进程。
在 windows 上也可以通过任务管理器结束 java 的程序。
JSP 是一个包括指令标识、HTML 代码、JavaScript 代码、嵌入的 Java 代码、注释和 JSP 动作标识的 jsp 文件。但这些内容并不是一个 JSP 页面所必需的。下面将通过一个简单的 JSP 页面说明 JSP 页面的构成。
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String today = simpleDateFormat.format(date);
%>
<%=today%>
前三行是指令标识,指令标识主要用于设定整个 JSP 页面范图内的导包信息和编码信息,它是被 tomcat 服务器解释并执行的,不会产生任何内容输出到网页中。也就是说,指令标识对于客户端浏览器是不可见的。
JSP 指令标识的语法格式如下
<%@指令名 属性1="属性值1" 属性2="属性值2"......%>
指令参数说明:
指令名:用于指定指令名称,在 JSP 中包含 page、include 和 tagib 等 3 条指令。
属性:用于指定属性名称,不同的指令包含不同的属性。在一个指令中, 可以设置多个属性, 各属性之间用逗号或空格分隔。
属性值:用于指定属性值。
include 与 taglib 指令
文件包含指令 include 是 JSP 的另一条指令标识。通过该指令可以在一个 JSP 页面中包含另一个 JSP 页面。该指令只有一个 file 属性,用于指定要包含文件的路径。该路径可以是相对路径,也可以是绝对路径,与 类似。
<%@ include file="header.jsp"%>
在 JSP 文件中,可以通过 taglib 指令标识声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀。在页面中引用标签库后,就可以通过前缀来引用标签库中的标签。后面我们会用到 jstl 的标签库
<%@ taglib prefix="c" uni="http:/java.sun.com/jsp/jstl/core" %>
注意:在 jsp 中的页面不要使用 HTML 的标签头不然在页面嵌套时会出现一些奇怪的错误。
在 JSP 页面中,脚本标识使用得最为频繁。因为它们能够很方便、灵活地生成页面中的动态内容。
1.JSP 表达式
用于向页面中输出信息,其语法格式如下:
<%=表达式%>
表达式:可以是任何 Java 语言的完整表达式。该表达式的最终运算结果将被转换为字符串。
<%String manager="mr";%> 定义保存管理员名的变量
管理员: <%=manager %> 输出结果为:管理员: mr
<%="管理员:"+manager %> 输出结果为管理员: mr
<%= 5+6 %> 输出结果为11
<%String ur="126875jpg" %> 定义保存文件名称的变量
输出结果为:
2.声明标识
声明标识用于在 JSP 页面中定义全局的变量或方法。通过声明标识定义的变量和方法可以被整个 JSP 页面访问,所以通常使用该标识定义整个 JSP 页面需要引用的变量或方法。
声明标识的语法格式如下:
<%!声明变量或方法的代码%>
每个 jsp 都将编译为 Servlet,而声明变量或方法将会转化为该 Servlet 的成员变量和成员方法。
<%!
int number = 0; //声明全局变量
int count() { //声明全局方法
number++; //累加number
return number; //返回number的值
}
%>
通过上面的代码声明全局变量和全局方法后,在后面如果通过<%=count()%>调用全局方法,则每次刷新页面,都会输出前一次值+1的值。
由于 JSP 页面由 HTML、css、Java 脚本等组成,所以在其中可以使用多种注释格式,本节将对这些注释的语法进行讲解。
1.html 注释()HTML语言的注释不会被显示在网页中,但是在浏览器中选择查看网页源代码时,还是能够看到注释信息的。
2.jsp 表达式内的注释(和 java 中一样)
3.隐藏注释(<%-- 注释内容 --%>)这种注释不仅在浏览器中看不到,而且在查看HTML源代码时也看不到,所以这种注释的安全性比较高。
4.JavaScript 代码注释(//),但是右键查看代码时可以看到里面被注释的内容。
http 是无状态的协议,客户每次读取 web 页面时,服务器都打开新的连接会话,而且服务器也不会自动维护客户的信息,那么要怎么才能实现会话跟踪呢?
session 就是一种保存上下文信息的机制,它是针对每一个浏览器客户端的,变量的值保存在服务器端,通过 SessionID 来区分不同的客户,session 是以cookie 或 URL 重写为基础的,默认使用 cookie 来实现,系统会创造一个名为 JSESSIONID 的输出返回给客户端 Cookie 保存。
即 web 服务会为每个浏览器创建对应的 session 空间,而 session 的 id 会通过 setcookie 的响应头设置到对应浏览器端,浏览器端每次请求都会带上该cookie,于是服务端便知道哪个浏览器登录了。
注意:jsp 的本质其实就是 Servlet,在运行 jsp 项目时 tomcat 将 jsp 编译成 Servlet 源码并编译运行,这一系列的操作都是底层的 jdk 完成的。所以在 jsp 的服务器上,不能只安装 jre 运行环境。
由于 JSP 使用 Java 作为脚本语言,所以 JSP 将具有强大的对象处理能力,并且可以动态创建 Web 页面内容。但 Java 语法在使用一个对象前,需要先实例化这个对象,这其实是一件比较繁琐的事情。 JSP为了简化开发,提供了一些内置对象,用来实现很多 JSP 应用。在使用 JSP 内置对象时,不需要先定义这些对象,直接使用即可。
在 JSP 中一共预先定义了 9 个这样的对象,分别为 request [rɪˈkwest] 请求、response [rɪˈspɒns] 响应、session [ˈseʃn] 会话、 application [ˌæplɪˈkeɪʃn] 应用、out、 pageContext 页面上下文、config [kənˈfɪg] 配置、 page 页面 和 exception [ɪkˈsepʃn]异常。
对象封装了由客户端生成的 HTTP 请求的所有细节,主要包括 HTTP 头信息、系统信息、 请求方式和请求参数等。通过 request 对象提供的相应方法可以处理客户端浏览器提交的 HTTP 请求中的各项参数。
一般使用 request.getParameter("id") 获取请求地址后的参数,如:index.jsp?id=12
注意:在使用 request 的 getParameter() 方法获取传递的参数值时,如果指定的参数不存在,将返回 null;如果指定了参数名,但未指定参数值,将返回空的字符串"";
案例:请求地址如下/deal.jsp?id=12&name=张三&pwd=123,将获取的值输出到 jsp 上。
<%@ page contentType="text/html;charset=UTF-8" %>
hello world
id:<%=request.getParameter("id")%>
name:<%=request.getParameter("name")%>
pwd:<%=request.getParameter("pwd")%>
response 对象用于响应客户请求,向客户端输出信息。它封装了 JSP 产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。每个 response 对象在所属的 JSP 页面内有效。
重定向
使用 response 对象提供的 sendRedirect() 方法可以将网页重定向到另一个页面。 客户端浏览器收到的响应状态码为 302,并且一般 response Header 里面会有一个 Location: login.jsp 指明重定向的路径。
response.sendRedret("login.jsp")://让浏览器自动跳转到login.jsp路径上
session 在网络中被称为会话。由于 HTTP 协议是一种无状态协议, 也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP 协议提供了 session 通过 session 可以在应用程序的 Web 页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果在一个会话中,客户端长时间不向服务器发出请求,session 对象就会自动消失。这个时间取决于服务器,例如,Tomcat 服务器默认为 30 分钟。不过这个时间可以通过编写程序进行修改。 主要有两个常用方法 setAttribute() 方法和 getAttribute()方法。
主要用于取得服务器的配置信息。通过 pageContext 对象的 getServletConfig() 方法可以获取一个 config 对象。当一个 Servlet 初始化时,容器把某些信息通过config 对象传递给这个 Servlet。开发者可以在 web.xml 文件中为应用程序环境中的 Servlet 程序和 JSP 页面提供初始化参数。常用方法如下中 getServletContexl() 、getServletName()、 getinitParameter()、getInitParametrNames()
用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当 application 对象没有被销毁时,所有用户都可以共享该application 对象。与 session 对象相 比,application 对象的生命周期更长,类似于系统的“全局变量”。
out 对象一个最基本的应用就是向客户端浏览器输出信息。out 对象可以输出各种数据类型的数据, 在输出非字符串类型的数据时,会自动转换为字符串进行输出。与<%="字符串"%>作用相同。
代表 JSP 本身,只有在 JSP 页面内才是合法的。page 对象本质上是包含当前 Servlet 接口引用的变量,可以看作是 this 关键字的别名。只有几个简单的方法gelClass() 、hashCode()、toString()、equls()
获取页面上下文的 pageContext 对象是一个比较特殊的对象,通过它可以获取 JSP 页面的 request、response、session、application、exception 等对象。pageContext 对象的创建和初始化都是由容器来完成 的,JSP 页面中可以直接使用 pageContex t对象。在实际开发中用的极少。
exception 对象用来处理 JSP 文件执行时发生的所有错误和异常,只有在 page 指令中设置为 isErorPage 属性值为 true 的页面中才可以被使用,在一般的 JSP 页面中使用该对象将无法编译 JSP 文件。