網站寫完後部署到tomcat的webapps下面,用本身申請的公網ip和端口去訪問,奈何就是打不開,報404錯誤,把360關掉竟然就能訪問了,氣死俺了。。這個網站訪問數據庫的網址不用更改,這個數據庫網址和訪問這個網站的網址不是一回事,有各自的網址和端口號。css
一:jdbc是數據庫鏈接技術縮寫,jdbc有兩種鏈接數據庫系統的技術,一種是鏈接池技術(書寫更少些),另外一種是JDBC驅動程序。用JDBC驅動爲了減小書寫,能夠把鏈接路徑,屬性設置等寫在一個靜態類裏面,寫一個靜態的鏈接方法,每次要鏈接數據庫就去調用這個公共靜態方法就能夠。html
1.鏈接池技術步驟:java
(1)配置數據源mysql
在服務器安裝程序的lib目錄下添加mysql數據庫驅動程序。數據庫驅動程序在網址:http://dev.mysql.com/downloads/connector下載到,而後解壓找到裏面名字爲:mysql-connector-java-5.??-bin的jar包,注意結尾是bin的包,把它複製到Tomcat的lib目錄下。web
在網站工程目錄的META-INF下新建一個context.xml文件,在裏面配置數據源參數。url中網址:打開的端口號/數據庫名稱?是否使用SSL加密技術。driverClassName連接數據庫的驅動程序名,com.mysql.jdbc.Driver是jdbc的mysql的驅動程序名字。maxActive:數據庫鏈接池中的最大活動鏈接數目,這些鏈接關閉後就能回到池中,下一次重複使用。maxIdle,鏈接空閒的最大數目0是不受限制。maxWait請求數據庫鏈接的最長等待時間,超時拋出異常。sql
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/mysql" type="javax.sql.DataSource" auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/students?useSSL=false" username="root" password="root" maxActive="4" maxIdle="0" maxWait="30000" /> </Context>
(2)鏈接數據庫訪問數據庫數據庫
<% // Class.forName("com.mysql.jdbc.Driver"); //1.使用JDBC的鏈接池技術訪問數據庫 //(1)得到對數據源的引用,Context提供了查找數據源鏈接誒信息的引用 Context context=new InitialContext(); //jdbc/sql後兩位要和context頁面中的name的值如出一轍才能查找到這個數據源; DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/sql"); //(2)返回一個鏈接對象 Connection conn=ds.getConnection(); //(3)準備SQL語句 String sql="select * from stu_info where hight>?"; //(4)返回一個陳述對象PreparedStatement發送sql語句到數據庫系統; statement=conn.prepareStatement(sql); //(5)執行SQL返回一個結果集 statement.setFloat(1, 0);//第一個?號參數實參 //執行查詢返回一個結果值 result=statement.executeQuery(); %>
(3)關閉對象tomcat
<% //關閉結果集 if(result!=null) result.close(); //關閉陳述 if(statement!=null) statement.close(); //關閉鏈接 if(conn!=null) conn.close(); %>
2.JDBC驅動技術。 服務器
(1)添加驅動程序包到服務器的lib目錄下並註冊驅動程序session
在服務器安裝程序的lib目錄下添加mysql數據庫驅動程序。數據庫驅動程序在網址:http://dev.mysql.com/downloads/connector下載到,而後解壓找到裏面名字爲:mysql-connector-java-5.??-bin的jar包,注意結尾是bin的包,把它複製到Tomcat的lib目錄下。
Class.forName("com.mysql.jdbc.Driver");//註冊加載程序包,括號內mysql的驅動程序名
(2)書寫鏈接路徑和屬性並鏈接
String username="";//用戶名 String passWord="";//密碼 String databaseName="";//數據庫名 String url1="jdbc:mysql://網址:端口號/"+databaseName; String url2="?user="+username+"&password"+passWord+"&useUnicode=true&characterEncoding=UTF-8" String url=url1+url2; //DriverManager類提供了數據庫鏈接方法 Connection conn=DriverManager.getConnection(url);
(3)訪問數據庫
和鏈接池技術如出一轍。
//(3)準備SQL語句 String sql="select * from stu_info where hight>?"; //(4)返回一個陳述對象PreparedStatement發送sql語句到數據庫系統; statement=conn.prepareStatement(sql); //(5)執行SQL返回一個結果集 statement.setFloat(1, 0);//第一個?號參數實參 //執行查詢返回一個結果值 result=statement.executeQuery();
2、JSP技術的4大內置對象
用到的時候很是多.request客戶端請求的信息的對象,用它的方法能夠得出客戶點請求的不少詳細信息。request不須要用戶手動建立和銷燬,發起請求時JSP頁面就已經建立好了request對象,直接拿來用就好,它一般用來傳輸少許數據,相似安卓的intent,值鍵對的方式傳輸,form的action和jsp的forward都會自動把上頁面的東西傳輸到下一個頁面,request生命週期是它所能跳轉到的頁面連續的後面幾個頁面都行,至於它沒有跳轉到的頁面是取不出值的。
session是一次會話的意思。生命週期:當用戶打開網站開始就自動爲這個用戶建立一個session,直到用戶關閉網站,關閉網站全部網頁時session會自動銷燬掉。每一個用戶都建立session,他們的值不共享。不過通常20分鐘沒有再次請求網頁也會自動銷燬,當同一個用戶再次進入網站時又開始建立新的。session存儲的數據能夠在本網站的任何頁面使用傳輸,不一樣於request只能在它跳轉到的地方傳輸。使用session.setAttribute(String,Object)存儲,session.getAttribute(String)取出。
生命週期:服務器開啓時都一直存在。服務器爲每個網站程序創建一個application對象。能夠用來統計網站訪問次數。
重定向跳轉到任何網頁包括本網站之外的網頁、定時刷新的功能,不太瞭解。
3、案例代碼
<%@page import="javax.naming.InitialContext"%> <%@page import="java.sql.*" %> <%@page import="javax.sql.*" %> <%@page import="javax.naming.*" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>列出所有學生信息模塊</title> </head> <body> <%! //定義全局變量; ResultSet result=null; PreparedStatement statement=null; %> <% // Class.forName("com.mysql.jdbc.Driver"); //1.使用JDBC的鏈接池技術訪問數據庫 //(1)得到對數據源的引用,Context提供了查找數據源鏈接誒信息的引用 Context context=new InitialContext(); //jdbc/sql後兩位要和context頁面中的name的值如出一轍才能查找到這個數據源; DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/sql"); //(2)返回一個鏈接對象 Connection conn=ds.getConnection(); //(3)準備SQL語句 String sql="select * from stu_info where hight>?"; //(4)返回一個陳述對象PreparedStatement發送sql語句到數據庫系統; statement=conn.prepareStatement(sql); //(5)執行SQL返回一個結果集 statement.setFloat(1, 0);//第一個?號參數實參 //執行查詢返回一個結果值 result=statement.executeQuery(); //指針移動到結果集最後一行 result.last(); //getRow()返回當前行的行號,以1開始不是0 %> <p style="font-size: 5;color: black;">你要查詢的學生共有:<%=result.getRow()%>人</p> <table border="2"> <tr> <td>學生學號</td><td>姓名</td><td>性別</td><td>年齡</td><td>身高</td><td>體重</td> </tr> <% result.beforeFirst(); //注意resultSet的返回結果集若是是沒有記錄不是null也不是空字符串,而是用first()或者next()返回來判斷 while(result.next()){ //id,name,sex等都是數據庫表的列名,必須一一是真的書寫; %> <tr> <td><%=result.getString("id") %></td><td><%=result.getString("name") %></td> <td><%=result.getString("sex") %></td><td><%=result.getInt("age") %></td> <td><%=result.getFloat("hight") %></td><td><%=result.getFloat("weight") %></td> </tr> <% } %> </table> <% //關閉結果集 if(result!=null) result.close(); //關閉陳述 if(statement!=null) statement.close(); //關閉鏈接 if(conn!=null) conn.close(); %> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>插入學生信息頁面</title> <style type="text/css"> .inputfront{font-size: 18px;margin-left:10px;} .p1{margin-left:260px;} </style> </head> <body> <br> <form method="post" action="insert_stu_2.jsp"> <table class="p1"> <tr><td>學生學號 :</td><td><input type="text" name="id" class="inputfront"/></td></tr> <tr><td>姓名 :</td><td><input type="text" name="name" class="inputfront"/></td></tr> <tr><td>性別 :</td><td><input type="text" name="sex" class="inputfront"/></td></tr> <tr><td>年齡 :</td><td><input type="text" name="age" class="inputfront"/></td></tr> <tr><td>身高/釐米 :</td><td><input type="text" name="hight" class="inputfront"/></td></tr> <tr><td>體重/斤 :</td><td><input type="text" name="weight" class="inputfront"/></td></tr> </table> <input type="submit" name="submit" value="提交" style="margin-left:400px;margin-top:18px;font-size:20px;"/> </form> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.sql.*" %> <%@page import="javax.sql.*" %> <%@page import="javax.naming.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>反饋插入學生信息是否成功</title> </head> <body> <% //request若是沒填接收到的是空值不是null,由於是input的text類型變爲了空值; request.setCharacterEncoding("UTF-8"); String id=request.getParameter("id"); String name=request.getParameter("name"); String sex=request.getParameter("sex"); String age=request.getParameter("age"); String hight=request.getParameter("hight"); String weight=request.getParameter("weight"); if("".equals(id)||"".equals(name)||"".equals(sex)||"".equals(age)||"".equals(hight)||"".equals(weight)) out.println("不容許有空值!"); Context context=new InitialContext(); DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/sql"); Connection conn=ds.getConnection(); String sql="select * from stu_info where id=?"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1,id); ResultSet rs=ps.executeQuery(); if(rs.first()) out.println("您輸入的學號在數據庫裏已經存在!"); else %> <jsp:forward page="insert_stu_3.jsp"></jsp:forward> <% if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(conn!=null) conn.close(); %> </body> </html>