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

servlet 三

阅读更多
一、连接池
在应用的META-INF文件夹下context.xml文件中
<Context>
   <Resource
      name="jdbc/oracle" 配置JDNI的名字
      type="javax.sql.DataSource" 绑定资源的类型
      password="sd0605"
      driverClassName="oracle.jdbc.driver.OracleDriver" 驱动名
      maxIdle="1"最大连接数
      maxWait="-1"等待时间,配置为-1就是无限等待,只到有空闲连接为止
      username="sd0605"
      url="jdbc:oracle:thin:@192.168.0.39:1521:TARENADB"
      maxActive="3" 最大活动连接数/>
</Context>     

以下是从连接池去取数据库连接的代码
public static Connection getConnection(String JNDIName){
Connection conn = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env"); //这个是在tomcat下默认绑定Context的JNDIname
DataSource ds = (DataSource) envCtx.lookup(JNDIName);
conn = ds.getConnection();
} catch (NamingException ne){
ne.printStackTrace();
} catch (SQLException se){
se.printStackTrace();
}
return conn;
}


二、Java EE编程分层
   表现层,业务层,数据层。
表现层,也就算用来显示数据,接受数据的。JSP,Servlet
业务层,是处理核心业务的程序 EJB,JDBC(Hibernate)
数据层,也就是数据库,用来存放数据。Oracle,SQLServer

   MVC框架
Model,模型层,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息,
      可以使用JDBC或者Hibernate实现这一层的功能。
Ctrl,控制曾,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用Servlet来实现这一层,
      不过一般是会用开源的MVC框架来实现这层,例如struts,或者是Spring的MVC框架。
View,表现层,他只用来显示数据和收集必要数据,收集数据的一般是form表单,不过要保证数据的正确性要是用JavaScript验证信息,以后我
      们会学到的JSP(java server page)就是用来表现、显示数据的。
     
三、Servlet的控制流转
ServletContext,Servlet上下文对象,在每个Servlet中都会有一个ServletContext的引用,这个ServletContext是一个全局的对象,每个应用
               中只有一个ServletContext对象。
HttpServlet中的getServletContext()方法,获得ServletContext对象。
ServletContext类的getRequestDispatcher(String path)方法获得一个RequestDispatcher对象,并且跳转到指定的Servlet,
              getRequestDispatcher(String path)方法中的参数就是path,就是指定跳转的Servlet的url-pattern。
RequestDispatcher类的forward(ServletRequest request, ServletResponse response) 方法,可以把请求对象转发给其他的Servlet。
     
include用在v层
forward用在c层

ServletRequest.getRequestDispatcher();  //relative     
ServletContext.getRequestDispatcher();  //absolute

一个Servlet对应一个Config,不能互相读取
要想让所有的Serlvet都能读到参数:配置Context初始化参数,或者配置JNDI Naming的初始化参数                    

(1)配置Context容器的初始化参数
<context-param>
   <param-name>email</param-name>
   <param-vlaue>liyan@tarena.com.cn</param-vlaue>
</context-param>

在servlet的使用
getSevletContext().getInitParameter("email");

(2)配置JNDI Naming的初始化参数
<env-entry>
   <env-entry-name>email<env-entry-name>
   <env-entry-type>java.lang.String<env-entry-type>
   <env-entry-value>liyan@tarena.com.cn<env-entry-value>
</env-entry>

使用,得到初始化参数
Context ctx = new InitialContext();
String email = (String)ctx.lookup("java:comp/env/email");


四、会话
会话是可以保存状态的

Session(会话)和Cookie(会话跟踪机制)

Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建,
但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通
过Session对象的
setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。

public void service(ServletRequest request,ServletResponse response){

String user = request.getParameter("user");
        String pass = request.getParameter("pass");
HttpSession session = request.getSession(true);//使用请求对象来创建Session
        session.setAttribute("username", user);
        session.setAttribute("passwd", pass);
}


getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个
Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。

注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。
大数据量的传输或保存不适合使用Session空间。

Cookie,是记录用户的Session信息,也可以记录用户的请求信息,也就是SessionID,来分辨哪一个用户是否登陆过。在每次登陆时,
还会将Cookie发送回服务器端,Cookie是用来跟踪Session的。

public void service(ServletRequest request,ServletResponse response){

String user = request.getParameter("user");
        String pass = request.getParameter("pass");
Cookie userCookie = new Cookie("user", user);
        userCookie.setMaxAge(60 * 60 * 24 * 365);//设置Cookie的最大有效期,秒为单位
        Cookie passCookie = new Cookie("pass", pass);
        passCookie.setMaxAge(60 * 60 * 24 * 365);
        response.addCookie(userCookie);
        response.addCookie(passCookie);

}
分享到:
评论

