Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
JavaGuide
提交
64799085
J
JavaGuide
项目概览
wushizhenking
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
64799085
编写于
6月 15, 2019
作者:
S
SnailClimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update J2EE基础知识.md
上级
915d4a20
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
23 deletion
+19
-23
docs/java/J2EE基础知识.md
docs/java/J2EE基础知识.md
+19
-23
未找到文件。
docs/java/J2EE基础知识.md
浏览文件 @
64799085
...
...
@@ -26,7 +26,7 @@
## Servlet总结
在Java Web程序中,
**Servlet**
主要负责接收用户请求
**HttpServletRequest**
,在
**doGet()**
,
**doPost()**
中做相应的处理,并将回应
**HttpServletResponse**
反馈给用户。Servlet可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用
**init()方法**
,销毁时调用
**destroy()方法**
。
**Servlet需要在web.xml中配置**
(MyEclipse中创建Servlet会自动配置),
**一个Servlet可以设置多个URL访问**
。
**Servlet不是线程安全**
,因此要谨慎使用类变量。
在Java Web程序中,
**Servlet**
主要负责接收用户请求
`HttpServletRequest`
,在
`doGet()`
,
`doPost()`
中做相应的处理,并将回应
`HttpServletResponse`
反馈给用户。
**Servlet**
可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用
`init()`
方法,销毁时调用
`destroy()`
方法
**。**
Servlet需要在web.xml中配置
(MyEclipse中创建Servlet会自动配置),
**一个Servlet可以设置多个URL访问**
。
**Servlet不是线程安全**
,因此要谨慎使用类变量。
## 阐述Servlet和CGI的区别?
...
...
@@ -55,11 +55,11 @@
## Servlet接口中有哪些方法及Servlet生命周期探秘
Servlet接口定义了5个方法,其中
**前三个方法与Servlet生命周期相关**
:
-
**void init(ServletConfig config) throws ServletException**
-
**void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException**
-
**void destory()**
-
java.lang.String getServletInfo()
-
ServletConfig getServletConfig()
-
`void init(ServletConfig config) throws ServletException`
-
`void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException`
-
`void destory()`
-
`java.lang.String getServletInfo()`
-
`ServletConfig getServletConfig()`
**生命周期:**
**Web容器加载Servlet并将其实例化后,Servlet生命周期开始**
,容器运行其
**init()方法**
进行Servlet的初始化;请求到达时调用Servlet的
**service()方法**
,service()方法会根据需要调用与请求对应的
**doGet或doPost**
等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的
**destroy()方法**
。
**init方法和destroy方法只会执行一次,service方法客户端每次请求Servlet都会执行**
。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。
...
...
@@ -143,13 +143,11 @@ Response.setHeader("Refresh","5;URL=http://localhost:8080/servlet/example.htm");
JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。下面通过实例给大家介绍。
工程JspLoginDemo下有一个名为login.jsp的Jsp文件,把工程第一次部署到服务器上后访问这个Jsp文件,我们发现这个目录下多了下图这两个东东。
.class文件便是JSP对应的Servlet。编译完毕后再运行class文件来响应客户端请求。以后客户端访问login.jsp的时候,Tomcat将不再重新编译JSP文件,而是直接调用class文件来响应客户端请求。
![
JSP工作原理
](
https://
user-gold-cdn.xitu.io/2018/3/31/1627bee073079a28?w=675&h=292&f=jpeg&s=133553
)
![
JSP工作原理
](
https://
my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/1.png
)
由于JSP只会在客户端第一次请求的时候被编译 ,因此第一次请求JSP时会感觉比较慢,之后就会感觉快很多。如果把服务器保存的class文件删除,服务器也会重新编译JSP。
开发Web程序时经常需要修改JSP。Tomcat能够自动检测到JSP程序的改动。如果检测到JSP源代码发生了改动。Tomcat会在下次客户端请求JSP时重新编译JSP,而不需要重启Tomcat。这种自动检测功能是默认开启的,检测改动会消耗少量的时间,在部署Web应用的时候可以在web.xml中将它关掉。
参考:《javaweb整合开发王者归来》P97
## JSP有哪些内置对象、作用分别是什么
...
...
@@ -195,31 +193,31 @@ JSP有9个内置对象:
## request.getAttribute()和 request.getParameter()有何区别
**从获取方向来看:**
getParameter()
是获取 POST/GET 传递的参数值;
`getParameter()`
是获取 POST/GET 传递的参数值;
getAttribute()
是获取对象容器中的数据值;
`getAttribute()`
是获取对象容器中的数据值;
**从用途来看:**
getParameter
用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
`getParameter()`
用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
getAttribute
用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
`getAttribute()`
用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。
另外,可以用
setAttribute,getAttribute 发送接收对象.而 getParameter
显然只能传字符串。
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter
只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
另外,可以用
`setAttribute()`
,
`getAttribute()`
发送接收对象.而
`getParameter()`
显然只能传字符串。
`setAttribute()`
是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样
`getAttribute()`
就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。
`getParameter()`
只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
**总结:**
getParameter
返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
`getParameter()`
返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
getAttribute 返回的是Object,需进行转换,可用setAttribute
设置成任意对象,使用很灵活,可随时用
`getAttribute()`
返回的是Object,需进行转换,可用
`setAttribute()`
设置成任意对象,使用很灵活,可随时用
## include指令include的行为的区别
**include指令:**
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。 语法格式如下:
<
%@
include
file=
"文件相对 url 地址"
%
>
i
**nclude动作:**
<jsp:include>
动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
i
**nclude动作:**
`<jsp:include>`
动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
<jsp:include
page=
"相对 URL 地址"
flush=
"true"
/>
## JSP九大内置对象,七大动作,三大指令
...
...
@@ -232,11 +230,9 @@ JSP中的四种作用域包括page、request、session和application,具体来
-
**session**
代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
-
**application**
代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
## 如何实现JSP或Servlet的单线程模式
对于JSP页面,可以通过page指令进行设置。
<
%@
page
isThreadSafe=
”false”%
>
`<%@page isThreadSafe=”false”%>`
对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。
...
...
@@ -310,4 +306,4 @@ Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Se
**Java工程师必备学习资源:**
一些Java工程师常用学习资源公众号后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334
)
\ No newline at end of file
![
我的公众号
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录