今天写了一个注册功能,没有用任何框架!发现不会写了,中间查了好几次百度。不过还是顺利的写完并且跑起来了。在这里记录一下。我认为有时候写这些代码还是对我们理解框架很有帮助的,因为框架也是按照这些,对基础进行封装后得到的。
首先是环境的搭建
1、环境的搭建:我用的jdk1.8 tomcat 7.0 eclipse neno 数据库用的是mysql。
2、创建一个动态的web工程(这个应该都会的,这里就不再截图说明了)
3、数据库的创建
我这里创了一个名为t_t_user 的表,里面的字段也很简单,就name password age 三个。
4、数据库创建好之后就开始写前端代码
前端写的很简单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页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、前端代码写好后就可以写对应的,上传的请求的servlet,在这里我只判断了姓名不能为空,其他的就一样的写就好了。还有这里有个问题,就是我没有进行编码处理。在这里可能出现中文乱码的问题,可以直接在servlet中加入处理中文乱码的语句,或者是写个过滤器,这里我就不再赘述了。
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="注册成功";
}else if(info ==0){
message="注册失败";
}else if(info==-2){
message="sql错误";
}
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 层,处理逻辑,在我们写代码的时候,尽量的把逻辑处理写到service,最大的好处就是安全,毕竟写程序不只是实现功能那么简单。
接口:
package com.proven.service;
/**
* @author 曾炜龙 E-mail: [email protected]
* @date 创建时间:2017年6月26日 下午4:39:45
* @version 1.0
* @parameter
* @since
* @return
*/
public interface UserService {
int register(String name, String password, int age);
}
实现类:这里我忘记判断数据库中是否已经存在账号,判断的话很简单,就是通过账号去查数据库中是否有相同的数据,如果有了就返回给servlet:该账号已存在,如果没有的话就继续注册。
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: [email protected]
* @date 创建时间: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
*/
}
实现类:
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的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
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("数据库连接失败!");
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.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;
}
}
*/
}
在这里代码就全部写好。经过测试,运行良好!哈哈