Servlet的资源访问

 

如果在Servlet中要使用到其他的资源,例如连接数据库的驱动,可以放在tomcat服务器的文件夹下的common/lib下,这个目录中存放的是一些在服务器启动时就会加载的公共资源,一般在需要在应用中是用特定的资源,也就是jar文件,那么不要放在common/lib下,如果common/lib下的jar文件过多会导致服务器启动缓慢,应用中使用到的jar文件要放在WEB-INF/lib下,就可以被服务器找到了。

 

如果要在Servlet中是用Hibernate的访问数据库的方法,那么就需要把hibernate需要的jar文件,放到WEB-INF/lib下就可以了,Xxxxxx.hbm.xml还是和实体类放在一起。hibernate.cgf.xml文件,要放在WEB-INF/classes下就可以了。

 

MVC框架

 

Model,模型层,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息,可以使用JDBC或者Hibernate实现这一层的功能。

Ctrl,控制曾,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用Servlet来实现这一层,不过一般是会用开源的MVC框架来实现这层,例如struts,或者是Spring的MVC框架。

View,表现层,他只用来显示数据和收集必要数据,收集数据的一般是form表单,不过要保证数据的正确性要是用JavaScript验证信息,以后我们会学到的JSP(java server page)就是用来表现、显示数据的。

 

HttpServletRequest对象中的方法setAttribute(String name,Object o),可以使用HttpServletRequest对象来携带信息,并且可以通过getAttribute(String name)方法来获得携带的信息,这两个方法类似于map中的存取方法,setAttribute方法给数据加上标识,getAttribute方法则是通过这个标识来获取数据,可以使用这一对方法的前提就是要保证是同一个请求对象(HttpServletRequest)

 

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。

数据库连接池,也就是在没有程序取连接时,可以事先创建好连接,连接池是一个运行在多线程环境下,提供数据库连接的程序,在程序是用万数据库连接后关闭数据库连接的动作不再是关闭连接的操作,而是把数据库连接放回连接池,也就是这个数据库连接已经是空闲状态,就可以供其他的程序取用了。

配置Tomcat服务器的数据源

在tomcat下的conf目录中的tomcat-users.xml文件中配置的是tomcat的用户

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager" description=""/>
  <role rolename="admin"/><!--配置管理员-->
  <user username="manager" password="123" fullName="" roles="manager"/>
  <user username="admin" password="123" roles="admin"/>
  <!--配置管理员的用户名和密码,并且标明是管理员roles="admin"-->
</tomcat-users>
   <Resource
      name="jdbc/oracle" 配置JDNI的名字
      type="javax.sql.DataSource" 绑定资源的类型
      password="open123"
      driverClassName="oracle.jdbc.driver.OracleDriver" 驱动名
      maxIdle="1"最大连接数
      maxWait="-1"等待时间,配置为-1就是无限等待,只到有空闲连接为止
      username="openlab"
      url="jdbc:oracle:thin:@192.168.0.39:1521:TARENADB"

以下的就是从连接池去取数据库连接的代码

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