26
26
27
27
## Servlet总结
28
28
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不是线程安全** ,因此要谨慎使用类变量。
30
30
31
31
## 阐述Servlet和CGI的区别?
32
32
55
55
## Servlet接口中有哪些方法及Servlet生命周期探秘
56
56
Servlet接口定义了5个方法,其中** 前三个方法与Servlet生命周期相关** :
57
57
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() `
63
63
64
64
** 生命周期:** ** Web容器加载Servlet并将其实例化后,Servlet生命周期开始** ,容器运行其** init()方法** 进行Servlet的初始化;请求到达时调用Servlet的** service()方法** ,service()方法会根据需要调用与请求对应的** doGet或doPost** 等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的** destroy()方法** 。** init方法和destroy方法只会执行一次,service方法客户端每次请求Servlet都会执行** 。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。
65
65
@@ -143,13 +143,11 @@ Response.setHeader("Refresh","5;URL=http://localhost:8080/servlet/example.htm");
143
143
JSP是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。下面通过实例给大家介绍。
144
144
工程JspLoginDemo下有一个名为login.jsp的Jsp文件,把工程第一次部署到服务器上后访问这个Jsp文件,我们发现这个目录下多了下图这两个东东。
145
145
.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 )
147
147
由于JSP只会在客户端第一次请求的时候被编译 ,因此第一次请求JSP时会感觉比较慢,之后就会感觉快很多。如果把服务器保存的class文件删除,服务器也会重新编译JSP。
148
148
149
149
开发Web程序时经常需要修改JSP。Tomcat能够自动检测到JSP程序的改动。如果检测到JSP源代码发生了改动。Tomcat会在下次客户端请求JSP时重新编译JSP,而不需要重启Tomcat。这种自动检测功能是默认开启的,检测改动会消耗少量的时间,在部署Web应用的时候可以在web.xml中将它关掉。
150
150
151
-
152
-
153
151
参考:《javaweb整合开发王者归来》P97
154
152
155
153
## JSP有哪些内置对象、作用分别是什么
@@ -195,31 +193,31 @@ JSP有9个内置对象:
195
193
## request.getAttribute()和 request.getParameter()有何区别
196
194
** 从获取方向来看:**
197
195
198
- getParameter()是获取 POST/GET 传递的参数值;
196
+ ` getParameter() ` 是获取 POST/GET 传递的参数值;
199
197
200
- getAttribute()是获取对象容器中的数据值;
198
+ ` getAttribute() ` 是获取对象容器中的数据值;
201
199
202
200
** 从用途来看:**
203
201
204
- getParameter用于客户端重定向时 ,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
202
+ ` getParameter() ` 用于客户端重定向时 ,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
205
203
206
- getAttribute用于服务器端重定向时 ,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
204
+ ` getAttribute() ` 用于服务器端重定向时 ,即在 sevlet 中使用了 forward 函数,或 struts 中使用了
207
205
mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。
208
206
209
- 另外,可以用 setAttribute, getAttribute 发送接收对象.而 getParameter 显然只能传字符串。
210
- setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值 ,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
207
+ 另外,可以用 ` setAttribute() ` , ` getAttribute() ` 发送接收对象.而 ` getParameter() ` 显然只能传字符串。
208
+ ` setAttribute() ` 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样 ` getAttribute() ` 就能取得你所设下的值 ,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。` getParameter() ` 只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
211
209
212
210
** 总结:**
213
211
214
- getParameter 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
212
+ ` getParameter() ` 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
215
213
216
- getAttribute 返回的是Object,需进行转换,可用setAttribute 设置成任意对象,使用很灵活,可随时用
214
+ ` getAttribute() ` 返回的是Object,需进行转换,可用 ` setAttribute() ` 设置成任意对象,使用很灵活,可随时用
217
215
218
216
## include指令include的行为的区别
219
217
** include指令:** JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。 语法格式如下:
220
218
<%@ include file="文件相对 url 地址" %>
221
219
222
- i** nclude动作:** < jsp:include > 动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
220
+ i** nclude动作:** ` <jsp:include> ` 动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
223
221
<jsp: include page="相对 URL 地址" flush="true" />
224
222
225
223
## JSP九大内置对象,七大动作,三大指令
@@ -232,11 +230,9 @@ JSP中的四种作用域包括page、request、session和application,具体来
232
230
- ** session** 代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
233
231
- ** application** 代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
234
232
235
-
236
-
237
233
## 如何实现JSP或Servlet的单线程模式
238
234
对于JSP页面,可以通过page指令进行设置。
239
- <%@page isThreadSafe=”false”%>
235
+ ` <%@page isThreadSafe=”false”%> `
240
236
241
237
对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。
242
238
@@ -310,4 +306,4 @@ Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Se
310
306
311
307
** Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 ** “1”** 即可免费无套路获取。
312
308
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