Servlet注意点

1:application和ServletContext的关系
application是JSP九大隐式对象之一,所谓JSP隐式对象就是不需要你自己去new,就存在于页面上的对象。appleiction就是javax.servlet.ServletContext类的实例。

ServletContext application = null;
application = pageContext.getServletContext();

2.request.getParameterValues与request.getParameter的区别:
request.getParameterValues(String   name)是获得如checkbox类(名字相同,但值有多个)的数据。   接收数组变量,如checkobx类型    
request.getParameter(String   name)是获得相应名的数据,如果有重复的名,则返回第一个的值. 接收一般变量,如text类型
注意:Enumeration enu=request.getParameterNames();//获得所有的参数名

3.ServletContext与ServletConfig的区别
ServletContext用于当前虚拟共享,简称上下文
ServletConfig用于单个servlet初始化参数
ServletConfig一般只用于获取Servlet的初始化参数,而ServletContext的作用是与Web Container交互,除了可以用于获取Web Application的全局初始化参数外,还可以获取Servlet的元数据,设置共享属性,获取属性值,获取外部资源等,另外当Web Application使用分布式部署时(在web.xml 中使用distributable元素)ServletContext的作用范围就只有单个虚拟机而不是整个Web Application

4.重定向:URL重写,Cookie,隐藏表单域以及HttpSession
    URL重写:XXX.jsp?id=123
    隐藏表单域:通过hidden,在另外一个页面获取request.getParameter(obj);
    Cookie:Cookie myCookie=new Cookie("code",""+validationCode);
           response.addCookie(myCookie);
           获取:Cookie cookies[] = request.getCookies();
           遍历cookies,比对code=cookies[i].getValue();
    Session:httpSession session=request.getSession();
            setAttribute("code",validationCode);
            HttpSession session=request.getSession();
            session.getAttribute("code");
5.获取路径
JSP中获得当前应用的相对路径和绝对路径:
根目录所对应的绝对路径:request.getRequestURI()
文件的绝对路径:application.getRealPath(request.getRequestURI());
当前web应用的绝对路径 :application.getRealPath("/");
取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent();

Servlet中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径:request.getSession().getServletContext().getRealPath
(request.getRequestURI());  
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
ServletContext对象获得几种方式:
       Javax.servlet.http.HttpSession.getServletContext()
       Javax.servlet.jsp.PageContext.getServletContext()
       Javax.servlet.ServletConfig.getServletContext()

例如:
servlet中几个获取路径方法的对比
如果请求的URL为:http://localhost:8080/webapp/login
那么分别调用request.getContextPath( )、request.getServletPath( ) 、
request.getURI( )、request.getURL( )分别返回什么路径?
这几个方法都是在HttpServletRequest接口中定义的。

1.request.getURI( )返回HTTP请求行中请求URI的部分。上例中该方法将返回/webapp/login。

2.request.getContextPath( )返回web应用程序的路径,上例中该方法将返回/webapp。

3.request.getServletPath( ) 返回Servlet的路径。上例中该方法将返回/login。

4.request.getURL( )返回请求的URL,上例中即为http://localhost:8080/webapp/login


encodeURL
response.sendRedirect(response.encodeURL(url))的好处就是他能将用户的session追加到网址的末尾,也就是能够保证用户在不同的页面时的session对象是一致的.
这样做的目的是防止某些浏览器不支持或禁用了COOKIE导致session跟踪失败 。
通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器不支持 cookies,或者将浏览器设置为不接受 cookies,我们可以通过 URL 重写来实现会话管理。
  实质上 URL 重写是通过向 URL 连接添加参数,并把 session ID 作为值包含在连接中。然而,为使这生效,你需要为你的 servlet 响应部分的每个连接添加 session ID 。
   把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 来对 URL 进行编码。
  encodeURL () 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;如果支持,则参数 URL 被原样返回,session ID 将通过 cookies 来维持。
注意,如果你想让这个例子能在关闭了 cookies 的浏览器中工作,你的 JSP 引擎必须支持 URL 重写。

一句话:在客户端禁用了cookie后,如果不用这个方法来ecnode一下URL,那么session就无法使用。 加了此方法后会在地址后面添加一个jsession=*******的信息,即使客户端没有开cookie,依然能通过此信息来找到session,完成业务。


其他看附件

你可能感兴趣的:(jsp,Web,应用服务器,servlet,浏览器)