学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多。看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了。

有的知识点要深入学习的,有的是了解下就行的。我个人感觉这个度的把握是最难的。当然这也是饶不过去的坑。

最近跟着网上的一个教程学习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="data: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="data: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:/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
 package utils;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class DataBaseUtil { public static Connection getConnection() {
Connection connection = null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/user";
connection = DriverManager.getConnection(url, "root", "123456");
return connection; }catch(ClassNotFoundException nfe) {
nfe.printStackTrace();
}catch(SQLException sqle) {
sqle.printStackTrace();
}
return connection;
} public static void closeConnection(Connection connection) {
if(connection != null) {
try{
connection.close();
}catch(SQLException sqle) {
sqle.printStackTrace();
}
}
}
}

(3)、控制层 SignInServlet

SignInServlet.java

 
 package service;

 import beans.UserBean;
import dao.UserDao; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class SignInServlet extends HttpServlet{ @Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String username = request.getParameter("username");
String password = request.getParameter("password");
String repassword = request.getParameter("repassword"); UserDao userDao = new UserDao();
if(username != null && !username.isEmpty()) {
//用户名不存在可以注册
if(userDao.isUserExist(username) && userDao.isPasswordConfirm(password, repassword)) {
UserBean userBean = new UserBean();
userBean.setPassword(password);
userBean.setUsername(username);
userDao.saveUser(userBean);
request.setAttribute("info", "Congratulations! Reg successfully!");
}else {
if(!userDao.isUserExist(username))
request.setAttribute("info", "Sorry! Username exists!"+username+" "+password);
if(!userDao.isPasswordConfirm(password, repassword))
request.setAttribute("info", "Sorry! Password not confirmed!");
}
}
//forward to message.jsp
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}

(4)、配置web.xml文件

在WEB-INF目录下创建web.xml文件,指定程序的相关配置信息

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SignInServlet</servlet-name>
<servlet-class>service.SignInServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SignInServlet</servlet-name>
<url-pattern>/RegServlet</url-pattern>
</servlet-mapping>
</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 ,顺序略有调整。

java web 开发入门实例的更多相关文章

  1. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  2. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  3. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  4. java web 开发入门

    Java web,是java技术用来解决web互联网领域的技术总和.Java web技术主要包括客户端和服务端,java在客户端的服务有java applet,不过用的非常少,大部分应用在服务端,比如 ...

  5. java web开发入门汇总

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  6. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  7. java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  8. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

  9. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

随机推荐

  1. shell产生随机数七种方法

    shell实例浅谈之三产生随机数七种方法   一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大 ...

  2. Myeclipse中文件已经上传到server文件夹下,文件也没有被占用,可是页面中无法读取和使用问题的解决方法

    这个问题是因为Myeclipse中文件不同步引起的.在Myeclipse中,project文件是由Myeclipse自己主动扫描加入的,假设在外部改动了project文件夹中的文件但又关闭了自己主动刷 ...

  3. C#秘密武器之反射——基础篇

    先来一段有用的反射代码 namespace Calculator { public interface Iwel { String Print(); } } namespace Calculator ...

  4. 使用Vmware虚拟机部署Swift开发环境之Mac OSX系统安装

    一.使用VMware虚拟机部署Swift开发环境所需工具: Vmware Workstation 10.0虚拟机软件VM安装Mac解锁工具Unlock苹果操作系统(Mac OS X Mavericks ...

  5. java 方法传参方式: 按值调用

    程序设计语言中将参数传递给方法的几种方式: 按名调用(call by name): Algol 语言采用此方式, 已成为历史; 按值调用(call by value): 方法接收到的是调用者提供的 变 ...

  6. 金典 SQL笔记(2)

    由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了.

  7. 2014哈商大ICPC/ACM校赛解题报告

    被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...

  8. prototype 用法

    prototype使得js面向对象使用了prototype之后,使用它里面的属性或者函数 需要new出一个对象才可以使用.否则不使用prototype,直接向对象注入 function Person( ...

  9. 你被美国监控了,美国监控丑闻——"棱镜项目"事件

    http://www.ittime.com.cn/index.php?m=content&c=index&a=show&catid=29&id=3795 “棱镜”项目所 ...

  10. 在VS2013 IIS Express 添加MIME映射

    打开VS2013返回json提示MIME映射问题 1.在DOS窗口下进入IIS Express安装目录,默认是C:\Program Files\IIS Express,cmd  命令行cd 到 该目录 ...