文章目录
1.2 Tomcat的目录
- bin:存放Tomcat的可执行文件和脚本文件(扩展名为bat的文件)。
- conf:配置文件
- lib:Tomcat服务器和Web程序应用的JAR文件
- logs:日志文件
- temp:运行时产生的临时文件
- webapps:Web应用程序主要发布目录、
- work:Tomcat的工作目录,JSP编译生成的Servlet源文件和字节码。
2.1 JSP的执行流程
- 启动Tomcat
- 向浏览器发出请求。也就是访问url。
- 将jsp文件转为java文件。例如:hello.jsp→hello_jsp.java
- 使用javac指令,把java文件编译成字节码文件。即:hello_jsp.java→hello_jsp.class
- 调用java指令,执行字节码文件(class文件)。只执行动态代码。
- Tomcat把动态代码的执行结果嵌入到静态代码中,发送给浏览器显示。
2.2.1 page 指令
语法
<%@ page %>
作用:对页面属性进行处理(例如,静态编码、导包)。配置指令只对当前页面有效
静态编码:对当前页面的html和静态代码进行编码,服务器端对静态编码进行处理。
<%@page contentType="text/html;charset=utf-8"%>
注意:如果将这条指令放在最下面,无效,出现在JSP代码的最上面,只能写一条。
导包(不建议使用)
<% page import="java.util.*"%>
2.2.2 include指令包含
指令包含
语法
<%@ include file="文件路径"%>
作用:把指定文件内容包含到当前页面。
执行特点:先包含后执行,对被包含页面没有内容要求。
缺点:
- 被包含页面不能与当前页面出现相同的变量名,Tomcat出现问题。
- 被包含页面不能出现
<html>
、<body>
标签,浏览器出现问题。
标签包含
标签包含是属于java的。标签包含可以有子标签,执行顺序是先执行子标签。
标签包含语法:
<jsp:include page="包含的文件路径">
<jsp:include page="XXXXX">
<jsp:param name="PARAM_NAME" value="PARAM_VALUE">
</jsp:include>
执行特点:先执行子标签,逐级向上执行。先执行后包含。
作用:标签包含和指令包含都是将指定文件内容包含到当前页面。
缺点:
- 只能包含动态代码
- 被包含页面不能出现
<html>
、<body>
标签
指令包含和标签包含的区别
(重点考试必考)
- 语法不同:
①写法不同;
②语法范畴也不同:指令包含属于jsp,标签包含属于java。 - 执行流程不同
①指令:先包含后执行
②标签:动态页面(先执行后包含)、静态页面(先包含不执行) - 对被变化页面是否识别
①指令:不识别被包含页面类型。
②标签:识别被包含页面类型。 - 传参
指令:当前页面不能向被包含页面传参
标签:动态(能)、静态(不能)
include和forward
forward():表示在服务器端从一个Servlet中将请求转发到另一个资源(Servlet、Jsp或Html等),本意是让第一个组件对请求做些预处理(或者什么都不做),而让另一组件处理并返回响应。
include():表示在响应中包含另一个资源(Servlet、Jsp或Html等)的响应内容,最终被包含的页面产生的任何响应都将并入原来的response对象,然后一起输出到客户端。
理解HTTP协议
http协议是超文本传输协议的缩写。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。默认HTTP的端口号为80,HTTPS的端口号为443。HTTP协议永远都是客户端发起请求,服务器回送响应。
表单和超链接发请求的共同点和不同点。
表单的作用:
①自动生成http协议的请求
②封装请求的参数(利用post请求)
表单的优点:
①、使用简单、方便
②、自动封装请求参数
相同点
前台技术,自动产生http请求
不同点:
① 从表单内接受的参数都是字符串类型
② 表单可以通过method属性决定是get提交还是post提交,超链接只能用get提交
③表单容易和用户进行交互,超链接不容易和用户进行交互
④表单的代码复杂度高,超链接的代码复杂度低
JSP九大内置对象及其作用域
1、request : 得到用户的请求信息 请求范围(请求开始到结束)
2、response : 服务器向客户端的回应信息 请求范围(请求开始到结束)
3、session : 用来保存用户的信息 用户范围(浏览器启动到关闭)
4、application : 表示所有用户的共享信息 服务范围(服务器启动到关闭)
5、config : 服务器配置,可以取得初始化参数 服务范围(服务器启动到关闭)
6、out : 页面输出 请求范围(请求开始到结束)
7、page : 表示从该页面中表示出来的一个Servlet实例 页面范围
8、pageContext : JSP的页面容器
9、exception : 表示JSP页面所发生的异常,在错误页中才起作用
一个标准的JavaBean需要具备的条件
1、所有的类必须放在一个包中,在WEB中没有包的是不存在的。
2、所有的类必须声明为public class,这样才能够被外部所访问
3、类中所有的属性都必须封装,即使用private声明
4、封装的属性如果需要被外部所操作,则必须编写对应的setter、getter方法
5、一个JavaBean中至少存在一个无参构造方法,此方法为JSP中的标签所使用。
服务端跳转和客户端跳转的异同点
相同点
- 都是动态跳转。
- 从一个组件跳到另一个组件
不同点
- 语法不同
①客户端跳转(重定向) response
②服务端跳转 request - 执行机制不同
①客户端:服务器通过语句向客户端设定控制信息,由浏览器进行跳转(重定向)
②服务端:服务器进行跳转 - 代码执行情况
①客户端跳转执行后 该代码之后的代码依旧执行,跳转后,浏览器地址栏变化
②服务端跳转执行后 该代码之后的代码不执行,跳转后,浏览器地址栏不变化 - 参数传递
①客户端跳转后,不能将参数进行传递(从一个组件到另外一个组件)
②服务端跳转后,可以将参数传递(从一个页面到另外一个页面) - 是否可以重新传递参数
①客户端跳转可以重新传递参数(重新发请求)
②服务端跳转不能重新发请求 - 应用场合
①客户端跳转:异常流程时使用
②服务端跳转:平常流程
MVC设计模式
model view control
MVC全名是Model View Controller,模型层,视图层,控制层(业务层,持久层逻辑javabean)
视图层和控制层结合的缺点
可维护不好;移植性不好;健壮性不好
MVC设计模式的优点
- 分离视图层和控制层,可以提高代码可维护性,例如,更好地解决空指针异常;
- 健壮性和可移植性增强。 各司其职、互不干涉;
- 有利于开发中的分工;
- 有利于组建的重用;
cookie 和session 的区别:
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie里包含了sessionID(系统cookie)
- 安全方面:
session传递的是用户的验证信息,在服务器工作,安全但是降低效率
cookie传递的是用户信息,在客户端工作,不安全但是不影响服务器效率 - 存储数据方面:Cookie中只能保管ASCII字符串,而Session中能够存取任何类型的数据
Servlet分类及其作用
1、简单Servlet : 是作为一种程序所必须的开发结构保存下来的
2、过滤器: (过滤器作用)过滤器是属于一个组件的形式加入到应用程序当中。(过滤器定义)Filter是Servlet2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源,就可使用过滤器完成
3、监听器 : 主要是负责监听WEB的各种操作,当相关的事件触发后将产生事件,并对此事件进行处理。
为什么application可以通过getRealPath()方法,取得虚目录的真实路径。
Application对象是javax.servlet.ServletContext
接口的实例化对象,表示的是Servlet的上下文,ServletContext代表了整个容器的操作
如果要想取得一个虚拟目录对应的绝对路径要使用getRealPath()
方法
String path = getServletContext().getRealPath("/");
application的操作本身是ServletContext接口的实例,但是在JSP中有一个方法的功能可以完全与之对应:getServletContext()方法。
String path = this.getServletContext().getRealPath("/");(这个方法要重点使用)
九大内置对象
九大内置对象:request、response、pageContext、session、application、out、config、page、exception。
request
类型:Javax.servlet.http.HttpServletRequest
生命周期:请求范围。请求一开始就创建,请求结束就销毁。决定于服务端。
作用
- 传递数据和设定属性
- 页面跳转(控制层向视图层跳转)
- 编码
response
request和response同生共死。
类型:Javax.servlet.http. HttpServletResponse
生命周期:请求范围。请求一开始就创建,请求结束就销毁。
-
作用
-
- 把结果信息发送给浏览器显示
-
- 设定协议头(控制浏览器自动发请求,容易被黑客利用,危险)
-
- 设置cookie(危险)
-
- 完成客户端跳转
重定向和转发
-
重定向:当页面进行跳转之后,
request和response的生命周期已经结束,完全交给下一个页面去处理了(连url都变了);
转发:还可以往request里面添加携带参数, request和response的生命周期没有结束(url不变)。
session(会话)
在网络中被称为会话,一个会话就是浏览器与服务器之间的一次通话(保存登录状态时)
一个用户可以发多个请求,可以有多个request,但是只能有一个session。session的生命周期比request长。
类型:Javax.servlet.http.HttpSession
生命周期:用户范围。第一次发请求访问服务器组件,用户下线。决定于客户端。
-
作用
-
- session传递验证信息,安全性更高(当然也可以用来传递数据,但不建议这么使用,效率低,增加服务器负担)
举例:当一个用户登录时,登录信息正确后,会找到这个用户的session设置验证信息。
-
session结束的条件之一
-
- 服务器关闭
-
- 会话过期(Tomcat一段会话时间默认为30分钟)
-
- 手动终止会话
设置获取session生命周期
-
- 通过session对象的setMaxInactiveInterval()方法可以设置session的生命周期。
-
- 可以通过getMaxInactiveInterval()方法来获得session的生命周期。
page
生存周期:当前页面有效
作用:存放临时数据,不能传递数据
pageContext
作用 :用于获取页面的上下文,通过此对象可以获取页面的其他8个内置对象
application
类型: javax.servlet.ServletContext
生存周期:服务范围。Tomcat一启动就会创建application对象,Tomcat销毁关闭。是生存周期最长的。(公共垃圾桶)
作用:公共资源
任何对象的任何项目都可以使用,可以跨项目,跨用户,用于存放公共信息。
缺点:不安全,内存效率下降。
config
生存周期:服务server范围。Tomcat一启动就会创建application对象,Tomcat销毁关闭。
类型: javax.servlet.ServletConfig
作用:传递配置信息
out
作用:数据输出
注意:不要轻易使用,任何一个组件都可以使用,不易维护,不安全。
exception
类型 :javax.lang.Throwable
生存周期:服务范围。Tomcat一启动就会创建application对象,Tomcat销毁关闭。
将一个jsp页面保存在WEB-INF文件夹之下,如何通过配置web.xml文件 ,访问该页面?
- 配置web.xml中的servlet:
<servlet>
<servlet-name>index</servlet-name>
<servlet-file>/web-inf/index.jsp</servlet-file> <!-- 要执行的jsp文件-->
<servlet-class>跳转到首页的action</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index.action</url-pattern> <!--映射的路径-->
</servlet-mapping>