`

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,完成业务。


其他看附件
分享到:
评论

相关推荐

    Tomcat开发JSP和Servlet需要注意的问题.doc

    在使用Tomcat开发JSP和Servlet时,需要注意一些关键点以确保程序的正确运行和优化。以下是根据提供的文件内容整理的一些重要问题和解决方案: 1. **创建Tomcat项目**: - 在Eclipse等集成开发环境中,需要创建一个...

    servlet线程安全问题

    Servlet 线程安全问题是指在使用 Servlet 编程时,如果不注意多线程安全性问题,可能会导致难以发现的错误。Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性...

    servlet知识点集锦

    ### Servlet知识点集锦 #### 一、Servlet简介与工作原理 **Servlet** 是Java平台上的一个重要的技术,它主要用于开发动态网页。Servlet是运行在服务器端的Java类,它可以接收客户端(例如浏览器)发送的HTTP请求,...

    Servlet常用语法Demo

    Servlet是Java Web开发中的...这个"Servlet常用语法Demo"实例将覆盖以上知识点,并提供具体的代码示例,帮助初学者快速上手Servlet开发。通过学习和实践这些示例,你将能够更好地理解和应用Servlet在实际项目中的功能。

    Servlet知识点和示例

    开发者可以自定义默认Servlet,但需要注意,这可能会影响静态资源的正常访问。 使用ServletContext对象,开发者可以存储和检索全局配置信息,例如数据库连接参数,这些可以在XML配置文件中设置,然后通过...

    servlet-api.jar 下载地址

    注意,由于`<scope>provided</scope>`设置,Maven不会将此jar打包到最终的WAR文件中,因为它假定目标服务器已经提供了Servlet API。 6. **现代Web应用开发** 随着Spring Boot和微服务架构的流行,直接编写Servlet...

    servlet3.0与mybatis整合的示例

    本文将深入探讨如何将Servlet3.0与MyBatis整合,以及这个过程中的关键知识点。 一、Servlet3.0新特性 1. 注解配置:Servlet3.0引入了注解,允许开发者在类或方法级别声明Servlet、过滤器和监听器,无需在web.xml中...

    Servlet3.1规范官方文档(中文版)

    根据提供的文件内容,以下是对Servlet3.1规范官方文档(中文版)中的知识点的详细说明。 首先,Servlet3.1官方文档是Java™ Servlet规范版本3.1的中文翻译版本。它详细描述了servlet技术规范的各个方面,包括对...

    servlet+vue后端代码

    **安全注意事项:** 1. **密码加密**:为了保护用户信息安全,密码通常会在前端进行哈希处理,然后发送到后端进行验证,而不是明文传输。 2. **权限控制**:登录成功后,后端应返回一个令牌或Session ID,前端将其...

    Servlet技术入门教学

    由于Servlet实例默认是多线程的,因此在编写Servlet时需要注意线程安全问题。例如,避免在Servlet实例中使用非线程安全的全局变量。 7. **Servlet的异步处理**: 自Java Servlet 3.0版本开始,Servlet支持异步...

    com.oreilly.servlet

    9. **多线程安全**:Servlet默认是线程安全的,这意味着多个请求可能会并发地在同一个Servlet实例上执行,因此开发者需要注意同步和资源管理,以避免潜在的线程安全问题。 10. **性能优化**:通过使用Servlet的异步...

    [转]Servlet3特征 异步Servlet

    然而,需要注意的是,如果异步任务抛出未捕获的异常,Servlet容器通常会将其记录并关闭异步上下文,因此必须对可能出现的异常进行适当处理。 总的来说,Servlet3的异步特性为Java Web开发带来了新的活力,让开发者...

    servlet-2_4-fr-spec-doc.rar_doc_servlet 2.4 spec_servlet api_ser

    以下是关于Servlet 2.4规范和API的一些关键知识点: 1. **Servlet生命周期**:Servlet的生命周期包括初始化、服务和销毁三个阶段。初始化阶段通常在Servlet首次被请求时发生,此时会调用`init()`方法。服务阶段处理...

    纯Servlet实现用户管理系统(入门实例,深刻认识Servlet)

    注意,为了防止SQL注入,应使用预编译的PreparedStatement。 7. **异常处理**:在处理用户请求时,Servlet可能会遇到各种异常,如网络问题、数据库错误等。我们需要适当地捕获和处理这些异常,确保系统稳定性,并向...

    Servlet框架基本源码

    开发者需要注意在处理并发请求时的数据共享问题,避免潜在的线程安全风险。 6. **Servlet的拦截器与过滤器** 在Servlet框架中,Filter(过滤器)可以拦截请求和响应,进行预处理或后处理,比如字符编码转换、权限...

    Servlet解读

    需要注意的是,如果开发者覆盖了`service()`方法,则需要手动调用`doGet()`或`doPost()`。 **2. 处理请求** - 在`doGet()`或`doPost()`方法中,开发者可以编写逻辑来处理请求并生成响应。 - Servlet可以通过`...

    servlet源代码

    以下是对Servlet的一些关键知识点的详细解释: 1. **Servlet概述**: Servlet是一种Java类,用于扩展服务器的功能。它们主要用于处理HTTP请求,可以接收和响应来自客户端(如Web浏览器)的请求,并返回相应的数据...

    servlet导入导出excel

    注意批量插入可以提高性能。 7. **错误处理和反馈**:在整个过程中,应捕获可能的异常,如文件读取错误、数据库连接问题或SQL执行失败等,并向用户返回适当的错误信息。 接下来,我们来看看如何导出Excel数据: 1...

    手工开发Servlet的步骤

    手工开发Servlet涉及一系列步骤,以下将详细讲解这些步骤,并涵盖开发过程中需要注意的关键点。 **步骤一:创建Servlet类** 首先,我们需要创建一个继承自`javax.servlet.Servlet`或`javax.servlet....

Global site tag (gtag.js) - Google Analytics