首页 > 其他 > 详细

Servlet的详细使用

时间:2016-02-25 17:13:53      阅读:259      评论:0      收藏:0      [点我收藏+]

1servlet是一个单例

Servlet相关类

请求:HttpServletRequest 

响应:HttpServletResponse 

Servlet上下文:ServletContext 

Servlet配置相关:ServletConfig 

Servlet异常类:ServletException 

会话跟踪:HttpSession 

请求转发器:RequestDispatcher 

Cookie:Cookie


 2HttpServletRequest 方法的使用

String request.getParameter(表单元素名);

        String [] request.getParameterValues(表单元素名);

String request.getRemoteAddr()//获取客户端ip

String request.getScheme()//获取协议名

String request.getServletName()//获取ip或机器名或域名

String request.getServletport()//获取端口号

String request.getContextPath()//获取上下文路径名

String request.getQueryString()//获取请求字符串

String request.getCharacterEncoding()//设置request对象的数据字符集


4servletContext对象  this.getServletContext();在应用程序中,所servlet都可以使

ServletContext接口中,有两个方法可以用来获得初始化参数:
 getInitParameter//通过参数名获取对应一个的参数的值
 getInitParameterNames//是用枚举值来获取的

技术分享

web.xml中设置初始化值

技术分享

ServletContext中,有4个方法可以用来设置和管理ServletContext的属性:
 setAttribute
 getAttribute
 getAttributeNames
removeAttribute

5ServletConfig对象被<servlet></servlet>包围住

技术分享

一个由servlet容器使用的servlet配置对象,用于在servlet初始化时向它传递信息

getServletName()方法概述:public java.lang.String getServletName()
    该方法返回一个servlet实例的名称,该名称由服务器管理员提供。

getServletContext()方法概述:public ServletContext getServletContext()
    返回一个ServletContext对象的引用。

    getInitParameter()方法概述:

public java.lang.String getInitParameter(java.lang.String name)
    返回一个由参数String name决定的初始化变量的值,如果该变量不存在,返回null

    getInitParameterNames()方法概述:

public java.util.Enumeration getInitParameterNames()
    返回一个存储所有初始化变量的枚举函数。如果servlet没有初始化变量,返回一个空枚举函数。

最后,该ServletConfig接口由GenericServlet类实现。

6组件间的关系就是指servletjsp之间,servletservlet之间及jspjsp之间的关系

组件间的关系有三种

第一种:重定向:HttpServletResponse: sendRedirect(String url);

如:response.sendRedirect("http://www.baidu.com");

response.sendRedirect(request.getContextPath()+"index.jsp");

重定向相当于在客户端浏览器地址栏中输入新地址,发送新请求也就是说重定向发生在客户端。

地址栏发生变化两个web组件间不共享request

第二种:求转发RequestDispatcher: forword(HttpServletRequest, HttpServletResponse);

如:request.getRequestDispatcher("url").forward(request, response);

请求转发 发生在服务器端一个web组件(:servlet)接收到一个请求后,自身不做处理,而是转发后另一个web组件(:servlet)处理在服务端完成

客户端地址栏地址不发生变化;两个web组件间共享request

请求转发与重定相比请求转发相当于只是一个请求;效率更高。

第三种:包含:RequestDispatcher: include(HttpServletRequest, HttpServletResponse);

如:request.getRequestDispatcher("url").include(request, response);

包含是指一个web组件将另一个web组件的结果插入到包含语句处实现组件内容合并。两个web组件间共享request

 

7Servlet中的数据作用域(即数据范围对象的使用)

HttpServletRequest: request

HttpSession: session

ServletContext: application

 

数据作用域(request)

客服端发送一个请求到服务端时产生,服务端处理完这个请求时结束

相关方法:

public void setAttribute(String var, Object obj);

var 作用域变量名; obj 作用域变量对应的值;

public Object getAttribute(String var);

var 作用域变量名;

Public void removeAttribute(String var);

var 作用域变量名;

 

数据作用域(session)

(HttpSession) session产生后在session的有效期内有效

每个客服端独享自己一个session对象

相关方法:

§ get/set/removeAttribute()  //操作属性的方法

§ getCreateTime()  //毫秒,1970-01-01为起点 获取Session创建时间;

§ getLastAccessedTime(); //(单位:毫秒获取最后一次访问的时间;

§ setMaxInactiveInterval(-1); //(单位:设置超时时间;

§ getMaxInactiveInterval(); //(单位:获取超时时间;

§ isNew(); //判断是否是新创建的;

