Java?web實(shí)現(xiàn)簡(jiǎn)單注冊(cè)功能
今天寫(xiě)了一個(gè)注冊(cè)功能,沒(méi)有用任何框架!發(fā)現(xiàn)不會(huì)寫(xiě)了,中間查了好幾次百度。不過(guò)還是順利的寫(xiě)完并且跑起來(lái)了。在這里記錄一下。我認(rèn)為有時(shí)候?qū)戇@些代碼還是對(duì)我們理解框架很有幫助的,因?yàn)榭蚣芤彩前凑者@些,對(duì)基礎(chǔ)進(jìn)行封裝后得到的。
首先是環(huán)境的搭建
1、環(huán)境的搭建:我用的jdk1.8 tomcat 7.0 eclipse neno 數(shù)據(jù)庫(kù)用的是mysql。
2、創(chuàng)建一個(gè)動(dòng)態(tài)的web工程(這個(gè)應(yīng)該都會(huì)的,這里就不再截圖說(shuō)明了)
3、數(shù)據(jù)庫(kù)的創(chuàng)建
我這里創(chuàng)了一個(gè)名為t_t_user 的表,里面的字段也很簡(jiǎn)單,就name password age 三個(gè)。

4、數(shù)據(jù)庫(kù)創(chuàng)建好之后就開(kāi)始寫(xiě)前端代碼
前端寫(xiě)的很簡(jiǎn)單
<%@ 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>首頁(yè)</title>
</head>
<body>
?<p style="color:red;">${message}</p>
?<form action="${pageContext.request.contextPath }/login" method="post">
? ?姓名 <input ?type="text" name="name"/><br>
? ? 年齡 <input type="text" name="age"/><br>
? ? 密碼<input ?type="password" name="password"/><br>
? ? <input type="submit" value="提交">
?</form>
</body>
</html>5、前端代碼寫(xiě)好后就可以寫(xiě)對(duì)應(yīng)的,上傳的請(qǐng)求的servlet,在這里我只判斷了姓名不能為空,其他的就一樣的寫(xiě)就好了。還有這里有個(gè)問(wèn)題,就是我沒(méi)有進(jìn)行編碼處理。在這里可能出現(xiàn)中文亂碼的問(wèn)題,可以直接在servlet中加入處理中文亂碼的語(yǔ)句,或者是寫(xiě)個(gè)過(guò)濾器,這里我就不再贅述了。
package com.proven.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.proven.service.UserService;
import com.proven.service.impl.UserServiceImpl;
/**
?* Servlet implementation class login
?*/
@WebServlet("/login")
public class login extends HttpServlet {
? ? private static final long serialVersionUID = 1L;
? ? protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ?String name=request.getParameter("name");
? ? ? ?String password = request.getParameter("password");
? ? ? ?String ages = request.getParameter("age");
? ? ? ?int age = Integer.parseInt(ages);
? ? ? ?String message="";
? ? ? ?if(name.equals("")){
? ? ? ? ? ?message="用戶名不能為空";
? ? ? ? ? ?request.setAttribute("message", message);
? ? ? ? ? ?request.getRequestDispatcher("/index.jsp").forward(request, response);
? ? ? ?}else{
? ? ? ? ? ?UserService userService = new UserServiceImpl();
? ? ? ? ? ?int info = userService.register(name,password,age);
? ? ? ? ? ?if(info==1){
? ? ? ? ? ? ? ?message="注冊(cè)成功";
? ? ? ? ? ?}else if(info ==0){
? ? ? ? ? ? ? ?message="注冊(cè)失敗";
? ? ? ? ? ?}else if(info==-2){
? ? ? ? ? ? ? ?message="sql錯(cuò)誤";
? ? ? ? ? ?}
? ? ? ? ? ?request.setAttribute("message", message);
? ? ? ? ? ?request.getRequestDispatcher("/index.jsp").forward(request, response);
? ? ? ?}
? ? }
? ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ? doGet(request, response);
? ? }
}6、service 層,處理邏輯,在我們寫(xiě)代碼的時(shí)候,盡量的把邏輯處理寫(xiě)到service,最大的好處就是安全,畢竟寫(xiě)程序不只是實(shí)現(xiàn)功能那么簡(jiǎn)單。
接口:
package com.proven.service;
/**
?* @author ?曾煒龍 ?E-mail: 1501122784@qq.com
?* @date 創(chuàng)建時(shí)間:2017年6月26日 下午4:39:45?
?* @version 1.0?
?* @parameter ?
?* @since ?
?* @return ?
?*/
public interface UserService {
? ? int register(String name, String password, int age);
}實(shí)現(xiàn)類:這里我忘記判斷數(shù)據(jù)庫(kù)中是否已經(jīng)存在賬號(hào),判斷的話很簡(jiǎn)單,就是通過(guò)賬號(hào)去查數(shù)據(jù)庫(kù)中是否有相同的數(shù)據(jù),如果有了就返回給servlet:該賬號(hào)已存在,如果沒(méi)有的話就繼續(xù)注冊(cè)。
package com.proven.service.impl;
import com.proven.dao.UserDao;
import com.proven.dao.impl.UserDaoImpl;
import com.proven.model.User;
import com.proven.service.UserService;
/**
?* @author ?曾煒龍 ?E-mail: 1501122784@qq.com
?* @date 創(chuàng)建時(shí)間:2017年6月26日 下午4:40:01?
?* @version 1.0?
?* @parameter ?
?* @since ?
?* @return ?
?*/
public class UserServiceImpl implements UserService{
? ? @Override
? ? public int register(String name, String password, int age) {
? ? ? ? UserDao userDao = new UserDaoImpl();
? ? ? ? User user = new User();
? ? ? ? user.setName(name);
? ? ? ? user.setPassword(password);
? ? ? ? user.setAge(age);
? ? ? ? int info= userDao.register(user);
? ? ? ? return info;
? ? }
}持久層:dao
接口:
package com.proven.dao;
import com.proven.model.User;
public interface UserDao {
? ? int register(User user);
? ? /**
? ? ?* @param username
? ? ?* @return
? ? ?*/
? ? //int findUserByName(String username);
? ? /**
? ? ?* @param user
? ? ?* @return
? ? ?*/
? ? //int register(User user);
? ? /**
? ? ?* 登錄方法
? ? ?* @param username
? ? ?* @param password
? ? ?* @return
? ? ?*/
}實(shí)現(xiàn)類:
package com.proven.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.proven.dao.UserDao;
import com.proven.model.User;
public class UserDaoImpl implements UserDao {
? ? @Override
? ? public int register(User user) {
? ? ? ? PreparedStatement pstmt=null;
? ? ? ? Connection conn =null;
? ? ? ? ? try{ ??
? ? ? ? ? ? ? ? //加載MySql的驅(qū)動(dòng)類 ??
? ? ? ? ? ? ? ? Class.forName("com.mysql.jdbc.Driver") ; ??
? ? ? ? ? ? ? ? }catch(ClassNotFoundException e){ ??
? ? ? ? ? ? ? ? System.out.println("找不到驅(qū)動(dòng)程序類 ,加載驅(qū)動(dòng)失??!"); ??
? ? ? ? ? ? ? ? e.printStackTrace() ; ??
? ? ? ? ? ? ? ? } ??
? ? ? ? ? String url = "jdbc:mysql://localhost:3306/nokuangjia" ; ? ?
? ? ? ? ? ? ?String username = "root" ; ??
? ? ? ? ? ? ?String password = "" ;?
? ? ? ? ? ? ?String sql = "insert into t_t_user values(null,?,?,?)";
? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?conn = DriverManager.getConnection(url,username,password);
? ? ? ? ? ? ? ? ? pstmt = conn.prepareStatement(sql) ; ?
? ? ? ? ? ? ? ? ?pstmt.setString(1,user.getName() );
? ? ? ? ? ? ? ? ?pstmt.setString(2, user.getPassword());
? ? ? ? ? ? ? ? ?pstmt.setInt(3, user.getAge());
? ? ? ? ? ? ? ? ?int info = pstmt.executeUpdate();
? ? ? ? ? ? ? ? ?return info;
? ? ? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? ? ? ?System.out.println("數(shù)據(jù)庫(kù)連接失敗!"); ?
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? return -2;
? ? ? ? ? ? }finally {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? pstmt.close();
? ? ? ? ? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? conn.close();
? ? ? ? ? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? ? ? ? ? // TODO Auto-generated catch block
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? }
/*
? ? public int findUserByName(String username) {
? ? ? ? QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
? ? ? ? String sql = "select * from user where username = ?";
? ? ? ? try {
? ? ? ? ? ? User user = qr.query(sql, new BeanHandler<User>(User.class),
? ? ? ? ? ? ? ? ? ? username);
? ? ? ? ? ? if (user == null) {
? ? ? ? ? ? ? ? return 1;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? return -1;
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return -2;
? ? ? ? }
? ? }
? ? public int register(User user) {
? ? ? ? return 0;
? ? }*/
/* ?public int register(User user) {
? ? ? ? // 浣跨敤DBUtils灝唘ser瀵硅薄鍏ュ簱
? ? ? ? QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
? ? ? ? String sql = "insert into t_t_user values(null,?,?,?)";
? ? ? ? try {
? ? ? ? ? ? return qr.update(sql, user.getName(), user.getPassword(),
? ? ? ? ? ? ? ? ? ? user.getAge());
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? return -2;
? ? ? ? }
? ? }
? ? */
}在這里代碼就全部寫(xiě)好。經(jīng)過(guò)測(cè)試,運(yùn)行良好!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- javaweb實(shí)現(xiàn)注冊(cè)登錄頁(yè)面
- JavaWeb之Servlet注冊(cè)頁(yè)面的實(shí)現(xiàn)示例
- JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能(服務(wù)器)
- JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能
- JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)
- JavaWeb簡(jiǎn)單用戶登錄注冊(cè)實(shí)例代碼(有驗(yàn)證碼)
- JavaWeb 網(wǎng)上書(shū)店 注冊(cè)和登陸功能案例詳解
- JavaWeb表單注冊(cè)界面的實(shí)現(xiàn)方法
- JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
- Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能
相關(guān)文章
SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié)
這篇文章主要介紹了SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
SpringBoot如何使用MyBatis-Plus實(shí)現(xiàn)高效的數(shù)據(jù)訪問(wèn)層
在開(kāi)發(fā) Spring Boot 應(yīng)用時(shí),數(shù)據(jù)訪問(wèn)是不可或缺的部分,本文將詳細(xì)介紹如何在 Spring Boot 中使用 MyBatis-Plus,并結(jié)合具體代碼示例來(lái)講解它的使用方法和常見(jiàn)配置,希望對(duì)大家有一定的幫助2025-04-04
Java語(yǔ)言實(shí)現(xiàn)反轉(zhuǎn)鏈表代碼示例
這篇文章主要介紹了Java語(yǔ)言實(shí)現(xiàn)反轉(zhuǎn)鏈表代碼示例,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。2017-10-10
Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用
在開(kāi)發(fā)過(guò)程中我們常常會(huì)用到兩個(gè)數(shù)據(jù)庫(kù),一個(gè)數(shù)據(jù)用來(lái)實(shí)現(xiàn)一些常規(guī)的增刪改查,另外一個(gè)數(shù)據(jù)庫(kù)用來(lái)實(shí)時(shí)存數(shù)據(jù)。進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)分析??梢宰x寫(xiě)分離??梢愿玫膬?yōu)化和提高效率;或者兩個(gè)數(shù)據(jù)存在業(yè)務(wù)分離的時(shí)候也需要多個(gè)數(shù)據(jù)源來(lái)實(shí)現(xiàn)2022-06-06
springboot?log4j2.xml如何讀取application.yml中屬性值
這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java?byte數(shù)組轉(zhuǎn)String的幾種常用方法
在Java中數(shù)組是一種非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它可以用來(lái)存儲(chǔ)多個(gè)相同類型的數(shù)據(jù),有時(shí)候,我們需要將數(shù)組轉(zhuǎn)換為字符串,以便于輸出或者傳遞給其他方法,這篇文章主要給大家介紹了關(guān)于java?byte數(shù)組轉(zhuǎn)String的幾種常用方法,需要的朋友可以參考下2024-09-09

