1. jsp有哪些内置对象?作用分别是什么
内置对象 | 对应Servlet类 | 作用 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | 客户端的请求信息:Http协议头信息、Cookie、请求参数等 |
response | javax.servlet.http.HttpServletResponse | 用于服务器响应客户端请求返回数据 |
pageContext | javax.servlet.jsp.PageContext | 页面的上下文 |
session | javax.servlet.http.HttpSession | 客户端与服务器之间的会话 |
application | javax.servlet.ServletContext | 用于获取服务器应用生命周期的信息 |
out | javax.servlet.jsp.JspWriter | 用于服务器传输内容到客户端的输出流 |
config | javax.servlet.ServletConfig | 初始化时,JSP引擎向JSP页面传递的信息 |
page | java.lang.Object | 指向JSP页面本身 |
exception | java.lang.Throwable | 页面发生异常,产生的异常对象 |
2. 说一下jsp的4种作用域
- 所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。4个JSP内置对象作用域分别为:application、session、request、page(作用范围依次减小)
名称 | 作用域 |
---|---|
application | 在所有的应用程序中有效 |
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
- Web交互的最基本单位为HTTP请求。每个用户从进入网站到离开网站这段过程称为一次HTTP会话,一个服务器的运行过程中会有多个用户访问,就是多个HTTP会话。
2.1 application 作用域
- 如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。
- 整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然,你关闭了服务器,就会把上面所有的应用都关闭了。
- application作用域里的变量,他们的存活时间是最长的,如果不进行手工删除,它们会一直可以使用。
- application 作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下:
Object getAttribute(String name) //从application中获取信息
void setAttribute(String name,Object value) //向application 作用域中设置信息
2.2 session 作用域
- session 作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。
- 所谓当前会话,就是指用户打开浏览器开始,到用户关闭浏览器之间的过程。
- 这个过程可能包含多个请求响应。也就是说,只要用户不关闭浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一次会话(session),而放到会话中的变量就可以在当前会话的所有请求里使用。
- session 是通过HTTPSession接口实现,它提供的主要方法如下:
Object HTTPSession.getAttribute(String name) //从设施死你中获取信息
void HttpSession.setAttribute(String name,Object value) //向session中保存信息
HttpSession HttpServletRequest.getSession() //获取当前请求所在的session的对象 - session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始,但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值可以通过HttpSession的setMaxInactiveInterval()方法来设置:
void setMaxInactiveInterval(int interval)
如果想主动让会话结束,例如用户单击“注销”按钮的时候,可以使用HttpSession 的invalidate() 方法,用于强制结束当前session:void invalidate()
2.3 request 作用域
-
一个Http请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。request里的变量可以跨越forward前后的两页,但是只要刷新页面,它们就重新计算了。
-
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
-
所谓请求周期,就是值指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
-
Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的:
void setAttribute(String name, Object value) //将对象value以name为名称保存到request作用域中。Object getAttribute(String name) //从request作用域中取得指定名字的信息。
-
JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便转发,path为转发的目的Servlet。
void RequestDispatcher.forward(ServletRequest request, ServletResponse response)//将request和response转发 -
因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forword()方法进行跳转,最后在跳转到的Servlet通过使用getAttribute()方法即可实现信息传递。
-
注意:
转发不是重定向,转发是在Web应用内部进行的。
转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。
2.4 page 作用域
- page对象的作用范围仅限在用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。
- page里的变量只要页面跳转了。它们就销毁了。
- 如果把变量放pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以用这个变量。
- request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page夜(include、forward及filter)
3. Maven的三个构建生命周期是什么?
- Maven 的一个核心理念,Build Lifecycle,构建生命周期,明确地定义了一个项目构建跟发布的过程。
- Maven有三个内建的构建的生命周期:default,clean和site
default:项目部署的处理
clean:项目清理的处理
site:项目站点文档创建的处理
- 构建生命周期都由不同的阶段(Phase)构成
例如:default 生命周期由以下阶段构成:
validate:验证项目是否正确且所有必须信息是可用的
compile:编译项目源码
test:使用合适的测试框架对编译好的源码尽心测试,这些测试不应要求源码被打包或部署
package:根据指定的格式打包编译好的源码,如JAP
verify:对集成测试的结果进行检查,以保证质量达标
install:安装打包的项目到本地仓库,以供其他项目使用
deploy:在构建环境中完成,将最后的包复制到远程仓库,以便与其他开发人员和项目共享 - 为了完成default生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。
- 命令行调用:在开发环境中,使用 mvn install 、mvn clean deploy等命令进行构建,安装工程到本地仓库
4. #{}和${}的区别是什么?
- #{} ?占位符
select * from user where username=#{name}
select * from user where username=? -
字
符
串
拼
接
s
e
l
e
c
t
∗
f
r
o
m
u
s
e
r
w
h
e
r
e
u
s
e
r
n
a
m
e
=
′
{} 字符串拼接 select * from user where username='
字符串拼接select∗fromuserwhereusername=′{name}’
PreparedStatement/Statement
5. jQuery中的常用选择器有哪些,至少5种
1. ID选择器 #id
描述:根据给定的id匹配一个元素, 返回单个元素(注:在网页中,id名称不能重复)
示例:$("#test") 选取 id 为 test 的元素
2. 类选择器 .class
描述:根据给定的类名匹配元素,返回元素集合
示例:$(".test") 选取所有class为test的元素
3. 元素选择器 element
描述:根据给定的元素名匹配元素,返回元素集合
示例:$("p") 选取所有的<p>元素
4. *
描述:匹配所有元素,返回元素集合
示例:$("*") 选取所有的元素
5. selector1,selector2,...,selectorN
描述:将每个选择器匹配到的元素合并后一起返回,返回合并后的元素集合
示例:$("p,span,p.myClass") 选取所有<p>,<span>和class为myClass的<p>标签的元素集合
6. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
可以
7. String s1 = “123”;这个语句有几个对象产生?一个
7.1 String s2 = new String(“123”),又创建了几个对象?两个(两个语句)
s1 == s2 false
String s3 = “123”
s1 == s3 true
String s4 = new String(“123”);
s2 == s4 false
8. Servlet的生命周期
构造对象—>init->service->doGet/doPost->destroy
9. Maven 的常用命令
clean :清理
compile:编译
test:测试
package:打包
install:安装
deploy:部署
10. maven 常见的依赖范围有哪些?
包名:公司域名.项目名.模块名称
com.fy.myshop.user.controller
<groupId>com.fy</groupId>
<artifactId>myshop</artifactId>
<version>0.0.1.SNAPTSHOT</version>
<scope>compile</scope>
maven的依赖范围包括: compile,provide,runtime,test,system。
compile:表示编译范围,指A在编译时依赖B,该范围为默认依赖范围。编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包。
provide:provide依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servlet api被Tomcat容器提供了。
runtime:runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包。
test:test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包。
system:system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用。