servlet技术简要总结
2014-05-12 23:43
246 查看
1.服务器如何调用servlet的?
servlet是运行在服务器的程序,当客机请求服务器的时候,服务器servlet会调用service方法,它会自动判断如果它是get方式提交,那么 就调用doget()方法如果是post提交就调用dopost()方法.我们只需要重写doget()跟dopost()方法即可!
2.servlet与生命周期相关的方法何时被执行:
1.任何从客户端发过来的请求,会导致service方法会被执行
2.当servlet被创建出来时,初始化方法init会被执行
* 生命周期
1、加载
2、实例化 和 初始化init() 只调用一次(默认第一次访问时)
a)使用 <load-on-startup>, web应用在启动时实例化
b)不用的话,是第一次请求servlet的时候实例化,
c)Servlet属于单利多线程模式。只有一个实例
3、进入服务 service ( ) {doGet()...doPost()}(分析请求) 每次请求都会调用
4、 销毁 destroy( ) 战地在人在战地没人妄,只调用一次(web应用销毁时)
3.如何创建跟配置一个servlet:
* 建 java 项目,导入 servlet.jar 包
* 继承自 HttpSerlvet
* 重写 doGet()doPost()
* 拷贝 .class 文件到 发布路径/WEB-INF/classes/
* 在发布路径/WEB-INF/web.xml中配置servlet
4.如何给配置WEB应用中的WEB.XML.以及它的工作原理。
配置一个servlet分为2部分:
1、 声明部分
2、 部署部分
当我们用URL(IP + 端口 + WEB发布目录)访问服务器时,首先会访问到WEB应用的跟目录,然后在跟目录里有个WEB-INF文件夹,文件夹中有WEB.XML是我们这个应用的配置中心,在它里面可以配置<servlet>跟<servlet-mapping>。mapping的意思是映射,就是说声明部分的servlet-name必须跟下面部署的servlet-name一致,这样别人通过IP地址+端口+web应用发布目录+访问路径,一访问就可以知道这个servlet的名字是什么,然后通过部署部分的名字找到上面声明部分的名字,然后再通过声明部分的名字找到要执行的servlet的class文件,然后执行。
<!-- http://192.168.1.119:8080/发布路径/访问路径-->
例子:
<servlet>
<servlet-name>servlet名字(随便取)</servlet-name>
<servlet-class>com.xasxt.HelloServlet</servlet-class>
注意:这里是包名+类名,不要给类再加上.java后缀!!!
</servlet>
<servlet-mapping>
<servlet-name>servlet名字(必须跟上面取的名字一样)</servlet-name>
<url-pattern>/访问路径</url-pattern>
</servlet-mapping>
5、Init
1)如何初始化init参数?
在WEB应用中的WEB.XML中设置
<init-param>
<param-name>userName</param-name>
<param-value>12345678</param-value>
</init-param>
2)通过什么方法可以得到这些参数,?
我们知道在init方法被调用的时候就产生了ServletConfig,它可以理解是整个WEB.xml的代表。由了这个代表WEB。Xml中的东西就可以被访问到了。
config.getInitParameter(name)
config.getInitParameterNames()
3)为什么要初始化init参数?
比如我们后期会把链接数据库的账号密码配置到这里,以后需要改动的时候在配置里改下就可以了,而不用去找代码改!
6、一个web中不可能只有一个servlet,如何设置哪个servlet优先启动
<load-on-startup>数值(最先0)</load-on-startup>
7、 使用 HttpSerlvetRequest 对象
getParameter("参数名")接收指定参数名的值(String)
getParameterValues("参数名")接收指定参数名的一组值(String[])
getParameterNames()返回所有的参数名 Enumeration
setCharacterEncoding("字符集")设置request的字符编码格式
getContextPath()得到WEB应用程序名称
getServletPath()得到servlet访问路径,也就是<url-pattern>中间的东西
etMethod()获得请求方式(get还是post)
getRequestURI()<发布目录+访问目录>
getRequestURL()返回客户端发出请求时的完整URL
HttpSession getSession(boolean bool):获取 HttpSession 对象
true: 已经存在session,返回当前session;不存在返回新创建的session
false:已经存在session,返回当前session;不存在返回 null
HttpSession getSession():相当于 getSession(true)
getRemoteAddr返回发出请求的客户机的IP地址
复习:Enumeration的用法
Enumeration<String> enums = request.getParameterNames();
while(enums.hasMoreElements()){
String name = enums.nextElement();
String[] values = request.getParameterValues(name);
if(null==values){
System.out.println(name+"="+"");
}else{
for (String value : values) {
System.out.println(name+"="+value);
}
}
}
8、ServletConfig对象:
它代表着整个WEB应用中的WEB.xml配置
9、ServletContext对象:
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象它的作用的范围是整个WEB应用。
作用:1.要是有一个程序给ServletContext,中存个数据,只要这应用程序不退出,别人都可以取。
2.可以访问WEB应用的资源文件
拿到servletContext方式:
this代表servlet
ServletContext context = this.getServletContext();
10、 Request乱码的处理
我们提交的表单数据中有的值可能是中文的,提交过来以后出现了中文乱码,处理方式按照提交的方式有2种方法:
1、如果是get提交方式:
Get方式提交的必须手动一个值一个值的进行处理,方式是:
String uname = getParameter(“uname”);
String name = new String(uname.getBytes(“iso8859-1”),”UTF-8”);
2、如果是post提交方式:
Request. setCharacterEncoding(“UTF-8”);
11、使用 HttpSerlvetResponse 对象
setContentType("text/html;charset=UTF-8") 设置响应输出类型
setCharacterEncoding("字符集") 设置 response 的字符编码格式
sendRedirect("路径") 设置 响应 的路径
13、请求转发与重定向:
response . sendRedirect(“路径”)
1、重定向:其实是发一次请求,等响应回来之后,重新再去请求,然后再响应,
也就是去了回来,然后再去再回来,第二次去也就是我们所要重定向的地址。
1>显示最新的请求
2>地址栏会变显示最新的请求地址。
3>是客户端跟服务器之间
4>request不同,所以不能使用:reqeust. setAttribute(key,value)
2、转发:
request.getRequestDispatcher(“ ”).forward( req ,resp)
1>地址栏只显示第一次的请求地址,不会变
2>服务器内部的处理过程
3>参数可以累加
4>可以使用 reqeust. setAttribute(key,value)存放对象在当前请求中
14、Cookie:
Cookie是客户端技术,程序把每个用户的数据以cookie的形式回写给用户各自的浏览器,或是存到硬盘上,当用户使用浏览器再去访问服务器中的WEB资源时,就会带着各自的数据去,这样WEB资源处理的就是用户各自的数据了。
如果创建cookie。并将它发送到浏览器,默认情况下有效期就是浏览器进程,
浏览器关闭cookie即被删除,如果希望该cookie存在磁盘上,则需要设置setMaxAge,那么设置的时间是多久,在这段时间中即使关闭浏览器,用新的浏览器去访问,cookie也是有效的。
注意 :
1、如果设置为0,则是命令浏览器删除该cookie
2、删除cookie时,path必须一致,否则不会删除
常用方法:
创建:Cookie cookie = new Cookie(“代号名称”, 实际内容);
get/setValue() :得到或设置值
get/setMaxAge() :得到或设置有效期
get/setPath() :设置或得到Path
getName() :得到代号名称
加入response.add();加入响应
15、Session:
void setAttribute(String name,Object value):把信息保存到当前浏览器对应的session中
Object getAttribute(String name):把信息从当前浏览器对应的session中取出,注意转型
*Session生命周期:
生:用IE去访问服务器,服务器中的WEB应用中只要出现getSession那么session就创建了。
死:session不是说浏览器一关闭就死了,而是要等服务器规定的时间后才会死例如:30分钟后,即使你不关闭浏览器,30分后session也会死掉。
*如何设置session有效期及摧毁session
1、在WEB应用WEB.XML里设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2、用代码摧毁:
session.invalidate();
*Session原理:
客户机用IE去访问服务器,服务器会在内部给这个IE开辟一块带IEsessionID的空间,然后把SessionID以Cookie的形式回写给浏览器,其实也就是一个没有设置有效期的Cookie。如果浏览器关闭客户端cookie资源也跟着即被删除,再次用IE访问则不会带着cookie去(因为cookie已经被删除了),但是以前那个IE的session空间依然存在(存在的时间根据你浏览器请求响应的最后一次开始算),这次服务器会再给当前这个IE新开辟一个IEsessionId空间。
注意:
1、Session的空间可以存放东西,但是不可以存放太多,比如:用户的账户密码什么的。
2、我们知道session基于cookie,相等于一个没有有效期的cookie,如果我们给购物车里放了1000本书,然后浏览器突然关闭了,下次再访问,这1000本书就没有了,如何解决?
答:服务器的getSession在创建session空间时会回写给客户机的cookie是没有有效期的我们只需要在回写coolie的时候设置有效期,那么即使浏览器关闭了,那么新开的浏览器来访问的时候,也会带着cookie的资源来,我们买的东西依然在.
服务器回写给客户机的sessionId是:JSESSIONID
16、Application:
setAttribute(String name,Object value)
Object getAttribute(String name)
对所有客户端只有一个。服务器启动,生,服务器停止,死。
小例子:
<%
int cc = 0;
if(null==application.getAttribute("webCount")){
application.setAttribute("webCount",1);
}else{
cc = (Integer)application.getAttribute("webCount");
if(session.isNew()){
application.setAttribute("webCount",cc+1);
}
}
%>
访问次数:<%=cc+1 %>
12、*servlet细节:
1.
针对客户端的多次servlet请求,通常情况下,服务器只会创建一个servlet实例对象,也就是说servlet实例对象一旦被创建
它就会驻留再内存中,为后续的其他请求服务,直到web容器推出servlet实例对象才会销毁!
2.
同一个servlet可以被映射到多个URL上,即<servlet-name>一个它可以同时有
多个映射
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>。
3.
servlet是运行在服务器的程序,当客机请求服务器的时候,服务器servlet会调用service方法,它会自动判断如果它是get方式提交,那么 就调用doget()方法如果是post提交就调用dopost()方法.我们只需要重写doget()跟dopost()方法即可!
2.servlet与生命周期相关的方法何时被执行:
1.任何从客户端发过来的请求,会导致service方法会被执行
2.当servlet被创建出来时,初始化方法init会被执行
* 生命周期
1、加载
2、实例化 和 初始化init() 只调用一次(默认第一次访问时)
a)使用 <load-on-startup>, web应用在启动时实例化
b)不用的话,是第一次请求servlet的时候实例化,
c)Servlet属于单利多线程模式。只有一个实例
3、进入服务 service ( ) {doGet()...doPost()}(分析请求) 每次请求都会调用
4、 销毁 destroy( ) 战地在人在战地没人妄,只调用一次(web应用销毁时)
3.如何创建跟配置一个servlet:
* 建 java 项目,导入 servlet.jar 包
* 继承自 HttpSerlvet
* 重写 doGet()doPost()
* 拷贝 .class 文件到 发布路径/WEB-INF/classes/
* 在发布路径/WEB-INF/web.xml中配置servlet
4.如何给配置WEB应用中的WEB.XML.以及它的工作原理。
配置一个servlet分为2部分:
1、 声明部分
2、 部署部分
当我们用URL(IP + 端口 + WEB发布目录)访问服务器时,首先会访问到WEB应用的跟目录,然后在跟目录里有个WEB-INF文件夹,文件夹中有WEB.XML是我们这个应用的配置中心,在它里面可以配置<servlet>跟<servlet-mapping>。mapping的意思是映射,就是说声明部分的servlet-name必须跟下面部署的servlet-name一致,这样别人通过IP地址+端口+web应用发布目录+访问路径,一访问就可以知道这个servlet的名字是什么,然后通过部署部分的名字找到上面声明部分的名字,然后再通过声明部分的名字找到要执行的servlet的class文件,然后执行。
<!-- http://192.168.1.119:8080/发布路径/访问路径-->
例子:
<servlet>
<servlet-name>servlet名字(随便取)</servlet-name>
<servlet-class>com.xasxt.HelloServlet</servlet-class>
注意:这里是包名+类名,不要给类再加上.java后缀!!!
</servlet>
<servlet-mapping>
<servlet-name>servlet名字(必须跟上面取的名字一样)</servlet-name>
<url-pattern>/访问路径</url-pattern>
</servlet-mapping>
5、Init
1)如何初始化init参数?
在WEB应用中的WEB.XML中设置
<init-param>
<param-name>userName</param-name>
<param-value>12345678</param-value>
</init-param>
2)通过什么方法可以得到这些参数,?
我们知道在init方法被调用的时候就产生了ServletConfig,它可以理解是整个WEB.xml的代表。由了这个代表WEB。Xml中的东西就可以被访问到了。
config.getInitParameter(name)
config.getInitParameterNames()
3)为什么要初始化init参数?
比如我们后期会把链接数据库的账号密码配置到这里,以后需要改动的时候在配置里改下就可以了,而不用去找代码改!
6、一个web中不可能只有一个servlet,如何设置哪个servlet优先启动
<load-on-startup>数值(最先0)</load-on-startup>
7、 使用 HttpSerlvetRequest 对象
getParameter("参数名")接收指定参数名的值(String)
getParameterValues("参数名")接收指定参数名的一组值(String[])
getParameterNames()返回所有的参数名 Enumeration
setCharacterEncoding("字符集")设置request的字符编码格式
getContextPath()得到WEB应用程序名称
getServletPath()得到servlet访问路径,也就是<url-pattern>中间的东西
etMethod()获得请求方式(get还是post)
getRequestURI()<发布目录+访问目录>
getRequestURL()返回客户端发出请求时的完整URL
HttpSession getSession(boolean bool):获取 HttpSession 对象
true: 已经存在session,返回当前session;不存在返回新创建的session
false:已经存在session,返回当前session;不存在返回 null
HttpSession getSession():相当于 getSession(true)
getRemoteAddr返回发出请求的客户机的IP地址
复习:Enumeration的用法
Enumeration<String> enums = request.getParameterNames();
while(enums.hasMoreElements()){
String name = enums.nextElement();
String[] values = request.getParameterValues(name);
if(null==values){
System.out.println(name+"="+"");
}else{
for (String value : values) {
System.out.println(name+"="+value);
}
}
}
8、ServletConfig对象:
它代表着整个WEB应用中的WEB.xml配置
9、ServletContext对象:
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象它的作用的范围是整个WEB应用。
作用:1.要是有一个程序给ServletContext,中存个数据,只要这应用程序不退出,别人都可以取。
2.可以访问WEB应用的资源文件
拿到servletContext方式:
this代表servlet
ServletContext context = this.getServletContext();
10、 Request乱码的处理
我们提交的表单数据中有的值可能是中文的,提交过来以后出现了中文乱码,处理方式按照提交的方式有2种方法:
1、如果是get提交方式:
Get方式提交的必须手动一个值一个值的进行处理,方式是:
String uname = getParameter(“uname”);
String name = new String(uname.getBytes(“iso8859-1”),”UTF-8”);
2、如果是post提交方式:
Request. setCharacterEncoding(“UTF-8”);
11、使用 HttpSerlvetResponse 对象
setContentType("text/html;charset=UTF-8") 设置响应输出类型
setCharacterEncoding("字符集") 设置 response 的字符编码格式
sendRedirect("路径") 设置 响应 的路径
13、请求转发与重定向:
response . sendRedirect(“路径”)
1、重定向:其实是发一次请求,等响应回来之后,重新再去请求,然后再响应,
也就是去了回来,然后再去再回来,第二次去也就是我们所要重定向的地址。
1>显示最新的请求
2>地址栏会变显示最新的请求地址。
3>是客户端跟服务器之间
4>request不同,所以不能使用:reqeust. setAttribute(key,value)
2、转发:
request.getRequestDispatcher(“ ”).forward( req ,resp)
1>地址栏只显示第一次的请求地址,不会变
2>服务器内部的处理过程
3>参数可以累加
4>可以使用 reqeust. setAttribute(key,value)存放对象在当前请求中
14、Cookie:
Cookie是客户端技术,程序把每个用户的数据以cookie的形式回写给用户各自的浏览器,或是存到硬盘上,当用户使用浏览器再去访问服务器中的WEB资源时,就会带着各自的数据去,这样WEB资源处理的就是用户各自的数据了。
如果创建cookie。并将它发送到浏览器,默认情况下有效期就是浏览器进程,
浏览器关闭cookie即被删除,如果希望该cookie存在磁盘上,则需要设置setMaxAge,那么设置的时间是多久,在这段时间中即使关闭浏览器,用新的浏览器去访问,cookie也是有效的。
注意 :
1、如果设置为0,则是命令浏览器删除该cookie
2、删除cookie时,path必须一致,否则不会删除
常用方法:
创建:Cookie cookie = new Cookie(“代号名称”, 实际内容);
get/setValue() :得到或设置值
get/setMaxAge() :得到或设置有效期
get/setPath() :设置或得到Path
getName() :得到代号名称
加入response.add();加入响应
15、Session:
void setAttribute(String name,Object value):把信息保存到当前浏览器对应的session中
Object getAttribute(String name):把信息从当前浏览器对应的session中取出,注意转型
*Session生命周期:
生:用IE去访问服务器,服务器中的WEB应用中只要出现getSession那么session就创建了。
死:session不是说浏览器一关闭就死了,而是要等服务器规定的时间后才会死例如:30分钟后,即使你不关闭浏览器,30分后session也会死掉。
*如何设置session有效期及摧毁session
1、在WEB应用WEB.XML里设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2、用代码摧毁:
session.invalidate();
*Session原理:
客户机用IE去访问服务器,服务器会在内部给这个IE开辟一块带IEsessionID的空间,然后把SessionID以Cookie的形式回写给浏览器,其实也就是一个没有设置有效期的Cookie。如果浏览器关闭客户端cookie资源也跟着即被删除,再次用IE访问则不会带着cookie去(因为cookie已经被删除了),但是以前那个IE的session空间依然存在(存在的时间根据你浏览器请求响应的最后一次开始算),这次服务器会再给当前这个IE新开辟一个IEsessionId空间。
注意:
1、Session的空间可以存放东西,但是不可以存放太多,比如:用户的账户密码什么的。
2、我们知道session基于cookie,相等于一个没有有效期的cookie,如果我们给购物车里放了1000本书,然后浏览器突然关闭了,下次再访问,这1000本书就没有了,如何解决?
答:服务器的getSession在创建session空间时会回写给客户机的cookie是没有有效期的我们只需要在回写coolie的时候设置有效期,那么即使浏览器关闭了,那么新开的浏览器来访问的时候,也会带着cookie的资源来,我们买的东西依然在.
服务器回写给客户机的sessionId是:JSESSIONID
16、Application:
setAttribute(String name,Object value)
Object getAttribute(String name)
对所有客户端只有一个。服务器启动,生,服务器停止,死。
小例子:
<%
int cc = 0;
if(null==application.getAttribute("webCount")){
application.setAttribute("webCount",1);
}else{
cc = (Integer)application.getAttribute("webCount");
if(session.isNew()){
application.setAttribute("webCount",cc+1);
}
}
%>
访问次数:<%=cc+1 %>
12、*servlet细节:
1.
针对客户端的多次servlet请求,通常情况下,服务器只会创建一个servlet实例对象,也就是说servlet实例对象一旦被创建
它就会驻留再内存中,为后续的其他请求服务,直到web容器推出servlet实例对象才会销毁!
2.
同一个servlet可以被映射到多个URL上,即<servlet-name>一个它可以同时有
多个映射
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>。
3.
相关文章推荐
- Smart Client技术简要总结
- Jsp/Servlet及其相关技术详解复习总结
- Java Web技术总结(二):Java Web Servlet开发流程图
- java西天取经之路(一)Servlet技术学习总结
- 【S2第二学期-使用JSP/Servlet技术开发新闻发布系统】全书知识点总结
- 一起谈.NET技术,Smart Client技术简要总结
- Java Web技术总结(一):Servlet原理
- Servlet技术总结
- Servlet技术_思维导图总结1
- Servlet 技术全总结 (已完成,不定期增加内容)
- 【技术帖】各种jsp servlet报错问题总结
- servlet小总结4----在servlet中显示图片,分页技术等
- Cookie&Session会话技术&Servlet三个作用域总结
- Servlet技术_思维导图总结2
- Servlet技术_思维导图总结3
- java web学习心得与总结(四)——servlet技术
- HttpServletRequest 简要总结
- 2011年ArcGIS技术博客总结
- 《大型网站技术架构》总结---架构演化
- JSP和servlet知识点总结