實施java 的web項目需要掌握的技術如下:
1.java語言
2. 面向對象分析設計
- XML 語言
- 網頁腳本語言
- 數據庫
- 應用服務器
- 集成開發環境
.java語言:JSP、Servlet、JDBC、javaBean(Application)從這四部分開始創建web項目。
(一)java Database Connectivity(JBDC)技術
它是一種執行SQL語句的java API,由一組用java編程語言編寫的類與接口組成,為開發人員提供了一個標准的API。
作用:1.與數據庫建立連接
2.發送SQL語句
3.處理結果。
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。API與系統調用的區別:系統調用代碼都處於內核態,API是操作系統提供的一組函數,通常以庫的形式存在,供用戶調用。
(二)Servlet技術
Servlet是運行在服務器端的程序,可以認為是服務器端的applet,它被web服務器(Tomcat)加載和執行,然后從客戶端接收該請求,執行某種操作,然后返回結果。
(三)JavaServer Pages(JSP)技術
從Servlet分離而來,簡化了開發,加強界面設計。JSP容器收到客戶端發出的請求時,首先執行其中的程序片段,然后將執行結果以HTML格式響應給客戶端。程序片段可以是:操作數據庫,重新定向網頁。所有程序操作都在服務器端執行,網絡上傳送給客服端的僅是得到的結果,與客戶端的瀏覽器無關。
JSP技術將許多功能封裝起來,成為自定義標簽,根據XML的標准制訂,可以直接供開發人員使用。
(四)JavaBean應用組件技術
提供常用功能可以重復使用,可以讓開發人員將某些功能和核心算法提取出來封裝成為一個組件對象,這樣就增加了代碼的重用率和系統的安全性。
2. 面向對象分析設計思想
在分析項目業務關系的時候,應用一些UML圖,例如用例圖、類圖、時序圖等,這樣可以盡快找出業務邏輯主要面對的對象,然后對每個對象進行行為划分,最后再實現對象間的集成通信。
3 .設計模式和框架結構
如果要是設計一個良好的框架結構,就需要在Java項目實施過程,
有一個設計模式,它決定着項目的應用、部署和實際開發設計。在普通的web項目中很多采用兩層的開發結構,JSP+Servlet 或JSP+JavaBean。它能分有效的分離邏輯開發,使開發人員能專注於各自的開發,也可以使整個開發結構流程更清晰。
4. XML 語言
在服務器和設計模式結構中會應用到自定義文件,而且在應用高級設計時會定義自用的標簽,現在流行的是用XML去定義配置,簡化了數據交換、進程間消息交換這一類的事情,XML的應用大致分為三類:1.間單數據的表示和交換 2.用戶界面相關、表示相關的上下文 3.面向消息的計算
5 .網頁腳本語言
為了提高web項目的整體性能,提高人機交互的友好界面,網頁的腳本語言就會起到一定作用。網頁腳本語言的執行都是客戶端執行的,速度很快,大多數操作與服務器無交互運算。
JavaScript是一種基於對象和事件驅動並具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java腳本語言一起實現在一個web頁面中鏈接多個對象,與web客戶交互作用。它通過嵌入或調入在標准的HTML語言中實現。它是在程序運行過程中逐行解釋。
6. 數據庫
數據庫(Database)是按照 數據結構來組織、 存儲和管理數據的倉庫
7. 應用服務器
在應用方面,web服務器主要是針對於配置和部署,對目錄的配置,調試,對配置文件屬性的修改;對訪問權限和並發性的控制;java類的部署。
8. 集成開發環境
好的配置環境對項目的幫助也是如虎添翼的。 (這部分來源於網絡)
javaWeb簡單登錄頁面
1.程序配置的目錄

