
目录
1.Servlet简介
2.Servlet生命周期
3.Servlet 的配置
4.Servlet中的重定向和转发
6.过滤器
7.监听器
1.Servlet简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容,狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类
Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
1.客户端发送请求至服务器端;
2.服务器将请求信息发送至 Servlet;
3.Servlet 生成响应内容并将其传给服务器。
4.服务器将响应返回给客户端。
jsp和servlet的联系
2.Servlet生命周期JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑
Servlet更多的是类似于一个Controller,用来做控制。
Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法:
servlet生命周期可被定义为从创建直到毁灭的整个过程,以下是servlet遵循的过程:
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
- init()方法
在Servlet的生命周期中,仅执行一次init()方法,相当于java静态代码块
2. service()方法
它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用
3. destroy()方法
仅执行一次,在服务器端停止且卸载Servlet时执行该方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
3.Servlet 的配置Servlet不是网页文件,而是运行在服务器端的小程序,所在在form中 action时,不会有XXX.jsp这样的网页名称,而要指定Servlet服务小程序的名称。这时就要对Servlet进行配置 ,以便于Servlet的容器对小程序进行查找并运行。
4.Servlet中的重定向和转发Servlet1 服务器里的servlet小程序的名字servlet.Servlet1 服务器里的Servlet小程序的类Servlet1 服务器里的servlet小程序的名字/OK 网址里访问Servlet的路径
重定向: 相当于超链接
response.sendRedirect(String path)
转发: 相当于调用
request.getRequestDispatcher("success.jsp").forward(request,response);
5.cookie、session重定向和转发的区别
重定向发生两次请求;而转发只有一次。
转发不会改变访问的地址;而重定向会更改。
转发发生在服务器(不如servlet),重定向发生在客户端(浏览器)
重定向可以访问外部网站,转发只能访问内部资源
转发的性能要优于重定向
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie与Session。cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
cookie不仅可以使用ASCII字符与Unicode字符,还可以使用二进制数据。例如在cookie中使用数字证书,提供安全度。使用二进制数据时也需要进行编码。
cookie并不提供修改、删除 *** 作。如果要修改某个cookie,只需要新建一个同名的cookie,添加到response中覆盖原来的cookie。
如果要删除某个cookie,只需要新建一个同名的cookie,并将maxAge设置为0,并添加到response中覆盖原来的cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。
两者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,session就消失了)
一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie)
Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪
cookie是完全保持在客户端的如:IE firefox 当客户端禁止cookie时将不能再使用
import javax.servlet.http.cookie;
import java.io.IOException;
public class Servlet2 extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
request.setCharacterEncoding("UTF-8");//post方式提交,那必须要指定字符集。
String username=request.getParameter("name"); //接收传入的用户名
String password=request.getParameter("p1"); //接收登录界面传入的密码
cookie[] cookie =request.getcookies();
cookie ck=null;
for (int i=0;i
以上是在服务器端对cookie进行 *** 作。使用Javascript也可以在客户端对cookie文件进行 *** 作。
6.过滤器
顾名思义是起到过滤的作用,所有的请求在真正到达servlet之前都会首先经过过滤器过滤一遍。过滤器也是Servlet的一种 因此也有init和destroy方法,还有一个服务方法,只是这里提供的是过滤服务
一个Servlet要想成为过滤器需要实现javax.servlet.Filter接口
一般客户端发出请求后会交给Servlet;如果过滤器存在,则客户端发出的请求都是先交给过滤器,然后交给Servlet
必须实现以下方法:
1.public void init(FilterConfig config) throws ServletException{
// init方法在Web容器启动时就会调用;
}
- public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){// doFilter的参数是ServletRequest和ServletResponse而不是Http的;
- }
3.public void destroy(){
//应用被关闭时调用
}//向多个过滤器及后面的servlet传递请求,否则servlet无法执行
写完过滤器后,我们必须要限制过滤器调用的范围,即域名为多少时会调用过滤器,
我们在web.xml 中进行配置
myFilter
com.lq.Filter.Myfilter
myFilter
//取Session中的用户列表
List online=(List) this.application.getAttribute("online");
String username=(String) se.getSession().getAttribute("username");//获取用户名
online.remove(username);//从列表中删除用户
application.setAttribute("online",online);//将删除的列表重新设置到application中.
}
public void contextDestroyed(ServletContextEvent sce) {
}
public void sessionCreated(HttpSessionEvent se) {
}
public void attributeRemoved(HttpSessionBindingEvent sbe) {
}
public void attributeReplaced(HttpSessionBindingEvent sbe) {
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)