Servlet请求转发
MVC模式是Java程序设计中的一种常用的设计模式,它将一个交互式应用程序分成相对独立而又协同工作的3个组成部分:
模型(Model):业务逻辑层。实现具体的业务逻辑、状态管理;
视图(View):表示层。与用户实现交互的界面,通常实现数据的输入和输出功能;
控制器(Controller):控制层。控制整个业务流程,实现View和Model之间的协同工作。
Servlet中的请求转发
在MVC中,Servlet是作为中央控制器控制着Model和View之间的协同工作,那么如何在Servlet中实现请求的转发和数据共享就显得尤为重要。
Servlet中的请求转发方式有三种,但每种方式都必须先获取转发器
转发器是一个RequestDispatcher类型的对象
(1)通过ServletRequest接口提供的getRequestDispatcher(String path)。
RequestDispatcher rd=request.getRequestDispatcher("show.jsp");//3
rd.forward(request,response);//4
(2)通过ServletContext接口提供的getRequestDispatcher(String path)方法实现请求转发,转发地址必须以/开头
ServletContext sc=request.getSession().getServletContext();
RequestDispatcher rd=sc.getRequestDispatcher("/show.jsp");
rd.forward(request,response);
(3)通过ServletContext接口提供的getNamedDispatcher(String path)方法实现请求转发,按Servlet名称进行转发,参数是<servlet-name>的值
ServletContext sc=request.getSession().getServletContext();
RequestDispatcher rd=sc.getNamedDispatcher("Servlet2");
rd.forward(request,response);
数据源连接池
连接池:运行一开始的时候就向数据库要求很多的Connection储存在一个Pool(池)内,让需要的人从连接池取得Connection, 等到用完后再放回连接池内。其本质就是一个缓冲区。
JNDI:Java Naming and Directory Interface提供应用程序所需资源上命名与目录服务;通过一个接口让用户在不知道资源所在位置的情形下,取得该资源服务。
DataSource:即获取数据库连接的来源。在Java程序中,一般通过JNDI从连接池中获取。
数据库连接池的原理:
在应用程序启动时,建立足够的数据库连接,并将这些连接放入一个连接池中,由应用程序动态地对池中的连接进行申请、使用和释放。
对于多于连接池中连接数的并发请求,会在请求队列中排列等待。
应用程序可根据池中连接的使用率,动态增加或减少池中的连接数。
可以设置连接池中的最大连接数,用户的最大等待时间等
步骤一:正确放置数据库驱动
将数据库驱动放置于Tomcat安装路径/lib目录下
步骤二:还是在tomcat的context.xml里面配置:
oracle和mysql的数据源的配置:
<Resource name="jdbc/sxt"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
maxIdle="30"
maxWait="10000"
maxActive="100"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/student" />
<Resource name="jdbc/sxt"
auth="Container"
type="javax.sql.DataSource"
username="scott"
password="tiger"
maxIdle="30"
maxWait="10000"
maxActive="100"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
步骤三:配置web.xml
<resource-ref>
<res-ref-name>jdbc/abc</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
步骤四:使用JNDI获取数据源
public void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
try{
//得到初始化的上下文对象
Context initContext=new InitialContext();
//根据配置的数据源名称得到数据源对象
DataSource ds=(DataSource)initContext.lookup("java:/comp/env/jdbc/abc");
Connection con = ds.getConnection();//获取数据库连接
con.close();
}catch(Exception e){e.printStackTrace();}
}
在DAO中使用数据源
编写项目中DAO模块的ConFactory类,采用数据源获取数据库连接
public static Connection getConnection(){
Connection con=null;
try{
//得到初始化的上下文对象
Context initContext=new InitialContext();
//根据配置的数据源名称得到数据源对象
DataSource ds=(DataSource)
initContext.lookup("java:/comp/env/jdbc/abc");
con = ds.getConnection();//获取数据库连接
}catch(Exception e){}
return con;
}