2.鏈接數據庫
1 package com.jaovo.msg.Util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 public class DBUtil { 10 11 public static Connection getConnection() { 12 try { 13 //1 加載驅動 14 Class.forName("com.mysql.jdbc.Driver").newInstance(); 15 } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { 16 // TODO Auto-generated catch block 17 e.printStackTrace(); 18 } 19 String user = "root"; 20 String password = "root"; 21 String url = "jdbc:mysql://localhost:3306/jaovo_msg"; 22 Connection connection = null; 23 try { 24 //2 創建鏈接對象connection 25 connection = DriverManager.getConnection(url,user,password); 26 } catch (SQLException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 return connection; 31 } 32 33 //關閉資源的方法 34 public static void close(Connection connection ) { 35 try { 36 if (connection != null) { 37 connection.close(); 38 } 39 40 } catch (SQLException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 } 45 public static void close(PreparedStatement preparedStatement ) { 46 try { 47 if (preparedStatement != null) { 48 preparedStatement.close(); 49 } 50 51 } catch (SQLException e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 } 55 } 56 public static void close(ResultSet resultSet ) { 57 try { 58 if (resultSet != null) { 59 resultSet.close(); 60 } 61 62 } catch (SQLException e) { 63 // TODO Auto-generated catch block 64 e.printStackTrace(); 65 } 66 } 67 68 }
錯誤總結:(1)原來不知道url語句的參數含義,所以直接復制了老師原來寫的uml值,導致很長時間連接不上數據庫。
url="jdbc:數據庫://端口名/即將連接的database"
(2)DriverManager.getConnection(url,"數據庫登錄名","密碼")。
(3)連接數據庫步驟
1.導入java.sql包
import java.sql.*;
2.加載數據庫的連接地址,用戶名和密碼。
Class.forName("com.mysql.jdbc.Driver") ;
3.定義數據庫的鏈接地址,用戶名和密碼。
String user = "root";
String password = "root";
String url = "jdbc:mysql://localhost:3307/jaovo_msg";
4.得到與數據庫的連接對象。
connection = DriverManager.getConnection(url,user,password);
5.聲明sql語句。
String sql = "select * from user2 ";
6.得到語句對象。
preparedStatement = connection.prepareStatement(sql);
7.執行Sql語句。
resultSet = preparedStatement.executeQuery();
8.處理Sql語句的返回語句。
while(resultSet.next()) {
user = new User();
user.setName(resultSet.getString("user"));
user.setPassword(resultSet.getString("password"));
users.add(user);
}
9.關閉對象
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
3.登錄用戶類
1 package com.jaovo.msg.model; 2 3 public class User { 4 private int id; 5 private String username; 6 private String nickname; 7 private String password; 8 public int getId() { 9 return id; 10 } 11 public void setId(int id) { 12 this.id = id; 13 } 14 public String getUsername() { 15 return username; 16 } 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 public String getNickname() { 21 return nickname; 22 } 23 public void setNickname(String nickname) { 24 this.nickname = nickname; 25 } 26 public String getPassword() { 27 return password; 28 } 29 public void setPassword(String password) { 30 this.password = password; 31 } 32 33 }
由於這只是做一個簡單的用戶登錄頁面,所以只用填入登錄名和密碼。所以用戶類中只有name和password.
4.程序功能方法的接口。
1 package com.jaovo.msg.dao; 2 import com.jaovo.msg.model.User; 3 import java.util.List; 4 public interface IUserDao { 5 public void add(User user); 6 public void delete(int id); 7 public void update(User user); 8 public User load(int id); 9 public User load(String username); 10 public List<User> load(); 11 }
5.實現功能方法的類。
1 package com.jaovo.msg.dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 11 import com.jaovo.msg.Util.DBUtil; 12 import com.jaovo.msg.Util.UserException; 13 import com.jaovo.msg.model.User; 14 15 import sun.net.www.content.text.plain; 16 17 public class UserDaoImpl implements IUserDao { 18 19 @Override 20 public void add(User user) { 21 //獲得鏈接對象 22 System.out.println("bbbbbbbbbaaaaaa"+user); 23 Connection connection = DBUtil.getConnection(); 24 //准備sql語句 25 String sql = "select count(*) from t_user where username = ?"; 26 //創建語句傳輸對象 27 PreparedStatement preparedStatement = null; 28 ResultSet resultSet = null; 29 try { 30 preparedStatement = connection.prepareStatement(sql); 31 preparedStatement.setString(1, user.getUsername()); 32 //接收結果集 33 resultSet = preparedStatement.executeQuery(); 34 //遍歷結果集 35 while(resultSet.next()) { 36 if (resultSet.getInt(1) > 0) { 37 throw new UserException("用戶已存在") ; 38 } 39 } 40 41 sql = "insert into t_user(username,password,nickname) value (?,?,?)"; 42 preparedStatement = connection.prepareStatement(sql); 43 preparedStatement.setString(1, user.getUsername()); 44 preparedStatement.setString(2, user.getPassword()); 45 preparedStatement.setString(3, user.getNickname()); 46 preparedStatement.executeUpdate(); 47 } catch (SQLException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 }finally { 51 //關閉資源 52 DBUtil.close(resultSet); 53 DBUtil.close(preparedStatement); 54 DBUtil.close(connection); 55 } 56 57 } 58 59 @Override 60 public void delete(int id) { 61 Connection connection = DBUtil.getConnection(); 62 String sql = "delete from t_user where id = ?"; 63 PreparedStatement preparedStatement = null; 64 65 try { 66 preparedStatement = connection.prepareStatement(sql); 67 preparedStatement.setInt(1, id); 68 preparedStatement.executeUpdate(); 69 } catch (SQLException e) { 70 // TODO Auto-generated catch block 71 e.printStackTrace(); 72 }finally { 73 DBUtil.close(preparedStatement); 74 DBUtil.close(connection); 75 } 76 77 } 78 79 @Override 80 public void update(User user) { 81 Connection connection = DBUtil.getConnection(); 82 //准備sql語句 83 String sql = "update t_user set password = ? , nickname=? where id = ?"; 84 //創建語句傳輸對象 85 PreparedStatement preparedStatement = null; 86 try { 87 preparedStatement = connection.prepareStatement(sql); 88 preparedStatement.setString(1, user.getPassword()); 89 preparedStatement.setString(2, user.getNickname()); 90 preparedStatement.setInt(3, user.getId()); 91 preparedStatement.executeUpdate(); 92 } catch (SQLException e) { 93 // TODO Auto-generated catch block 94 e.printStackTrace(); 95 }finally { 96 DBUtil.close(preparedStatement); 97 DBUtil.close(connection); 98 } 99 } 100 101 @Override 102 public User load(int id) { 103 Connection connection = DBUtil.getConnection(); 104 //准備sql語句 105 String sql = "select * from t_user where id = ?"; 106 //創建語句傳輸對象 107 PreparedStatement preparedStatement = null; 108 ResultSet resultSet = null; 109 User user = null; 110 try { 111 preparedStatement = connection.prepareStatement(sql); 112 preparedStatement.setInt(1, id); 113 resultSet = preparedStatement.executeQuery(); 114 while(resultSet.next()) { 115 user = new User(); 116 user.setId(id); 117 user.setUsername(resultSet.getString("username")); 118 user.setPassword(resultSet.getString("password")); 119 user.setNickname(resultSet.getString("nickname")); 120 } 121 } catch (SQLException e) { 122 // TODO Auto-generated catch block 123 e.printStackTrace(); 124 }finally { 125 DBUtil.close(resultSet); 126 DBUtil.close(preparedStatement); 127 DBUtil.close(connection); 128 } 129 return user; 130 } 131 132 @Override 133 public User load(String username) { 134 // TODO Auto-generated method stub 135 return null; 136 } 137 138 @Override 139 public List<User> load() { 140 Connection connection = DBUtil.getConnection(); 141 //准備sql語句 142 String sql = "select * from user2"; 143 //創建語句傳輸對象 144 PreparedStatement preparedStatement = null; 145 ResultSet resultSet = null; 146 //集合中只能放入user對象 147 List<User> users = new ArrayList<User>(); 148 User user = null; 149 try { 150 preparedStatement = connection.prepareStatement(sql); 151 resultSet = preparedStatement.executeQuery(); 152 while(resultSet.next()) { 153 user = new User(); 154 user.setId(resultSet.getInt("id")); 155 user.setUsername(resultSet.getString("username")); 156 user.setPassword(resultSet.getString("password")); 157 user.setNickname(resultSet.getString("nickname")); 158 users.add(user); 159 } 160 } catch (SQLException e) { 161 // TODO Auto-generated catch block 162 e.printStackTrace(); 163 }finally { 164 DBUtil.close(resultSet); 165 DBUtil.close(preparedStatement); 166 DBUtil.close(connection); 167 } 168 return users; 169 } 170 171 }
6.用戶登錄界面
1 <%@page import="com.jaovo.msg.Util.UserException"%>
2 <%@page import="com.jaovo.msg.dao.UserDaoImpl"%>
3 <%@page import="com.jaovo.msg.model.User"%>
4 <%@ page language="java" contentType="text/html; charset=UTF-8"
5 pageEncoding="UTF-8"%>
6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
7 <html>
8 <%
9 //接收客戶端傳遞過來的參數
10 String username = request.getParameter("username");
11 String password = request.getParameter("password"); 12 String nickname = request.getParameter("nickname"); 13 if(username == null || "".equals(username.trim())){ 14 request.setAttribute("error", "用戶名不能為空"); 15 } 16 %> 17 <jsp:forward page="addInput.jsp"></jsp:forward> 18 <% 19 20 System.out.println("222222"+username); 21 User user = new User(); 22 user.setUsername(username); 23 user.setPassword(password); 24 user.setNickname(nickname); 25 26 UserDaoImpl userDao = new UserDaoImpl(); 27 System.out.println("aabbccdd"+user.getUsername()); 28 try{ 29 userDao.add(user); 30 %> 31 32 33 用戶保存成功!!<br> 34 <a href="addInput.jsp">繼續添加</a><br> 35 <a href="#">用戶列表</a> 36 <% 37 }catch(UserException e){ 38 %> 39 <h2 style="color:red ; font-size:50px">發生錯誤 : <%=e.getMessage() %></h2> 40 <% 41 } 42 %> 43 </html> 44 <%@ page language="java" contentType="text/html; charset=UTF-8" 45 pageEncoding="UTF-8"%> 46 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 47 <html> 48 <head> 49 <title>用戶添加頁面</title> 50 </head> 51 <body> 52 <%=request.getAttribute("error") %> 53 <form action="add.jsp" method="get"> 54 <table align="center" border="1" width="500"> 55 <tr> 56 <td>用戶名稱 : </td> 57 <td> 58 <input type="text" name="username" /> 59 </td> 60 </tr> 61 <tr> 62 <td>用戶密碼:</td> 63 <td> 64 <input type="password" name="password" /> 65 </td> 66 </tr> 67 <tr> 68 <td>用戶昵稱:</td> 69 <td> 70 <input type="text" name="nickname" /> 71 </td> 72 </tr> 73 <tr align="center"> 74 <td colspan="2"> 75 <input type="submit" value="提交" /> 76 <input type="reset" value="重置" /> 77 </td> 78 </tr> 79 </table> 80 </form> 81 </body> 82 </html>
錯誤總結: (1)因為之前jsp的基本語法知識掌握較少,所以編寫的登錄界面較簡單。實現登錄界面的jsp文件的名為doLogin.jsp,但由於之前 <form >標簽中一直寫成dologin.jsp,所以一直不能呈貢跳轉頁面。
7.實現用戶登錄。
1 <%@page import="com.jaovo.msg.dao.UserDaoImpl" %> 2 <%@page import="com.jaovo.msg.model.User" %> 3 <%@page import="java.util.List"%> 4 <%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 9 <% 10 //接收客戶端傳遞過來的參數 11 String username = request.getParameter("username"); 12 String password = request.getParameter("password"); 13 UserDaoImpl a=new UserDaoImpl(); 14 15 User user=a.load(username); 16 String password1=user.getPassword();//登錄窗口傳遞過來的密碼與數據庫中查詢到的密碼相比較 17 if(password.equals(password1)){ 18 out.println("登錄成功"); 19 } 20 else 21 out.println("輸入密碼或登錄名有錯!"); 22 23 24 %> 25 26 </html>
錯誤分析:在這個文件中要調用其他文件中的內容,由於其他文件中的錯誤很多,所以在登錄界面跳轉之后,總是會報這個文件中語句的錯誤。
結果截圖:





通過這次學習發現做一個簡單的JavaWeb登錄界面就很吃力,中間遇到了很多的問題,也有編譯上的錯誤,也有很多借鑒百度上的東西,但是雖然到最后完成了,但是還是花了很大的時間,還不符合一個真正編程者,以后需要大量的鍛煉和思考,以后要更加耐得住寂寞,好好學習。只有耐得中寂寞,方可看的到繁華
