`
lgl669
  • 浏览: 173814 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java Servlets(二)

    博客分类:
  • java
阅读更多

资源跳转的方式
(内部跳转:forward和include,外部跳转:sendRedirect)
  1)forward
    forward后的响应内容由所请求的资源给出
     RequestDispatcher rd=request.getRequestDispatcher("SuccessServlet");
     request.setAttribute("userinfo", "new User()");
     rd.forward(request, response);
  2)include
    inclue后的响应内容由其本身给出
out.println("<html><body>");
RequestDispatcher rd = request.getRequestDispatcher("/ch04/header");
rd.include(request,response);
out.println("</body></html>");
  forward和include的相同点:
    绝对路径中/都是web应用
    服务器内跳转,客户端地址栏无变化
    都是同一个请求
  3) sendRedirect
    客户端地址栏发生变化
    两次请求,request范围内设置的所有属性将失效
response.sendRedirect("ShowInfo");
/指代 响应内容 地址栏 请求 跨应用
forward
web应用 请求资源 不变 一次 不能
include
web应用 本身 不变 一次 不能
sendRedirect
服务器 请求资源 变化 两次 能
web应用:  http://localhost:8080/hello
服务器:     http://localhost:8080
<form action="/...">,<a href="/...">:"/"指代服务器
注:能用forward方式,就不要用sendRedirect
1)从性能
2)从对服务器内部资源的保护(地址栏内能否显示服务器资源URL)
考虑
保护服务器资源
1)使用Filter对请求进行过滤
2)把要保护的资源方到WEB-INF下,客户端浏览器不能直接访问该目录下
的资源,我们可以通过Servlet等访问
设置属性的四个范围:
范围 对应类 Jsp内建对象
javax.servlet.ServletContext application
应用级别 针对整个web应用
javax.servlet.http.HttpSession session
会话级别 针对一次会话
javax.servlet.http.HttpServletRequest request
请求级别 针对一次请求
javax.servlet.jsp.PageContext page
页面级别 针对一个页面
注:一个application可以跨越多个session,一个session可以跨越多个request,
一个request可以跨越多个page;
实际项目开发中,从性能、占用资源角度考虑,优先使用小级别的;
获取RequestDispatcher
1)HttpServletRequest.getRequestDispatcher(...):相对/绝对路径
2)ServletContext.getRequestDispatcher(...):绝对路径
注:这里的相对是绝对,/表示web应用(如http://localhost:8080/hello)
3)ServletContext.getNamedDispatcher(...):根据servlet的名字获取
------------------------------------------------------------------------------------------
forward之前不能pw.flush();
------------------------------------------------------------------------------------------
外部跳转:让浏览器重新发送一个新的请求,跳转前后不是同一个请求;访问前后路径不同;
------------------------------------------------------------------------------------------
总结:
forward:内部跳转或则是服务器内部重定向;
servlet1-------forward-----servlet2
servlet1和servlet2中的request对象是同一个。
sendRedirect:外部跳转或则服务器外部重定向;
servlet1-------sendredirect-----servlet2
servlet1和servlet2中的request对象不是同一个。
作外部跳转调用response的sendRedirect方法,这个方法中传入的路径可以是相对的,也可以是绝对的;
相对的跟forward相同;
绝对的:应用路径+servlet url-pattern(这点和内部跳转是不同的);
------------------------------------------------------------------------------------------
四、在tomcat中配置数据源
  1)Admin登录,找到项目
  2)创建Data Source
    JNDI Name:  jdbc/oracle
    URL:  jdbc:oracle:thin:@192.168.1.200:1521:briupdb
    Driver:  oracle.jdbc.driver.OracleDriver
    User:  briup
    Password:  briup
  3)web.xml中配置资源引用(可选,新版本的tomcat不需要配置)
    <resource-ref>
  <description>
Oracle Datasource example
</description>
  <res-ref-name>jdbc/oracle</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
    </resource-ref>
  4)Context ctx = new InitialContext();

     DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
  注:配置数据源之后,在Tomcat/config/Catalina/..目录下会新建一个xml文件,
  里面存放数据源相关的信息
五、持久化状态:Cookie,Session
HTTP协议是无状态的,为了保存会话状态,我们有两种解决方案:
1、Cookie,把会话状态信息保存在客户端
2、Session,把会话状态信息保存在服务器端
Cookie:保存一些键/值对,到客户端浏览器
  name:briup
  password:briup
使用Cookie:
  1)创建Cookie
     Cookie cookie = new Cookie("name","value");
  2)将Cookie加到客户端浏览器
    HttpServletResponse.addCookie(cookie);
  3)在服务器端取出Cookie(返回Cookie[ ])
    HttpServletRequest.getCookies();
    Cookie.getName();
    Cookie.getValue();
  会话Cookie:只在当前会话起作用的Cookie
  持久Cookie:保存在客户本地一段时间的Cookie
  设置Cookie的时长:Cookie.setMaxAge(int second),单位秒
  设置Cookie的有效路径:Cookie.setPath(...)
  Cookie:由服务器创建,但是存放在客户端;
  Cookie cookie=new Cookie(name,value);
  cookie.setMaxAge(timeout);
  当timeout<0时,意味着这个cookie只要浏览器关闭就会消失;
  当timeout=n(n>0)时,意味着cookie将会在客户端被保存n秒;
  当timeout=0时,意味着这个cookie将会被删除;
  name相同的cookie会被覆盖.
  response.addCookie(cookie);
  服务器端获得客户端传过来的cookie:Cookie[] cookies=request.getCookies();
Session:
  获取Session的方法:
    HttpServletRequest.getSession()<==>HttpServletRequest.getSession(true)
    如果客户和服务器已经建立起会话,直接使用已有的Session对象,
    如果没有建立,就新建一个Session对象
    HttpServletRequest.getSession(false);
    设置属性:HttpSession.setAttribute("name",Object);

    获取属性:HttpSession.getAttribute("name");
    删除属性:HttpSession.removeAttribute("name");
  使用Session来保存会话信息,在客户端也要留下一个标识,一般用JSESSION表示
  在用户禁用Cookie时使用Session方式在服务器端维持会话状态,在客户端要留一个Session的id号,
  优先使用Cookie的JSESSIONID存放,如果禁用了Cookie,URL重写的Session id号会被追加到
  浏览器地址中URL的后面,用jsessionid表示
    (http://localhost:8888/servlet/ch5/urlcounter;jsessionid=9FFA9CCB7D86134E0256E94D05E6DC44)
    重写:String encodedURL = response.encodeURL("/servletjd0710/ch05/UrlBasedCounterServlet");
  Session什么时候失效?
    1:程序中调用HttpSession.invalidate()方法
    2:Session过期,在Session的最大有效时间以外
    3:关闭应用服务器
  设置Session的有效时间:
    1:HttpSession.setMaxInactiveIntervale(int second) 单位秒
    2:在web.xml中进行配置
    <session-conf>
<session-timeout>...</session-timeout><!-- 单位分钟 -->
    </session-conf>
注意:当程序中和web.xml中都设置了Session的有效时间时,以程序中的设置为准

分享到:
评论

相关推荐

    JavaServlets帮助文档

    JavaServlets帮助文档JavaServlets帮助文档JavaServlets帮助文档JavaServlets帮助文档JavaServlets帮助文档JavaServlets帮助文档JavaServlets帮助文档

    Murach's Java Servlets and JSP 2nd Edition 源代码

    《Murach's Java Servlets and JSP 2nd Edition》是一本深受欢迎的Java Web开发教程,涵盖了使用Servlets和JSP进行动态网页编程的核心知识。源代码是学习过程中的重要辅助材料,它能帮助读者深入理解书中的实例,...

    Java Servlets和java swing

    Java Servlets和Java Swing是Java开发中的两个重要技术领域,分别用于Web服务器端和桌面应用程序的开发。 **Java Servlets** Java Servlets是Java平台上用于扩展Web服务器功能的Java类。它们是Java EE(企业版)的...

    Java.Servlets.编程指南.zip

    Java Servlets是Java EE平台中的一个核心组件,用于构建动态Web应用程序。Servlets是一个服务器端的Java类,它扩展了Web服务器的功能,使得服务器能够处理HTTP请求并返回响应。本编程指南将深入探讨Java Servlets的...

    Murach's Java Servlets and JSP, 2nd Edition.文字版--part2

    Murach's Java Servlets and JSP, 2nd Edition.高清文字版,并加入了书签--part2

    Java Servlets编程指南

    Java Servlets编程指南

    Murach's Java Servlets and JSP, 2nd Edition.文字版--part1

    Murach's Java Servlets and JSP, 2nd Edition.高清文字版,并加入了书签--part1

    Java.Servlets编程指南

    第1章 servlet概述第2章 Java Web服务器第3章 第一个servlet 第4章 servlet链第5章 servlet-side Includes 第6章 会话管理第7章 安全性 第8章 HTML表单第9章 在servlet中使用JDBC 第10章 applet与servlet的通信第11...

    Murach-s-Java-Servlets-and-JSP, 3rd.pdf

    Murach's Java Servlets and JSP, 3rd Very good introduction on servlet and jsp.

    Java Servlets 参考大全源代码

    这个压缩包文件集合包含了一系列与Java Servlets相关的源代码示例,覆盖了多个章节,从基础到进阶,帮助开发者深入理解并实践Servlets编程。 首先,我们来看看每个章节的主题可能涉及的知识点: 1. **chapter05....

    Static Analysis for Java Servlets and JSP.pdf

    ### 静态分析在Java Servlets与JSP中的应用 #### 概述 本文档主要探讨了如何通过静态分析技术来确保基于Java Servlets和JSP开发的Web应用程序的行为符合预期。具体而言,该研究关注于两个核心问题:一是确保所有...

    Java Servlets编程指南,相当不错的sservlets入门教程.rar

    本教程的压缩包文件"JavaServlets_shishuo.chm"很可能包含了详细的章节,讲解了上述知识点。通过阅读,你将能够理解和实践Servlets编程,为Java Web开发打下坚实基础。建议结合实际项目进行学习,以便更好地理解和...

    Murach's Java Servlets And JSP 2nd Edition

    ### Murach's Java Servlets and JSP 第二版 关键知识点概述 #### 一、绪论:Java Web 开发入门 - **Java Web 开发概述**:本书首先介绍了使用 Java 进行 Web 开发的基本概念,包括 Java 在 Web 开发中的角色以及...

    Java_for_the_Web_with_Servlets

    ### Java for the Web with Servlets: A Comprehensive Overview #### Introduction "Java for the Web with Servlets, JSP, and EJB: A Developer’s Guide to J2EE Solutions" by Budi Kurniawan is a ...

    Java开发指南-Servlets和JSP篇下载

    Java开发指南-Servlets和JSP篇是一份深入讲解Java Web开发的重要资料,主要涵盖了Servlets和JSP(JavaServer Pages)这两个核心技术。在Web应用开发领域,Servlets和JSP是构建动态网站和Web服务的基石,尤其对于后端...

Global site tag (gtag.js) - Google Analytics