§ invalidate(); //注销Session Session对象与用户断开;

§ getServletContext(); //获取上下文对象;

 

数据作用域(application)    this.getServletContext()

(ServletContext) application用来存储和获取当前应用内的变量;

对所有客服端共享; web应用加载时启动时候产生web应用关闭时消亡

可以理解成Servlet容器环境信息构成了一个ServletContext 

相关方法

§ Set/get/removeAttribute(); //操作作用域的变量;

§ getRequestDispatcher(String) //获取转发器;

§ getRealPath(String) //获取绝对路径;

8Cookie

Cookie是服务器端或javascript用于维护客户端的一种方式;Cookie是驻留在客户端的一个文本文件;

作用:在客户端保存用户相关信息

通过HttpServletRequest对象获取客户端的Cookie信息 : getCookies()

 通过HttpServletResponse对象往客户端添加Cookie信息 : addCookie(Cookie)

Cookie类相关方法:

§ set/getName()

§ set/getValue()

§ set/getMaxAge()失效时间   单位秒

§ set/getPath()适用的路径

set/getDomain()适用的域名

写入Cookie一般都setPath(/)这样就能访问到了

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

  Cookie cookie1=new Cookie("login_name","admin");

  cookie1.setMaxAge(60*60*24*360);

  Cookie cookie2=new Cookie("login_pwd","123456");

  cookie2.setMaxAge(60*60*24*360); 

  Cookie cookie3=new Cookie(“login_sex”,java.net.URLEncoder.encode(,“gb2312”)); //中文要转编码.

  cookie3.setMaxAge(60*60*24*360); 

  response.addCookie(cookie1);

  response.addCookie(cookie2);

  response.addCookie(cookie3);

}


读取Cookie

Cookie[] cookies = request.getCookies();

  for (int i = 0; i < cookies.length; i++) {

    out.println(cookies[i].getName() + " = ");

    out.println(cookies[i].getValue());

    // 如果值为中文 需要解码

    // out.println(java.net.URLDecoder.decode(cookies[i].getValue(),”GBK”);

    out.println("<br>");}

9Servlet过滤器,mapping可以写多个

在要取得数据的情况下要转化requestresponse,编码可以不要

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain arg2) throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletResponse httpResponse=(HttpServletResponse)response;

HttpServletRequest httpRequest=(HttpServletRequest)request;

}

Servlet过滤器是Servlet的一种特殊用法,是实现了javax.servlet.Filter接口的服务器端程序。主要用来完成一些通用的操作。比如编码的过滤,判断用户的登陆状态等一些业务逻辑判断等等。

过滤器是一个程序,它先于与之相关的servletJSP页面运行在服务器上。过滤器可附加到一个或多个servletJSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择: 
①以常规的方式调用资源(即,调用servletJSP页面)。 
②利用修改过的请求信息调用资源。 
③调用资源,但在发送响应到客户机前对其进行修改。 
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。 

工作原理

只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(RequestResponse)统一设置编码,简化操作;

同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。

它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁 。

我们使用了两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,那这两个过滤器是怎么起作用的呢?它们两个同时过滤一个请求时谁先谁后呢?

服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。执行的顺序就如上图所示,执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤器的chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。

 

Servlet过滤器接口的构成: 
所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法: 
init(FilterConfig cfg): 

这是Servlet过滤器的初始化方法,性质等同与servletinit方法。 
doFilter(ServletRequest,ServletResponse,FilterChain): 

完成实际的过滤操作,当请求访问过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器 
destroy(): 

Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源。,性质等同与servletdestory()方法。 


Servlet过滤器的创建步骤: 
A.实现javax.servlet.Filter接口的servlet类 
B.实现init方法,读取过滤器的初始化函数 
C.实现doFilter方法,完成对请求或过滤的响应 
D.调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应 
F.web.xml中配置Filter

 

10的监听器

ListenerServlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1

J2EE监听器和J2SE事件处理中监听器一样,用于监视事件动作;

J2EE监听器类别:

§ 请求监听器:

    ServletRequestListenerServletRequestAttributeListener 

§ HttpSession监听器:

   HttpSessionListener

   HttpSessionAttributeListener 

§ Servlet上下文监听器:

   ServletContextListenerServletContextAttributeListener 

监听器(部署运行)

<listener>

<listener-class>

com.sf.listener.RequestListener 

</listener-class>

</listener>




Servlet的详细使用

原文:http://wahahahaha.blog.51cto.com/7054641/1744947

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!