今天学到Servlet,简单说下如何在Servlet程序中连接数据库。 
 
 
首先,先解决Tomcat的部署。我们所写的Servlet程序,如何才能在Tomcat服务器上运行呢? 
 
1、进入Tomcat所在目录-->webapp目录-->在里面新建一个文件夹,名字随便取(我这里的是my)-->在里面新建一个名为WEB-INF文件夹(这是规范) 
 
-->在其文件夹内新建一个classes文件夹,一个lib文件夹,一个web.xml文件。 
 
classes文件夹用来存放编译好的class文件,lib文件夹用来存储程序中要用到的jar包。web.xml是对Servlet程序的配置。 
 
2、接下来在数据库中创建相应的库,表,并插入记录。然后编写Servlet程序连接数据库。 
复制代码 
 
 1 package com.HelloSevrlet; 
 2 import javax.servlet.ServletException; 
 3 import javax.servlet.http.HttpServlet; 
 4 import javax.servlet.http.HttpServletRequest; 
 5 import javax.servlet.http.HttpServletResponse; 
 6 import java.io.IOException; 
 7 import java.io.PrintWriter; 
 8 import java.sql.*; 
 9  
10 /** 
11  * Created by Lin-953 on 2016/3/13. 
12  */ 
13 public class ServletToJDBC extends HttpServlet { 
14     @Override 
15     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
16         resp.setContentType("text/html"); 
17         resp.setCharacterEncoding("gb2312"); 
18         Connection connection = null; 
19         Statement statement = null; 
20         ResultSet resultSet = null; 
21         PrintWriter printWriter = resp.getWriter(); 
22         try { 
23             Class.forName("com.mysql.jdbc.Driver"); 
24             String url = "jdbc:mysql://127.0.0.1/testing"; 
25             connection = DriverManager.getConnection(url, "root", "57295320."); 
26             statement = connection.createStatement(); 
27             resultSet = statement.executeQuery("SELECT  Sname FROM test"); 
28             printWriter.print("<html><head><title>Servlet连接数据库</title></head>"); 
29             printWriter.print("<body><table border=1 align=\"center\"><tr><td>Sname</td></tr>"); 
30             while (resultSet.next()) { 
31                 printWriter.print("<tr>"); 
32                 printWriter.print("<td>" + resultSet.getString("Sname") + "</td>"); 
33                 printWriter.print("</tr>"); 
34             } 
35             printWriter.print("</table>"); 
36             printWriter.print("</html>"); 
37  
38         } catch (ClassNotFoundException e) { 
39             e.printStackTrace(); 
40         } catch (SQLException e) { 
41             e.printStackTrace(); 
42         } finally { 
43             try { 
44                 if (resultSet != null) { 
45                     resultSet.close(); 
46                     resultSet = null; 
47                 } 
48  
49                 if (statement != null) { 
50                     statement.close(); 
51                     resultSet = null; 
52                 } 
53  
54                 if (connection != null) { 
55                     connection.close(); 
56                     connection = null; 
57                 } 
58             } catch (SQLException e) { 
59                 e.printStackTrace(); 
60             } 
61         } 
62         printWriter.close(); 
63     } 
64  
65     @Override 
66     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
67         doGet(req, resp); 
68     } 
69 } 
 
 
 
为什么从HttpServlet继承? 
 
GenericServlet中描述的比较通用的Servlet程序,对于特定的Http请求无任何反应。而HttpServlet类从GenericServlet类继承而来,并且实现了Servlet接口。可以对特定的Http请求做出响应。 
 
  
 
为什么重写doGet和doPost这两个方法,而不是其他的方法? 
 
想要解决这个问题,必须先了解一个Servlet的生命周期。 
 
Servlet的生命周期分为三个阶段:初始,响应及终止。 
 
初始阶段:在此阶段Servlet容器会对Servlet类进行装载,装载完成后对其初始化。 
 
      1、当Servlet容器启动的时候,会对Servlet进行装载。 
 
      2、当客户端首次请求访问Servlet时,Servlet容器会对Servlet类装载。 
 
      3、当有Servlet类文件更新时,Servlet容器会对Servlet重新装载。 
 
  
 
      装载完成之后,调用init()方法对Servlet对象进行初始化。 
 
  
 
响应阶段:当客户端请求访问Servlet资源时,Servlet对象会调用Service方法响应用户请求, 
 
而Service方法会调用doPost或doGet方法,这也是为什么要重写这两个方法的原因。在此阶段, 
 
Servlet容器将用户请求包装成一个HttpRequest对象,最后将结果包装成一个HttpResponse对 
 
象返回客户端。 
 
 
终止阶段:当Web容器或者Sevlet容器关闭之后,Servlet对象会调用destory()方法来释放该Servlet对象所占的内存空间。 
  
到这里了,又有个疑问了,web容器和Servlet容器到底是什么东东呢? 
 
web容器是用来部署和管理Web应用程序的,Servlet容器是管理Servlet的生命周期的。 
 
 
3、Tomcat和Intellij IDEA的配置 
 
  打开IDEA,新建一个WebApplication项目,新建成功后,在web目录下的WEB-INF目录下新建一个classpath文件夹和一个lib文件夹 
 
          -->File-->Project Structure-->Modules-->Dependencies-->选择“+”号-->JARordirectorys添加所需jar包 
 
          (我这里的是Tomcat,mysql--connector--java-bin.jar,),将我们刚才新建的lib的绝对路径也添加上去。--> 
 
          切换到Module--path,在Compiler Output栏中选择“use modules compiler output path”,然后指定我们刚才新建 
 
          的class目录。 
 
  将WEB-INF文件夹下的web.xml文件的内容拷贝到my中的WEB-INF文件夹下的web.xml文件中。根据自己所写的Servlet程序进行配置。以下 
 
是我的配置信息。 
 
 
 1 <?xml version="1.0" encoding="GBK"?> 
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
 5          version="3.1"> 
 6  
 7     <servlet> 
 8         <servlet-name>HelloServlet</servlet-name> 
 9         <servlet-class>com.HelloSevrlet.HelloSevlet</servlet-class> 
10     </servlet> 
11     <servlet-mapping> 
12         <servlet-name>HelloServlet</servlet-name> 
13         <url-pattern>/HelloSevlet</url-pattern> 
14     </servlet-mapping> 
15  
16     <servlet> 
17         <servlet-name>TestLifeCircleSevlet</servlet-name> 
18         <servlet-class>com.HelloSevrlet.TestLifeCircleSevlet</servlet-class> 
19     </servlet> 
20     <servlet-mapping> 
21         <servlet-name>TestLifeCircleSevlet</servlet-name> 
22         <url-pattern>/TestLifeCircleSevlet</url-pattern> 
23     </servlet-mapping> 
 
 
 
一个servlet标签和一个servlet-mapping标签是一对,servlet-name标签的内容可以随便写, 
但必须和servlet-mapping标签内的servlet-name标签的内容一致。servlet-class标签的内容是类所处的位置。 
url-pattern中的/代表的是客户端请求访问某个Servlet的地址的父路径(相对Servlet路径来说)。 
因此url-pattern是设置访问此servlet程序的路径。 |   
        
 
    
    
    
     
 
 |