学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多。看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了。
有的知识点要深入学习的,有的是了解下就行的。我个人感觉这个度的把握是最难的。当然这也是饶不过去的坑。
最近跟着网上的一个教程学习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
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 ,顺序略有调整。
活到老,学到老。