JSP基础:(6)Servlet请求转发与数据源连接池

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;
            }

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/82699401