學習是個技巧活,關鍵是要找到重點的地方,新手在這方面的坑尤其多。看別人的教程一步一步的跟着做,隔幾步就遇到一個新知識點,忍不住就百度往深處了解,一晃半天就過去了。
有的知識點要深入學習的,有的是了解下就行的。我個人感覺這個度的把握是最難的。當然這也是饒不過去的坑。
最近跟着網上的一個教程學習JAVA WEB開發,將中間遇到的坑和教訓標記下:
1、JAVAC編譯時,提示找不到自定義類的問題。(如果是用記事本編輯,用命令行Javac編譯,需要 在環境變量中,設置CLASSPATH 指向你的classes目錄);
2、關於JDBC:MYSQL的端口號,如果沒有指定,會連接失敗。切記根據本機的端口設置正確

3、有條件還是用ECLIPSE來編譯執行,可以從控制台看到詳細的錯誤日志。
==================================
附:入門代碼及注釋
1、文件及目錄結構(存在TOMCAT的WEBAPPS目錄下)

2、登錄頁面效果

3、主要代碼(運行前提:需安裝JDK及MYSQL)
(1)、在MYSQL 中創建數據庫user ,創建用戶表tb_user;
mysql -u root -p 123456 ;
create database user;
use user;
create table tb_user (
username varchar(20) primary key,
password varchar(20));

(2)創建兩個JSP文件 (index.jsp mesage.jsp)
index.jsp 中需要用到login.jpg ,要放在images目錄下面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JAVA 學習Reg</title> </head> <body> <center><img src="images/login.jpg"/></center> <center><font size=5 color="blue"><B>用戶注冊頁面</B></font></center> <form action="RegServlet" method="post"> <!-- 指定將該表單交給RegServlet來處理--> <table align="center" width="450" border="0"> <!--用戶名行--> <tr> <td align="right">Username:</td> <td> <input type="text" name="username"> </td> </tr> <!--密碼行--> <tr> <td align="right">Password:</td> <td> <input type="password" name="password"> </td> </tr> <!--確認密碼行--> <tr> <td align="right">Confirm Password:</td> <td> <input type="password" name="repassword"> </td> </tr> <!--提交 重置行--> <tr> <td colspan="2" align="center"> <input type="submit" value="Reg"> <input type="reset" value="Reset"> </td> </tr> </table> </form> </body> </html>
message.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<body>
<center><img src="images/regfail.jpg"/></center>
<%
String info = (String)request.getAttribute("info");
if(info != null) {
out.print("<center>");
out.print("<font size=10>");
out.print("<B>");
out.print(info);
out.print("</B>");
out.print("</font>");
out.print("</center>");
}
%>
</body>
l
以上就是展示層,結束后,可以在瀏覽器中輸入http://localhost:8080/reg/index.jsp看下效果。(注意你TOMCAT的端口號,我用的是8080)
(3)、建立 JAVA BEAN模型層
共有4個文件,分別放在beans dao service utils 目錄下
文件名為 :UserBean.java UserDao.java SignInServlet.java DataBaseUtil.java
UserBean.java
package beans;
/**
用戶信息javabean
**/
public class UserBean {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDao.java
package dao;
import utils.DataBaseUtil;
import beans.UserBean;
import java.sql.*;
public class UserDao {
public boolean isUserExist(String username) {
//create a connection
Connection connection = DataBaseUtil.getConnection();
String sql ="select * from tb_user WHERE username=?";
try{
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, username);
ResultSet resultSet = ps.executeQuery();
if(!resultSet.next()) {
return true;
}
}catch(SQLException e) {
System.out.println(e.toString());
e.printStackTrace();
}catch(NullPointerException f){
f.printStackTrace();
}finally {
DataBaseUtil.closeConnection(connection);
}
return false;
}
public boolean isPasswordConfirm(String password, String repassword) {
return password.equals(repassword);
}
public void saveUser(UserBean user) {
Connection connection = DataBaseUtil.getConnection();
String sql = "insert into tb_user (username, password) values(?,?) ";
try {
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DataBaseUtil.closeConnection(connection);
}
}
}
DataBaseUtil.java
1 package utils; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class DataBaseUtil { 8 9 public static Connection getConnection() { 10 Connection connection = null; 11 try{ 12 Class.forName("com.mysql.jdbc.Driver"); 13 String url = "jdbc:mysql://localhost:3306/user"; 14 connection = DriverManager.getConnection(url, "root", "123456"); 15 return connection; 16 17 }catch(ClassNotFoundException nfe) { 18 nfe.printStackTrace(); 19 }catch(SQLException sqle) { 20 sqle.printStackTrace(); 21 } 22 return connection; 23 } 24 25 public static void closeConnection(Connection connection) { 26 if(connection != null) { 27 try{ 28 connection.close(); 29 }catch(SQLException sqle) { 30 sqle.printStackTrace(); 31 } 32 } 33 } 34 }
(3)、控制層 SignInServlet
SignInServlet.java
1 package service; 2 3 import beans.UserBean; 4 import dao.UserDao; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 12 public class SignInServlet extends HttpServlet{ 13 14 @Override 15 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 16 String username = request.getParameter("username"); 17 String password = request.getParameter("password"); 18 String repassword = request.getParameter("repassword"); 19 20 UserDao userDao = new UserDao(); 21 if(username != null && !username.isEmpty()) { 22 //用戶名不存在可以注冊 23 if(userDao.isUserExist(username) && userDao.isPasswordConfirm(password, repassword)) { 24 UserBean userBean = new UserBean(); 25 userBean.setPassword(password); 26 userBean.setUsername(username); 27 userDao.saveUser(userBean); 28 request.setAttribute("info", "Congratulations! Reg successfully!"); 29 }else { 30 if(!userDao.isUserExist(username)) 31 request.setAttribute("info", "Sorry! Username exists!"+username+" "+password); 32 if(!userDao.isPasswordConfirm(password, repassword)) 33 request.setAttribute("info", "Sorry! Password not confirmed!"); 34 } 35 } 36 //forward to message.jsp 37 request.getRequestDispatcher("message.jsp").forward(request, response); 38 } 39 }
(4)、配置web.xml文件
在WEB-INF目錄下創建web.xml文件,指定程序的相關配置信息
1 <?xml version="1.0" encoding="UTF-8"?> 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 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 <servlet> 11 <servlet-name>SignInServlet</servlet-name> 12 <servlet-class>service.SignInServlet</servlet-class> 13 </servlet> 14 <servlet-mapping> 15 <servlet-name>SignInServlet</servlet-name> 16 <url-pattern>/RegServlet</url-pattern> 17 </servlet-mapping> 18 </web-app>
(5)、下載相關JAR包
從網上下載JDBC-MySQL驅動,放入lib目錄中(我用的是:mysql-connector-java-5.1.30.jar)

(6)、編譯JAVA文件
打開reg/web-inf/CLASSES 文件夾,按住shift在窗口中點鼠標右鍵,選擇 “在此處打開命令窗口w” 進入cmd窗口,先進入相關的子目錄 ,一個一個的執行 javac **.java 將文件編譯為.class文件;

上述工作完成后,啟動瀏覽器,輸入 http://localhost:8080/reg/ 如果能打開頁面如下,祝賀你,你的 WEB項目成功了;

真誠感謝 Easy sir :
新手推薦JSP+JavaBean+Servlet MVC模式用戶注冊模塊
代碼基本照搬,改了JSP的編碼類型為 UTF-8 ,順序略有調整。
