JSP开发基础
B/S简介
为什么学习B/S技术
什么是B/S技术
B/S是浏览器端/服务器端,程序完全放在服务器上,不用在浏览器上安装任何文件,它是基于Internet的产物
B/S技术特点
B/S中浏览器端与服务器端采用请求/响应模式进行交互
JSP开发环境的搭建
JDK
Open JDK 23+(https://jdk.java.net/23/)
应用服务器
Tomcat 11(https://tomcat.apache.org/download-11.cgi)
集成开发环境
Spring Tools 4(https://spring.io/tools/)
Spring Tools 4支持Dynamic Web Project
-
打开插件安装界面:
Help>Install New Software
-
在
Work with
下选择All Available Sites
-
加载之后,选择
Web, XML, Java EE and OSGi Enterprise Development
后点击Next
直到Finish
完成安装 -
安装完成后(时间较长)重启STS4
Hello World!
打开STS4创建JSP
目录,以该目录为Workspace
创建Dynamic Web Project
,配置如下。
- Project Name
- HelloJSP
- Generate web.xml deployment descriptor
完成后形成的目录结构如下:
在webapp
目录下创建Hello.jsp
开发模式
-
打开
Window>Show View>Other...>>Server>Servers
视图 -
新建
New>Server>>Apache>Tomcat v9.0 Server
-
右键
Tomcat v9.0 Server at localhost
,选择Add and remove
将HelloJSP
部署到Tomcat -
双击
Tomcat v9.0 Server at localhost
打开服务器配置界面 -
Server Locations
选择Use Tomat installation
-
Ports
设定HTTP/1.1
为8080
(默认) -
右键
Tomcat v9.0 Server at localhost
,选择Start
启动Tomcat服务器- 编译后的工程已部署到Tomcat下的
wtpwebapps/HelloJSP
目录
- 编译后的工程已部署到Tomcat下的
生产模式
- 工程导出为
War
包
在浏览器中打开http://localhost:8080/HelloJSP/hello.jsp
Web程序的调试与排错
在运行Web程序时,我们常犯的一些错误有:
-
未启动Tomcat服务,或者没有在预期的端口中启动Tomcat服务
-
未部署Web应用,就试图运行Web程序
-
运行时,URL输入错误
-
存放文件的目录无法对外引用,如:文件放入了WEB-INF、META-INF等文件夹
错误1:未启动Tomcat
常见处理方法:
-
启动Tomcat服务
-
如果在控制台上显示Tomcat服务已启动,观察端口号是否与预期端口号一致,按照实际端口号重新运行
错误2:未部署Web应用
错误2:未部署Web应用
常见处理方法:
- 检查URL地址是否正确
错误3:目录不能被引用
常见处理方法:
- 把需要公开的文件放在
webapp
下除WEB-INF
外的位置
JSP语法基础
什么是JSP
JSP(Java Server Pages)是指:
-
在HTML中嵌入Java脚本语言
-
由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本语言命令
-
然后将生成的整个页面信息返回给客户端
JSP执行过程
Web容器处理JSP文件请求需要经过3个阶段:
- 翻译阶段、编译阶段、执行阶段
多次执行
首次执行
JSP通用规则
JSP 页面组成
模板元素
模板元素指JSP文件中的静态HTML内容,它们是网页的框架,它们影响页面的结构和美观程度。
但模板元素主要由网页美工完成,对JSP程序员来说,不太关心这部分的内容。
注释
语法
其实就是HTML的注释,网页代码中会显示出来,在里面还可以嵌入其他JSP元素。如:
JSP指令(Directives)
JSP指令
用于通知JSP引擎如何处理JSP页面。
语法:
常用的JSP指令包括:
-
page指令
-
taglib指令
-
include指令
page指令
定义整个JSP页面要使用的属性,主要的属性包括:language、import、buffer、isThreadSafe、isErrorPage、session、autoflush、errorPage、contentType等 。其位置可以在页面的任何位置,但推荐放在页首。但是除import外,其它任何属性/值对只能出现一次 。
语法:
示例:
属性 | 描述 | 缺省值 |
---|---|---|
language | 定义要使用的脚本语言。如果在将来 JSP容器支持多种语言时可使用它。 | java |
import | 定义该JSP文件要使用的类。 | 无 |
session | 设置当前页面是否参与一个Http会话。 | true |
buffer | 设置客户输出流的缓冲区大小。 | 8KB |
autoFlush | 设置缓冲区是否自动刷新。 | true |
info | 设置JSP页面的信息,可用servlet.getServletInfo()获得 | 无 |
isThreadSafe | 定义该JSP是否支持多线程。 | true |
contentType | 定义JSP的字符编码方式和JSP页面响应的MIME类型。 | TYPE=text/html;CHARSET=iso-8859-1 |
isErrorPage | 设置JSP页面是否为其他页面的错误处理页面。 | false |
errorPage | 定义此页面出现异常时要调用的页面 | 无 |
method | 指定Scriptlet代码属于哪个方法。 | Method=“service” |
isELIgnored | 指定EL是否被忽略。 | 由web.xml的版本确定,Servlet2.3以前的版本将忽略 |
include指令
用于将另一个文件的内容插在JSP文件中。一个 JSP 页面中的 include 指令的数量不受限制。
语法:
示例:
页面布局
使用include指令可以把一个复杂的JSP页面分成若干简单的部分,当要对页面更改时,只需更改对应的部分就行了。
通常情况下把页面分成多个区,典型的分区方法如下:
taglib指令
这个指令允许页面使用自定义标记库。标记库是扩展 JSP 功能的自定义标记的集合。
语法
- 声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
示例
脚本元素
包含程序逻辑,使开发者能直接将代码嵌入JSP页面。
类型:
-
声明
-
表达式
-
代码段
声明
脚本片断概念
- JSP Scriptlet就是在JSP页面里嵌入的一些Java代码片段。
语法
示例
声明和Scriptlet中定义变量的区别
-
因为JSP页面实际上是被编译成Servlet类执行的,所以声明中定义的变量是Servlet类的成员变量
-
Scriptlet中定义的变量是Servlet类的service()方法或doGet()方法或doPost()方法等中的局部变量
动作元素
是支持JavaBean的JSP特殊标记,与指令元素不同的是,动作元素在请求处理阶段起作用。
常用JSP动作
<jsp:useBean>
用来加载要在页面中使用的JavaBean,通过该标记可以创建JavaBean的一个实例,并给这个实例命名。
语法:
-
id
- 定义要加载的Bean的实例名字。
-
Scope
- 指定Bean存在的范围和id属性的有范围,缺省为page。可以为request、session、application。
-
Class
- 指定要加载的Bean的类文件路径。
<jsp:setProperty>
设置Bean的属性值。
语法:
<jsp:getProperty>
获取Bean的属性值。
语法:
引用JavaBean实例
simplecart.java | |
---|---|
<jsp:param>
它被用来以“名-值”对的形式为其它标签提供附加信息。
它和jsp:include、jsp:forward、jsp:plugin一起使用。
语法:
<jsp:include>
和<%@ include%>
指令不同,<jsp:include>
包含的内容可以是动态改变的,它在执行时才确定,而前者包含的内容是固定不变的。
语法:
<jsp:include><jsp:param>
实例
<jsp:forward>
这个动作允许请求被转发到另外的JSP、servlet或一个静态的资源上。当要根据不同的请求,把应用程序分割为不同的视图时,这个动作尤其有用。
语法:
<jsp:forward>
注意事项
-
如果JSP文件中包含该标记,那么这个JSP文件中的所有输出都不会被发送到客户端,并且
<jsp:forward>
标记以下的代码不会被执行。 -
<jsp:forward>
标记从一个JSP文件向另一个文件传递包含用户请求的request对象。
<jsp:forward>
示例
<jsp:plugin>
可以使用这个动作来插入Applet或JavaBean。
语法:
缺省引入的包
下面这些包在JSP编译时已经导入了,所以在JSP文件中无须再用page指令引入:
-
java.lang.*
-
javax.servlet.*
-
javax.servlet.jsp.*
-
javax.servlet.http.*