Skip to content

Commit 6479908

Browse files
committed
Update J2EE基础知识.md
1 parent 915d4a2 commit 6479908

File tree

1 file changed

+18
-22
lines changed

1 file changed

+18
-22
lines changed

docs/java/J2EE基础知识.md

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
## Servlet总结
2828

29-
在Java Web程序中,**Servlet**主要负责接收用户请求**HttpServletRequest**,在**doGet()**,**doPost()**中做相应的处理,并将回应**HttpServletResponse**反馈给用户。Servlet可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用**init()方法**,销毁时调用**destroy()方法****Servlet需要在web.xml中配置**(MyEclipse中创建Servlet会自动配置),**一个Servlet可以设置多个URL访问****Servlet不是线程安全**,因此要谨慎使用类变量。
29+
在Java Web程序中,**Servlet**主要负责接收用户请求 `HttpServletRequest`,在`doGet()`,`doPost()`中做相应的处理,并将回应`HttpServletResponse`反馈给用户。**Servlet** 可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用`init()`方法,销毁时调用`destroy()`方法****Servlet需要在web.xml中配置(MyEclipse中创建Servlet会自动配置),**一个Servlet可以设置多个URL访问****Servlet不是线程安全**,因此要谨慎使用类变量。
3030

3131
## 阐述Servlet和CGI的区别?
3232

@@ -55,11 +55,11 @@
5555
## Servlet接口中有哪些方法及Servlet生命周期探秘
5656
Servlet接口定义了5个方法,其中**前三个方法与Servlet生命周期相关**
5757

58-
- **void init(ServletConfig config) throws ServletException**
59-
- **void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException**
60-
- **void destory()**
61-
- java.lang.String getServletInfo()
62-
- ServletConfig getServletConfig()
58+
- `void init(ServletConfig config) throws ServletException`
59+
- `void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException`
60+
- `void destory()`
61+
- `java.lang.String getServletInfo()`
62+
- `ServletConfig getServletConfig()`
6363

6464
**生命周期:** **Web容器加载Servlet并将其实例化后,Servlet生命周期开始**,容器运行其**init()方法**进行Servlet的初始化;请求到达时调用Servlet的**service()方法**,service()方法会根据需要调用与请求对应的**doGet或doPost**等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的**destroy()方法****init方法和destroy方法只会执行一次,service方法客户端每次请求Servlet都会执行**。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。
6565

@@ -143,13 +143,11 @@ Response.setHeader("Refresh","5;URL=http://localhost:8080/servlet/example.htm");
143143
JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。下面通过实例给大家介绍。
144144
工程JspLoginDemo下有一个名为login.jsp的Jsp文件,把工程第一次部署到服务器上后访问这个Jsp文件,我们发现这个目录下多了下图这两个东东。
145145
.class文件便是JSP对应的Servlet。编译完毕后再运行class文件来响应客户端请求。以后客户端访问login.jsp的时候,Tomcat将不再重新编译JSP文件,而是直接调用class文件来响应客户端请求。
146-
![JSP工作原理](https://user-gold-cdn.xitu.io/2018/3/31/1627bee073079a28?w=675&h=292&f=jpeg&s=133553)
146+
![JSP工作原理](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/1.png)
147147
由于JSP只会在客户端第一次请求的时候被编译 ,因此第一次请求JSP时会感觉比较慢,之后就会感觉快很多。如果把服务器保存的class文件删除,服务器也会重新编译JSP。
148148

149149
开发Web程序时经常需要修改JSP。Tomcat能够自动检测到JSP程序的改动。如果检测到JSP源代码发生了改动。Tomcat会在下次客户端请求JSP时重新编译JSP,而不需要重启Tomcat。这种自动检测功能是默认开启的,检测改动会消耗少量的时间,在部署Web应用的时候可以在web.xml中将它关掉。
150150

151-
152-
153151
参考:《javaweb整合开发王者归来》P97
154152

155153
## JSP有哪些内置对象、作用分别是什么
@@ -195,31 +193,31 @@ JSP有9个内置对象:
195193
## request.getAttribute()和 request.getParameter()有何区别
196194
**从获取方向来看:**
197195

198-
getParameter()是获取 POST/GET 传递的参数值;
196+
`getParameter()`是获取 POST/GET 传递的参数值;
199197

200-
getAttribute()是获取对象容器中的数据值;
198+
`getAttribute()`是获取对象容器中的数据值;
201199

202200
**从用途来看:**
203201

204-
getParameter用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
202+
`getParameter()`用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
205203

206-
getAttribute用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
204+
`getAttribute()` 用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
207205
mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。
208206

209-
另外,可以用 setAttribute,getAttribute 发送接收对象.而 getParameter 显然只能传字符串。
210-
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
207+
另外,可以用 `setAttribute()`,`getAttribute()` 发送接收对象.而 `getParameter()` 显然只能传字符串。
208+
`setAttribute()` 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样`getAttribute()`就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。`getParameter()`只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
211209

212210
**总结:**
213211

214-
getParameter 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
212+
`getParameter()`返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
215213

216-
getAttribute 返回的是Object,需进行转换,可用setAttribute 设置成任意对象,使用很灵活,可随时用
214+
`getAttribute()`返回的是Object,需进行转换,可用`setAttribute()`设置成任意对象,使用很灵活,可随时用
217215

218216
## include指令include的行为的区别
219217
**include指令:** JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。 语法格式如下:
220218
<%@ include file="文件相对 url 地址" %>
221219

222-
i**nclude动作:** <jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
220+
i**nclude动作:** `<jsp:include>`动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
223221
<jsp:include page="相对 URL 地址" flush="true" />
224222

225223
## JSP九大内置对象,七大动作,三大指令
@@ -232,11 +230,9 @@ JSP中的四种作用域包括page、request、session和application,具体来
232230
- **session**代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
233231
- **application**代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
234232

235-
236-
237233
## 如何实现JSP或Servlet的单线程模式
238234
对于JSP页面,可以通过page指令进行设置。
239-
<%@page isThreadSafe=”false”%>
235+
`<%@page isThreadSafe=”false”%>`
240236

241237
对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。
242238

@@ -310,4 +306,4 @@ Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Se
310306

311307
**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
312308

313-
![我的公众号](https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334)
309+
![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)

0 commit comments

Comments
 (0)