相关推荐

    servlet3 api 文档

    Servlet3 API文档是Java Web开发领域中的重要参考资料,它详细阐述了Servlet的相关接口、类以及方法,为开发者提供了全面的指南。Servlet技术是用于构建动态Web应用程序的核心组件,它允许服务器端处理HTTP请求并...

    Servlet3-sources-code

    **Servlet3源码解析** Servlet技术是Java Web开发中的核心组件,它允许开发者编写服务器端程序来处理HTTP请求。Servlet3.0是Servlet规范的一个重要版本,引入了许多新特性和改进,大大提升了开发效率和应用的灵活性...

    正在研究servlet3的朋友们,有谁需要servlet3 api(英文版)的吗, 见附件

    Servlet3是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,提升了Web应用程序的灵活性和可扩展性。这篇博文分享了Servlet3的API英文版资源,对于学习和理解Servlet3规范有着重要的参考...

    test-servlet3-without-webxml.rar

    在Servlet 3.0之前,我们通常需要一个`web.xml`部署描述符文件来配置Servlet,但在Servlet 3.0之后,我们可以实现"无web.xml"的部署方式,这就是`test-servlet3-without-webxml.rar`这个压缩包文件所体现的主题。...

    Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】

    Servlet3.0是Java Servlet API的一个重大更新,它引入了许多新特性和改进,极大地提高了开发效率和应用程序的性能。在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及...

    [转]Servlet3特征 异步Servlet

    Servlet3是Java Web开发中的一个重要里程碑,它引入了许多新特性,极大地提升了Web应用程序的性能和灵活性。在这篇文章中,我们将深入探讨Servlet3的一个关键特性——异步Servlet处理,以及它如何改变了传统的请求-...

    IDEA下maven新建servlet3.x/web3.x工程模版

    本篇文章将详细介绍如何在IDEA中利用Maven创建一个基于Servlet 3.x和Web 3.x标准的工程模板。 首先,我们需要了解Servlet 3.x和Web 3.x的概念。Servlet 3.x是Java Servlet API的一个版本,它引入了许多新特性,如...

    servlet3-API 英文版chm

    servlet3-API 英文版chm格式

    servlet-3_1-final.rar_java servlet3_servlet 3.1 demo

    除了注解之外,Servlet 3.1还允许在类路径下的META-INF/web-fragment.xml文件中进行配置,使得第三方库可以提供自己的配置元数据,而无需直接修改应用的web.xml。 总结,Servlet 3.1为Java Web开发带来了诸多创新和...

    Servlet3 学习测试代码

    Servlet3是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。在这个"Servlet3 学习测试代码"压缩包中,我们可以找到与Servlet3相关的示例代码,这将帮助...

    servlet3-maven-archetype

    在这个名为“servlet3-maven-archetype”的项目中,我们看到的是一个使用Maven构建的Servlet3.1 Web应用程序模板,适用于IDEA用户。 1. **Servlet3.1的新特性** - **异步处理**:Servlet3.1引入了异步处理,允许...

    员工考勤管理系统 为 学校JavaWeb项目课所写项目,使用JSP+JavaBean+Servlet 三层架构.zip

    员工考勤管理系统 为 学校JavaWeb项目课所写项目,使用JSP+JavaBean+Servlet 三层架构 员工考勤管理系统 为 学校JavaWeb项目课所写项目,使用JSP+JavaBean+Servlet 三层架构 员工考勤管理系统 为 学校JavaWeb项目课...

    JSP Servlet 三层架构的个人通讯录

    3. **三层架构**:三层架构是一种常见的软件设计模式,包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。在个人通讯录项目中: - **表现层**:由JSP组成...

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

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

    Redis+Servlet3实现推送功能

    Redis_Servlet3,必须在Tomcat7下运行,实现了推送,Redis上网下一个,配置好Redis就行,配置文件为Redis.properties,推送可以使用Redis客户端推送,目前只做出订阅功能。属于DEMO

    Servlet+API+中文版

    #### 三、Servlet生命周期 - **初始化阶段**:在Servlet实例化后,容器会调用`init()`方法进行初始化操作。开发者可以在该方法中设置必要的参数或加载资源。 - **服务阶段**:当客户端发送请求到服务器时,容器会...

    servlet3.0与mybatis整合的示例

    3. 嵌入式容器:Servlet3.0允许在没有web服务器的情况下运行应用,例如使用Jetty或Tomcat的嵌入式版本,简化了开发和测试流程。 4. pluggable deployment:不再强制依赖web.xml,可以使用自定义的部署描述符或者...

Global site tag (gtag.js) - Google Analytics