`
zhangfeilo
  • 浏览: 399874 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

jsp Servlet详解

    博客分类:
  • J2EE
阅读更多

一、简述 
1、Servlet,服务器端的小程序,它是相对于Applet而言的,Applet是客户端小程序。 
   Servlet,是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应 
   Servlet,是基于Http协议的,是运行在web服务器中的程序。这里要提出一个容器的概念。 
   servlet是运行在web容器中,在后面会详细地讲解,这个web容器可以控制Servlet对象的生命周期,控制请求由Servlet对象处理。

2、web服务器,这里的服务器不是硬件概念,而是软件,常用的web服务器有 Tomcat,Jboss等,我们所用到的Tomcat是一个开源的服务器, 
   Tomcat是一个用java语言编写的web服务器,所以需要有相应的java运行环境,也就是JVM,还要配置tomcat的具体路径。

二、Tomcat的配置

JAVA_HOME=/XXX/XXX/(JDK路径,bin的上一层目录) 
CATALINA_HOME=/XXXX/XXX(tomcat的绝对路径 windows中 X:\xxx\xxx)

在启动Tomcat时,是运行Tomcat的bin目录下的startup.sh(windows中使用startup.bat) 
判断Tomcat是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/http://127.0.0.1:8080/可以访问到tomcat的主页就是启动成功了。 
要想停止tomcat服务器要使用shutdown.sh(windows中使用shutdown.bat),如果直接关闭启动窗口,就会造成8080端口占用错误,这时可以在使用 
shutdown.sh关闭一下服务器。

startup.sh,shutdown.sh,shutdown.bat,startup.bat这些文件其实是一些脚本文件用来执行大量的命令,也就是大量java命令。

tomcat的默认监听端口是8080端口,当接受到每一个连接请求,就会为其分配一个线程。

tomcat可以识别的资源只有在webapps文件夹下,webapps也就是web应用文件夹,webapps下的文件夹这些文件夹中存放的就是web应用, 
web应用是有格式规范的,每个web应用的文件夹下都要有 
WEB-INF文件夹,WEB-INF文件夹下有classes,和lib文件夹,以及一个web.xml文件,一些使用到的类文件放在classes中,一些使用到 
的相应的jar文件。

注意:使用完有限的资源要进行释放。 
tomcat中配置了root缺省应用,也就是在不指定的情况下会默认访问这个应用。

web.xml文件的写法 
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

</web-app>

在tomcat服务器中,访问应用下的资源可以在端口号后架上web应用文件夹得名字就可以看到资源 
http://localhost:8080/xxxxx/xxxx.html,静态页面只能放在web应用的文件夹下,不能够放在 
WEB-INF文件夹下,WEB-INF文件夹中的资源是受保护的,不能够通过网络访问到。


三、Servlet基础

Servlet,可以实现动态的页面,可以针对不同的请求作出不同的响应,可以实现页面的流转,Servlet可以充当MVC模式中的Ctrl模块,他可以控制信息的流向。 
web服务器会web应用在WEB-INF文件夹下的classes文件夹搜索要加载的class文件,所以我们写的class文件要放在web应用中的WEB-INF文件夹下的classes文件夹下。

设置servlet的类和访问的方式

web.xml文件的配置,一个web.xml中可以配置多个Servlet 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app> 
<servlet> 
<servlet-name>servlet的名字</servlet-name> 
<servlet-class>servlet类全名</servlet-class> 
</servlet> 
<servlet> 
<servlet-name>servlet的名字1</servlet-name> 
<servlet-class>servlet类全名1</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>servlet的名字(要和servlet标签中的相同)</servlet-name> 
<url-pattern>指定servlet相对于应用目录的路径</url-pattern> 
</servlet-mapping> 
servlet-mapping> 
<servlet-name>servlet的名字1</servlet-name> 
<url-pattern>指定servlet相对于应用目录的路径</url-pattern> 
</servlet-mapping> 
</web-app>

catalina.sh run 带控制台启动tomcat服务器。


四、Servlet的调用过程

1,用户通过浏览器向web服务器发送请求 
   http://serverip:port/apppath
2,服务器为用户定位资源 
   静态资源:/a.html /a/b.html (这里的路径是针对web应用文件夹目录)读文件并把内容发 送到客户端 
   动态资源:解析web.xml定位Servlet类的名字 
             装载类(WEB-INF/classes|WEB-INF/lib/*.jar) 
             创建该对象的实例 
             Servlet ser=(Servlet)(Class.forName("servle的类名")).newInstance(); 
     //我们写的Servlet一定要实现Servlet接口或者继承实现了Servlet接口的类 
     ser.service(request,response);

<servlet-mapping> 
<servlet-name>servlet的名字(要和servlet标签中的相同)</servlet-name> 
<url-pattern>指定servlet相对于应用目录的路径</url-pattern> 
</servlet-mapping> 
url-parttern的配置,这个url就是Servlet的虚拟路径,可以使用相对路径或者是绝对路径。 
/xxx/xxx(绝对路径) ,xxx(相对路径),尽量使用绝对路径。 
访问servlet的方法 
http://serverip:port/应用文件夹名/url-pattern

http的请求 
get请求,post请求。 
get请求在发出请求时会把参数写在地址栏上,而post请求不会把要发送的参数显示在地址栏上。

<form method="get" action="应用名/url-pattern"> 
...... 
</form>

我们可以通过ServletRequest对象的方法来获取请求中传送的参数。 
getParameter(String name)方法,可以获得form表单中指定名字的参数,多参数同名时,只取一个。 
getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得form表单中参数的名字。 
getParameterValues(String name)获得指定的所有同名参数的值。

 

 

==============================================

                               Servlet第二天     2007年6月22日

一、复习 
servlet接口的实现类中的service()方法,在继承HttpServlet类时,如果没有覆盖父类的service()方法, 
那么父类的service()方法会根据请求类型不同的会分别调用覆盖的doGet(),doPost()方法,如果响应两 
种请求的动作相同,那么可以直接覆盖service()方法。如果覆盖了 
doGet(),doPost()方法之一,那么就会只对一种请求作出相应。在浏览器的地址栏操作按回车键,或者是 
热连接,都是get请求,form的method属性如果不指定,默认为get请求。

我们可以通过ServletRequest对象或HttpServletRequest对象的方法来获取请求中传送的参数。 
getParameter(String name)方法,可以获得form表单中指定名字的参数,多参数同名时,只取一个。 
getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得form表单中参数的名字。 
getParameterValues(String name)获得指定的所有同名参数的值。

get请求,会将参数显示在浏览器的地址栏上,其显示格式,在地址之后会以问号开始,以'&'分隔参数, 
可以通过HttpServletRequest对象的getQueryString()方法来获得get请求的参数值。

ServletRequest对象的getInputStream()方法可以获得一个由Socket得来的输入流,可以使用这个流来 
实现文件的上传。getReader()方法可以直接获取post请求的参数。

注意:getParameter()与getReader()方法不能同时调用

ServletContext对象是Servlet的上下文对象,这个对象是在服务器启动时创建的,他可以看作是 
一个应用的对象,他可以看作是包含Servlet,管理Servlet的对象。


二、servlet的生命周期

遵守servlet规范的类,就可以通过服务器产生对象(反射机制),并处理请求。

servlet接口中的方法 
所有的servlet都必须实现javax.servlet.Servlet接口

public class TestServlet implements Servlet { 
ServletConfig config; 
public void init(ServletConfig config) throws ServletException {//任务是初始化 
this.config=config; 
//这个ServletConfig对象是由服务器生成,也就是有系统提供的,通过他可以获得启动信息。ServletConfig对象和Servlet是一一对应的。 
//这个方法是在Servlet创建后调用的。如果要是用到ServletConfig对象是一定要为对象赋值。 
}

public ServletConfig getServletConfig() { 
return this.config; 
}

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {//为了干活 
...;//这个方法是用来处理请求的核心方法 
}

public String getServletInfo() { 
return "....";//这个是用来写Servlet信息的,用来写作者,以及版本信息 
}

public void destroy() { 
...;//这个方法是用来销毁Servlet对象的 
}

}

HttpServlet和GenericServlet都实现了Servlet接口。 
HttpServlet中的service(HttpServletRequest request,HttpServletResponse response)方法是通过service(ServletRequest request,ServletResponse response)方法的调用

来实现对请求的处理。

1、Servlet的生命周期分为四个阶段 
(1)创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认) 
(2)调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次 
(3)响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。 
(4)在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。


2、servlet创建时机: 
(1)第一个请求到来的时候创建 
(2)在web.xml中<servlet>标签下添加<load-on-startup>2</load-on-startup>,则在服务器启动的时候就创建 
     标签体是正数的时候,启动服务器,即创建servlet 
     并且当多个<servlet>标签都定义了这个时,数字小的先加载

3、初始化参数 
可以通过<init-param>标签来配置初始化参数,可以用ServletConfig对象的 
getInitParameter(String name)方法来得到参数。

<init-param>初始化参数 
<param-name>...</param-name> 
<param-value>...</param-value> 
</init-param>

三、多线程下的操作 
多线程下所操作的变量,如果操作的是一个变量,且兼有读写操作,就要考虑加上同步,但同步不能乱加,否则会造成死锁问题。 
init()和destroy()方法都是运行在单线程下的。

四、分布式模型 
把系统部署在不同的地址空间执行 
在有限的硬件条件下,服务更多的用户 
在Servlet中可以访问,JDBC,RMI(远程方法调用),以及跨语言平台的组件等资源。 
在Servlet中是用JDBC很容易,也就是在Servlet中调用JDBC中的方法,就可以实现对数据库的访问

五、有参和无参的init方法。 
public void init(ServletConfig config)throws ServletException 

        this.config = config; 
        init(); 
}

public void init()throws ServletException 

.....;//覆盖了的无参的init()方法,会在Servlet创建,调用有参的init方法时 
也会被调用。 
}

先覆盖init(),有父类调init(config) 
init()方法可抛异常,初始化成功才进入service()方法中


六、war文件 
扩展名为“.war”的文件放在tomcat的webapps下,当服务器启动的时候,自动把文件解压开 
注意:文件名字,就是将来访问时应用的名字


=================================================================================


                               
                               Servlet第三天     2007年6月25日 
                               
一、连接池 
在应用的META-INF文件夹下context.xml文件中 
<Context> 
   <Resource 
      name="jdbc/oracle" 配置JDNI的名字 
      type="javax.sql.DataSource" 绑定资源的类型 
      password="sd0605" 
      driverClassName="oracle.jdbc.driver.OracleDriver" 驱动名 
      maxIdle="1"最大连接数 
      maxWait="-1"等待时间,配置为-1就是无限等待,只到有空闲连接为止 
      username="sd0605" 
      url="jdbc:oracle:thin:@192.168.0.39:1521:TARENADB" 
      maxActive="3" 最大活动连接数/> 
</Context>     

以下是从连接池去取数据库连接的代码

public static Connection getConnection(String JNDIName){ 
Connection conn = null; 
try{ 
Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); //这个是在tomcat下默认绑定Context的JNDIname 
DataSource ds = (DataSource) envCtx.lookup(JNDIName); 
conn = ds.getConnection(); 
} catch (NamingException ne){ 
ne.printStackTrace(); 
} catch (SQLException se){ 
se.printStackTrace(); 

return conn; 
}


二、Java EE编程分层 
   表现层,业务层,数据层。 
表现层,也就算用来显示数据,接受数据的。JSP,Servlet 
业务层,是处理核心业务的程序 EJB,JDBC(Hibernate) 
数据层,也就是数据库,用来存放数据。Oracle,SQLServer

   MVC框架 
Model,模型层,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息, 
      可以使用JDBC或者Hibernate实现这一层的功能。 
Ctrl,控制曾,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用Servlet来实现这一层, 
      不过一般是会用开源的MVC框架来实现这层,例如struts,或者是Spring的MVC框架。 
View,表现层,他只用来显示数据和收集必要数据,收集数据的一般是form表单,不过要保证数据的正确性要是用JavaScript验证信息,以后我 
      们会学到的JSP(java server page)就是用来表现、显示数据的。 
      
三、Servlet的控制流转 
ServletContext,Servlet上下文对象,在每个Servlet中都会有一个ServletContext的引用,这个ServletContext是一个全局的对象,每个应用 
               中只有一个ServletContext对象。 
HttpServlet中的getServletContext()方法,获得ServletContext对象。 
ServletContext类的getRequestDispatcher(String path)方法获得一个RequestDispatcher对象,并且跳转到指定的Servlet, 
              getRequestDispatcher(String path)方法中的参数就是path,就是指定跳转的Servlet的url-pattern。 
RequestDispatcher类的forward(ServletRequest request, ServletResponse response) 方法,可以把请求对象转发给其他的Servlet。 
      
include用在v层 
forward用在c层

ServletRequest.getRequestDispatcher(); //relative      
ServletContext.getRequestDispatcher(); //absolute

一个Servlet对应一个Config,不能互相读取 
要想让所有的Serlvet都能读到参数:配置Context初始化参数,或者配置JNDI Naming的初始化参数                    

(1)配置Context容器的初始化参数 
<context-param> 
   <param-name>email</param-name> 
   <param-vlaue>liyan@tarena.com.cn</param-vlaue> 
</context-param>

在servlet的使用 
getSevletContext().getInitParameter("email");

(2)配置JNDI Naming的初始化参数 
<env-entry> 
   <env-entry-name>email<env-entry-name> 
   <env-entry-type>java.lang.String<env-entry-type> 
   <env-entry-value>liyan@tarena.com.cn<env-entry-value> 
</env-entry>

使用,得到初始化参数 
Context ctx = new InitialContext(); 
String email = (String)ctx.lookup("java:comp/env/email");


四、会话 
会话是可以保存状态的

Session(会话)和Cookie(会话跟踪机制)

Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建, 
但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通 
过Session对象的 
setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。

public void service(ServletRequest request,ServletResponse response){

String user = request.getParameter("user"); 
        String pass = request.getParameter("pass"); 
HttpSession session = request.getSession(true);//使用请求对象来创建Session 
        session.setAttribute("username", user); 
        session.setAttribute("passwd", pass); 
}


getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个 
Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。

注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。 
大数据量的传输或保存不适合使用Session空间。

Cookie,是记录用户的Session信息,也可以记录用户的请求信息,也就是SessionID,来分辨哪一个用户是否登陆过。在每次登陆时, 
还会将Cookie发送回服务器端,Cookie是用来跟踪Session的。

public void service(ServletRequest request,ServletResponse response){

String user = request.getParameter("user"); 
        String pass = request.getParameter("pass"); 
Cookie userCookie = new Cookie("user", user); 
        userCookie.setMaxAge(60 * 60 * 24 * 365);//设置Cookie的最大有效期,秒为单位 
        Cookie passCookie = new Cookie("pass", pass); 
        passCookie.setMaxAge(60 * 60 * 24 * 365); 
        response.addCookie(userCookie); 
        response.addCookie(passCookie);

}

 

 

=================================================================================


                               Servlet第四天     2007年6月26日

一、复习 
1、连接池 
2、MVC 
3、cookie  

二、会话 session 
Session是基于Cookie来跟踪的,即:没有Cookies的支持,Session是不能运行起来的。

Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建, 
但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通 
过Session对象的

setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。

Session是存在于服务器内存中的,用于存用户多个请求的信息的;同时也要求客户端发送个Session的标志:SessionID (地址栏或封装在 
请求的Header中)。

getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个 
Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。

注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。 
大数据量的传输或保存不适合使用Session空间。 
用户身份认证 
登录时,创建session 
访问资源页面时,先判断session是否存在 
退出时清除session:session. invalidate(),接着可以将用户引导到登录页面

IE中一个窗口代表一个会话,Mozilla firefox不一样 
多个窗口可通过Cookies来识别Seesion。

Sssion第二种跟踪机制:URLRewriting 
Response.sendRediret(Response.encodeRedirectURL(/serv-app/student/ctrl“)) 
把在地址栏后加上SessionID地址地址参数 
out.println(”<a href=”+response.encodeURL(url)” 
<form actioin=”response.encodeURL(url)”> 
Forward也是encodeURL 
特殊一个:Response.sendRedirect(response.encodeRedirectURL(url)); 
每一个URL都要加上sessionID,但它不能跨越静态页面。 
所以一般默认针对Cookies可用编写程序。

1、session.invalidate()   --- session被立即销毁 
   session.setMaxInactiveInterval(int interval)   --- 设置最大的超时时间,以秒为单位 
2、会话的空间不是系统自动创建的,是程序创建的 
   request.getSession(false);    判断请求中是否存在session,以确保服务中资源的保护   
   
三、重定向 
产生新的请求,其中不包含原请求的session信息,只包含cookie信息

四、Session跟踪机制 
1、cookie机制 
2、URL回写机制:把sessionid绑定在地址栏中 
   response.sendRedirect(response.encodeRedirectURL(url));  

   
五、Servlet过滤器(Filter) 
应用:Sessioin logging encoding 
过滤器是用于过滤Servlet的请求和响应,过滤器是存在于请求和被请求资源之间的。 
过滤器就像当于一个中间件,请求要经过过滤器,然后过滤器才去掉用Servlet,Servlet的响应也会被过滤器截获并作相应的处理。

Filter是一个接口,要写一个自己的Filter就只能实现Filter接口。 
Filter也有自己的生命周期,他的生命周期和Servlet比较相似,也是会先调用init()方法,然后再调用核心的处理过滤的方法doFilter(),这个方法中可定义了过滤规则,然后是

destory()方法销毁Filter对象。

dofilter(ServletRequest request,ServletResponse response,FilterChain chain) 
这个是过滤的核心方法,FilterChain的方法doFilter(ServletRequest request, ServletResponse response)也就是用过滤后的请求调用资源的方法,如果不写这个方法,也就算

不会去调用相应的资源。

Filter的配置

Filter的配置和Servlet相似。 
<filter> 
<filter-name>SessionFilter</filter-name> 
<filter-class>alan.filter.SessionFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>SessionFilter</filter-name> 
<url-pattern>/protected/*</url-pattern> 
<!--这里的url-pattern就是要过滤的Servlet的url-pattern--> 
<dispatcher>request</dispatcher> 
<dispatcher>forward</dispatcher> 
<dispatcher>include</dispatcher> 
<!--上面的三个是过滤的范围--> 
</filter-mapping>

CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter对象,也就实现了向内存输出。 
CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。 
注意:CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且这个字符数组是会自动增长的。


六、Servlet的url-pattern

url-pattern可以使用以下三种方式 
1,确切路径匹配,也就是给出确定的路径 xxx/xxxx 
2,模糊路径匹配,也就是指给出一部分路径,xxxx/*,他会匹配确定路径,也就是xxxx/a 或者是xxxx/b都是可以匹配的 
3,扩展名匹配,也就是会匹配扩展名,只要是扩展名相同就匹配,xxx.xxx *.xx

注意:扩展名匹配和确切路径匹配不能放在一起使用,也就是不能写成 xxxx/xxxx/xxx.xx,但是可以用 
*.xxx。

ServletRequest对象的三个返回路径的方法 
getContextPath()获得应用的路径,用动态获取应用路径 
getServletPath()获得Servlet路径,也就是form中的action,如果使用确切路径那么就会是这个Servlet配置的url-pattern。 
getPathInfo()使用模糊路径匹配时会返回匹配模糊部分。

注意:在html的form表单的action中,如果使用了扩展名匹配,一定要写明/xxxxx/xxx.xx,不要写成/xxxx/*.xx,在form的action中要尽量使用绝对路径,也就是要用 应用

名/xxx.xx或者应用名/xxx。

SingleThreadModel接口 
1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口:       
   public class YourServlet extends HttpServlet implements SingleThreadModel{       ...       } 
2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。 
3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。

ServletRequest对象的生命周期就是在service()方法中,除了forward(...,...)方法将这个请求对象转发给其他的Servlet。  


=================================================================================


                               Servlet第五天     2007年6月27日

一、监听器 
以下是3个Listener接口。 
ServletRequestListener 
HttpSessionListener 
ServletContextListener 
这三个监听器接口,分别监听Servlet中3种比较中要的对象的创建和销毁。这三个接口中分别有监听该对象创建和销毁事件的方法,服务器本身就是事件源。

listener的配置 
<listener> 
<listener-class>alan.servlet.listener.AlanContextListener</listener-class> 
        <!--listener-class也就是实现Listener接口的类--> 
</listener>

Servlet中的重要对象(只针对应用)


                     数量                生命周期                  是否线程安全                          方法 
-------------------------------------------------------------------------------------------------------------------------------------------                  


ServletContext        1                   (天)全局的                不安全                     setAttribute(String,Object) 全局属性 
                                   只有在应用关闭时才销毁         需要加同步访问                 Object getAttribute(String) 任何Session 
                                                                                                 void removeAttibute(String) 都可以取到   
-------------------------------------------------------------------------------------------------------------------------------------------                  


HttpSession        和用户的               (分/小时)局部的           不安全                     setAttribute(String,Object) 存储用户级 
                   数量相同         只在有效时间内存在             可以不加同步访问              Object getAttribute(String) 的属性 
                                                             synchronized(session){......}       void removeAttibute(String) 
-------------------------------------------------------------------------------------------------------------------------------------------                  


ServletRequest       多个                 (秒)局部的               线程安全                    setAttribute(String,Object) 可以传递 
(HttpServletRequest)                 只在servic()和doGet()                                       Object getAttribute(String) 大量信息 
                                      doPost()中存在                                             void removeAttibute(String) 只使用一次 
-------------------------------------------------------------------------------------------------------------------------------------------        

二、作用 
1、主要对ServletContext、HttpSession、ServletRequest等对象行为的监听 
2、必须要实现一个或多个listener interface 
3、有两类监听器:声明周期监听器 ServletContextListener             HttpSessionListener              ServletRequestListener (2.4版本之后) 
                 对象状态监听器 ServletContextAttributeListener    HttpSessionAttributeListener     ServletRequestAttributeListener 
4、ServletContextListener中不能取得请求中的参数                 
                 
                 

 

分享到:
评论

相关推荐

    Servlet JSP深入详解 基于Tomcat的Web开发

    ### Servlet与JSP深入详解:基于Tomcat的Web开发 #### 一、Servlet技术概述 Servlet是一种用Java编写的服务器端应用程序接口(API),它扩展了Java Web开发的功能。Servlet可以响应HTTP请求,并且能够处理复杂的...

    servlet/jsp深入详解源代码

    这个名为“servlet/jsp深入详解源代码”的资料集合可能包含了他在Servlet和JSP领域的深入讲解,以及相关的源代码示例。 Servlet是Java平台上的一个标准接口,它允许开发者编写可被Web服务器调用的Java代码来处理...

    Servlet JSP深入详解 基于Tomcat的Web开发4

    Servlet JSP深入详解 基于Tomcat的Web开发4

    Servlet JSP深入详解 基于Tomcat的Web开发3

    Servlet JSP深入详解 基于Tomcat的Web开发3

    servlet/jsp深入详解 基于tomcat的web开发

    在本文中,我们将深入探讨Servlet和JSP技术,以及如何基于Tomcat服务器进行Web应用程序的开发。Servlet和JSP是Java EE(企业版)平台中用于构建动态网页的关键技术,而Tomcat则是一个广泛使用的开源Java Servlet容器...

    jsp servlet MVC Demo

    【JSP Servlet MVC 模式详解】 在Web开发领域,JSP(JavaServer Pages)、Servlet和MVC(Model-View-Controller)模式是常见的技术组合,用于构建动态、交互式的Web应用程序。本教程将深入探讨这三种技术以及它们在...

    Servlet JSP深入详解 基于Tomcat的Web开发2

    Servlet JSP深入详解 基于Tomcat的Web开发2

    Servlet详解Servlet详解

    Servlet 详解 Servlet 是 Java 语言中的一种服务器小程序,它可以与运行于客户端的 Applet 进行交互,也可以直接与 HTML 页进行交互。Servlet 的功能包括: 1. 与客户端 Applet 进行交互 2. 直接与 HTML 页进行...

    jsp servlet struts hibernate spring

    【标题】: "Java Web开发中的JSP、Servlet、Struts、Hibernate和Spring技术详解" 【描述】: "本文深入探讨Java Web开发中常见的技术,包括JSP、Servlet、Struts、Hibernate和Spring,讲解它们的工作原理和实用技巧...

    《Servlet JSP深入详解 基于Tomcat的Web开发》

    《Servlet JSP深入详解 基于Tomcat的Web开发》.孙鑫.part1,一共五部分

    北大青鸟Y2 JSP servlet 上机答案

    【北大青鸟Y2 JSP servlet 上机答案】 在IT教育领域,北大青鸟是一个知名的计算机教育品牌,其课程体系涵盖了广泛的IT技术,包括Java Web开发中的JSP(JavaServer Pages)和Servlet技术。JSP与Servlet是Java Web...

    JSP servlet通用学生管理系统.zip

    《JSP Servlet通用学生管理系统详解》 在信息技术领域,Web应用程序开发是不可或缺的一部分,而JSP(JavaServer Pages)和Servlet则是构建动态Web应用的重要工具。本系统——"JSP Servlet通用学生管理系统",旨在为...

    jsp servlet实例

    **三、Servlet_example_02实例详解** 这个例子可能包含以下几个部分: 1. **创建Servlet**:首先,我们需要创建一个Servlet类,重写`doGet()`或`doPost()`方法,以处理HTTP GET或POST请求。这些方法中可以实现业务...

    web练习题 jsp servlet

    以上是对题目中涉及的Web开发、Servlet和JSP相关知识点的详细解析,涵盖了会话管理、Servlet生命周期、请求处理、JSP内置对象以及JSP动作等方面的知识。这些内容是构建Web应用程序的基础,理解和掌握它们对于进行Web...

    JSPServlet新手学习资料

    **JSP和Servlet基础知识详解** ...理解并掌握这些基本概念对于JSPServlet新手来说至关重要,它们构成了开发Web应用的基础。在实际开发中,根据需求选择合适的方法,可以构建高效、功能丰富的Web应用。

    饮管理系统JSP+Servlet实现

    【标题】:“饮管理系统JSP+Servlet实现”详解 在当今信息化时代,餐饮行业的运营离不开高效、便捷的管理系统。本文将深入探讨一个基于JSP(JavaServer Pages)和Servlet技术实现的简易餐饮管理系统,该系统涵盖了...

    Servlet详解.pdf

    ### Servlet详解 #### 1. Servlet工作原理 Servlet是一种服务器端的小程序,主要用来处理HTTP请求并返回HTTP响应。Servlet由Servlet容器(如Tomcat、Jetty等)管理其生命周期,这种容器通常作为Web服务器的一部分...

    基于jsp+servlet的博客

    【基于jsp+servlet的博客系统】是一个典型的Web应用程序,它结合了JavaServer Pages(JSP)和Servlet技术,用于构建动态、交互式的博客平台。在这个系统中,JSP主要用于展示用户界面,而Servlet则承担了业务逻辑处理...

    JSP和Servlet公司培训课件

    **Servlet技术详解:** Servlet是Java平台上的一个标准API,用于扩展服务器的功能。它是服务器端的程序,负责处理客户端请求并生成响应。与JSP相比,Servlet更注重于控制逻辑,而JSP更擅长视图展示。 2. **Servlet...

Global site tag (gtag.js) - Google Analytics