引言
JSP其实在大学已经开始学了一部分了,安装了Myeclipse和Resin用resin搭载服务器,光安装配置就弄了好长时间,之后的课程更是复杂。虽然老师教的很耐心,但是自己上手操作就一头雾水。刚好在猿道也开始学习JSP了,要利用好这个机会,好好补补课,期末考试绩点就靠猿道了。
JSP概述
Java Server Page
通俗来说,JSP是使用Java语言完成互联网的网页(动态网页)
动态网页/静态网页(HTML)
两种说法:
1、页面的效果动态。(JavaScript+CSS,HTML5,Flash......)
2、页面的内容动态。(JSP)
常见的动态网页技术:
Sun公司/Oracle公司,Java语言方向:JSP(JavaServerPage)
Microsoft公司,C#语言方向:ASP(ActiveServerPage)
民间组织/技术论坛:PHP(PersonHomePage/Hypertext Preprocessor)
动态网页一定是运行在服务器上的。不同的动态网页技术,采用的是不用的服务器,我们也叫做Web容器
Web容器是干什么的?
用来管理和维护Web应用程序的一套软件。
Web应用程序时什么?
通俗的说,Web应用程序时一组动态网页以及相关资源组成的
Web容器也叫作Web服务器或者服务端(Web应用程序通常不是放在我们自己的电脑上的,需要通过网络才可以访问)
在学习的饿时候,可以在自己的电脑上安装一套Web容器(常见的Web容器:Tomcat/Apache/IIS/WebLogic/JBoss/GlassFish)
服务端Server/客户端Client
常见的客户端:各种浏览器(IE/Netscape/FireFox/Chrome/Opera...)
浏览器browser分成两大块:
原生浏览器(IE(Edge)/FireFox/Chrome/Opera/Safari)
二次开发的浏览器:360,QQ,遨游,等...
C/S和B/S
C/S叫作客户端/服务器模式
B/S叫作浏览器/服务器模式
CS好还是BS好?
CS:运行速度快,图形效果好。维护麻烦,需要频繁更新,占用的客户端资源较多。
C/S结构的程序,通常叫作富客户端,功能是放在客户端中的。
程序的安全性较低,维护升级不便。随客户端安装大量相关资源,空间占用个较大
BS:无需安装客户端,也无需更新。受网络的制约。
B/S结构的程序。通常叫作瘦客户端,功能(业务规则)是放在服务端中的。
程序的安全性相对较高。功能增加的时候,客户端无需更新。
根据不同的业务场景,选择程序的模式。
JSP属于BS模式
环境变量配置CMD命令:
set JAVA_HOME=%CD%
set PATH=%JAVA_HOME%\bin;
set CATALINA_HOME=%CD%
set PATH=%CATALINA_HOME%\bin;
startup
shutdown
Tomcat的两种工作模式:进程模式、服务模式
Tomcat如果以服务的方式运行(windows系统的专利)
首先要检查Tomcat是否支持服务方式运行,需要有tomcat.exe和service.bat
安装服务:service install / service install Tomcat
查询服务是否安装:sc query Tomcat8
启动服务:net start Tomcat8
查询端口打开情况:netstat -an / netstat -abn
停止服务:net stop Tomcat8
删除服务:service remove \ service remove Tomat
Tomcat的目录结构
bin:存放的是Tomcat启动的必须文件,主要是由*.jar/*.xml/*.bat/*.sh/*.tag.gz组成
conf:存放tomcat的配置文件
lib:存放的是Tomcat服务器运行时需要用到的第三方类库,这一个文件夹的类库,是Tomcat服务器本身和其管理的所有的Web应有程序都能够使用的。例如"mysql-jdbc-connection.jar"
logs:存放的是Tomcat运行时产生的日志
temp:存放的是Tomcat运行时产生的临时文件(文件可以删除)
webapps:存放的是Tomcat所管理的Web应用程序
work:存放的是Web应用程序产生的临时文件(文件可以删除)
Web应用程序的目录结构
重要!!!Web应用程序需要部署到Tomcat的webapps文件夹中。
WEB-INF\lib:保存的是Web应用程序需要使用的第三方类库文件(通常会将驱动类这类的jar包存放在这里)这一个文件夹中的类库,只有本Web应用程序可以访问
WEB-INF\classes:保存的是Web应用程序中的Java程序的*.class文件
WEB-INF\web.xml:Web应用程序部署描述符文件,在后续的课程中,我们有很多地方需要使用到
其他的Web资源文件,例如*.html、*.jsp、*.jpg、*.js、*.css……都可以直接放在Web应用程序的根文件夹中。也可以自己单独创建其他的文件夹
不显示进程名
netstat -an
显示进程名
netstat -abn
直接双击文件打开(本地访问)
file://D:\JavaEE\apache-tomcat-8.0.44\webapps\FirstWeb\first.html
本地访问使用的是“\”反斜杠
通过网页地址的方式打开(远程访问)
http://localhost:8080/FirstWeb/first.html
远程访问使用的是“/”斜杠
JSP动态页面只支持远程访问方式!!!
1、使用纯手工方式创建Web应用。
2、使用eclipse for Web工具创建Web应用。
页面文件,存放的目录名,默认情况下叫做“WebContent”,该文件夹中保存所有的资源文件。
所谓的资源文件,包括如下内容:
静态页面:*.html、*.htm
动态页面:*.jsp
样式表:*.css
脚本文件:*.js
图片:*.jpg、*.png、*.gif、*.bmp
动画:*.flv、*.swf
音频:*.mp3、*.flac、*.ape、*.wav
视频:*.mp4、*.mpeg、*.mpg、*.mov
二进制文件:*.exe、*.bin
压缩文件:*.zip、*.rar、*.tar.gz
文档:*.txt、*.doc、*.pdf、*.ppt、*.xls
WebContent这个文件夹,通常我们也叫做资源文件夹,或者Web应用程序根目录。
允许有子文件夹存在。
特别注意,有几类文件不存在资源文件夹中!!!
*.jar、*.class、*.java、*.xml
IDE工具中的Tomcat和手工运行的Tomcat不是一个回事。
采用IDE工具开发Wen应用程序,编写完代码以后,需要做一件重要的事情:部署!!!
项目中,所有文件编码,尽可能统一!!!
JSP是什么??
JSP由7种元素组成的(七种武器)
1、HTML,包括HTML标记、CSS样式表、JavaScript脚本等等……
2、注释:
HTML注释:<!-- -->在网页源码中是可以看见的
HTML,Web容器不忽略,将注释信息输出到页面中,但是浏览器会忽略这些注释信息,
所以在页面源码中可以看到,但页面内容中不可见。
HTML注释不可以注释JSP代码
JSP注释:<%-- --%>在网页源码中是不可见的
JSP注释,Web容器就忽略了。所以在最终的页面源码中不可见
JSP注释可以注释JSP代码
3、代码段/小脚本/ScriptLet:<% Java代码; %>注意,代码段中Java代码结尾一定要有“;”
代码段中只能有Java的调用语句,不能有定义语句!!!
4、表达式:<%=Java表达式 %>注意,表达式中Java代码结尾一定不能有“;”
5、声明:<%! Java代码; %>
声明中只能由定义语句,而不能有调用语句!!!
6、指令:<%@ 指令名 指令的属性列表 %>
作用:指示Web容器处理JSP文件的时候的一些设置
page指令
language属性:指定JSP页面的处理语言。取值只能写"Java",默认值也是Java
contentType属性:指定JSP页面内容的字符编码,指定给浏览器看的,值:"text/html; charset=UTF-8"
pageEncoding属性:指定JSP页面文件的字符编码,指定给编辑器看的,值:"UTF-8"
import属性:指定JSP文件导入非java.lang包以外的其他类,值"java.util.*"
isELIgnored属性:指定JSP是否跳过处理EL表达式
errorPage属性:指定JSP页面是否是错误处理页面
include指令
file属性:指定包含的文件位置
taglib指令
指令一般在页面最前面,只有include指令可以放其他位置
7、动作:<jsp:动作名称 动作属性列表></jsp:动作名称>
主要作用是:封装数据,完成页面的跳转
jsp:param(获取一个数据)
jsp:params(获取一组数据)
这两个动作的功能,从请求的查询字符串中获取数据
被EL表达式替代
jsp:attribute
这个动作的功能,从作用域范围中获取数据
JSTL和EL都可以替代
jsp:useBean
jsp:setProperty
jsp:getProperty
这三个动作的功能,用于封装数据成对象
使用EL替代
jsp:forward(目前还勉强有用)页面的转发
jsp:fallback
jsp:include(目前还勉强有用)页面的包含
使用EL替代
目前来说,JSP的标准动作不再使用
原因:1、有替代技术。2、JSP标准动作在MVC设计模式中不符合设计模式的思想
常见的浏览器错误代码:
500:服务器内部错误(通常是Web应用程序产生了 编译异常)
404:服务器找不到相关资源(文件未找到)
403:访问被拒绝(通常是没有相关资源的访问权限)
JSP的工作原理
1、编写JSP页面源码
使用eclipse完成
2、将(*.jsp)页面源码转义成(*.java)Java源码
tomcat完成(web容器)
3、将(*.java)Java源码编译成(*.class)Java的字节码
tomcat完成(web容器)
4、通过虚拟机执行(*.class)Java字节码,将执行的结果处理成(*.html)页面源码
tomcat完成(web容器)
5、将最终的HTML页面源码发送给浏览器
tomcat完成(web容器)
6、浏览器解析HTML,以图形化的方式展示页面
浏览器完成
JSP九大内置对象
第一类:与输入输出有关的
request请求对象
response响应对象
out输出对象
第二类:与作用于范围有关的
pageContext页面作用域
request请求作用域
session会话作用域
application应用作用域
第三类:与配置有关的
config配置对象
page页面本身的对象
第四类:与异常有关的
exception异常对象
主要是研究隐式对象的方法。
研究API的方法
1、提供什么样的类(包括类、抽象类、接口,放在什么包里,层次关系,这个类提供什么方法,完成什么功能)
2、关注方法(方法有什么参数,包括参数的个数,参数的数据类型,参数的排列顺序,返回什么结果,结果的数据类型,完成什么功能)
3、关注常量(静态常量,枚举类型)
4、关注注解
5、关注异常(异常的名字)
html表单在jsp中的一些补充知识
查询字符串的格式:?参数的名称=参数的值&参数的名称=参数的值
在查询字符串中,表单元素的name属性,成为了查询字符串的参数的名字,
表单元素的value属性,将成为查询字符串的参数值
在表单提交的时候,可以采用两种提交方式:分别是get/post
只有当表单采用get方式请求的时候,表单的内容才会以查询字符串的形式传递
当表单采用post方式请求的时候,表单内容将会被封装
url的组成
http :// localhost : 8080 / JavaWeb_smith / wx / wx.jsp
协议 :// 主机名,IP,域名 : 端口号 / Web应用名/资源路径 / 资源名称
隐式对象的常用方法:
(见https://blog.youkuaiyun.com/weixin_42588379/article/details/84557164)
乱码问题
详情移步:
https://blog.youkuaiyun.com/weixin_42588379/article/details/84638890
JSP中的会话跟踪:
原因:本质上是因为Http协议先天的原因。
HTTP协议是一种无状态通讯协议!
导致多个页面之间无法直接传递数据
JSP页面间传递信息的几种方式:
//方法一:URL重写
//通过查询字符串传递参数
//这种方式很麻烦,不适合于传递带有编码格式的数据
//但是可以很方便地传递数字数据
//发送页面
String url="success.jsp?uName="+uName;
String newUrl=response.encodeRedirectURL(url);
response.sendRedirect(newUrl);
//接收页面
String uName=request.getParameter("uName");
byte[] b=uName.getBytes("iso-8859-1");
String uNickNew=new String(b,"utf-8");//修改编码
//方法二:作用域(强烈建议采用)
//发送页面
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//以上代码不能处理get请求中的数据的
request.setAttribute("niChen",uName);
request.getRequestDispatcher("success.jsp").forward(request,response);
//接收页面
String uName=(String)request.getAttribute("niChen");
//方法三:Cookie(很少用)
//Cookie是保存在客户端浏览器的临时文件夹中的。造成安全隐患
//Cookie内容本身就是文本信息。另外,浏览器在读取Cookie的时候不做任何认证工作。
//还有一个不适用Cookie的理由。Cookie是可以被浏览器禁用的
//方法四:隐藏表单域(有局限性,必须有表单)
<input type="hidden" value="2" name="hide">//发送页面
String hide=request.getParameter("hide");''接收页面
EL表达式
叫作表达式语言
在JSP的基础上升级一种表达式的语言格式,
所以EL表达式不同于Java语言,也不同于JSP标签
EL的语法规则很简单:${表达式}
EL表达式是提供一种更简便的操作查询字符串和作用域范围中数据的一种方式
EL表达式的局限,只能读,不能写
JSP表达式和EL表达式的异同
都可读取数据(查询字符串或者作用域范围)
区别在于,JSP表达式读取失败,将输出"null"
EL表达式读取失败,则输出""
EL表达式主要完成两个工作:计算和输出
EL表达式主要是为了替代JSP表达式的。
原因:
1、容易造成<xxxx<%%>/>语法,容易产生歧义。
2、JSP表达式语法要求严格。EL表达式更加智能化,更加简洁
3、从作用域范围拿数据,无需指定作用域范围
例:
<h2>EL操纵作用域范围${data}</h2>
<h2>JSP操作作用域范围<%=session.getAttribute("data") %></h2>
EL表达式的语法规则有两种:
1、类似于对象的属性:${对象.属性}
2、类似于数组的访问方式:${对象["属性"]}
EL表达式中的内置对象(隐式对象)
param,paramValues封装的是查询字符串的数据
pageScope,requestScope,sessionScope,applicationScope封装的是四大作用域范围
initParam封装的是初始化参数
head,headValues,pageContext,cookie
EL最大的优势,可以操作JavaBean