DML Create Accounts

Научимся создавать учетные записи с помощью DML для нашего интернет-магазина.

Записи будем держать в таблице Users в БД Oracle. Предполагается что схема создана и netBeans настроен для работы с ней.

В БД создадим тиблицу Users, c такой схемой:

int (11): id,

varchar(128): name,

varchar(128): password,

int(1): status default (1),

Пароль пока храним в открытом виде, хотя неплохо бы добавить шифрование.

Возникает пару моментов:

auto_increment для идентификатора пользователя в Oracle нет, вместо него необходимо создать триггер.

Дальнейшую реализацию сервиса сделаем на основе Spring MVC.

Нам понадобятся контроллер RegisterController, который, при заходе на страницу register.jsp будет вызывать модель UsersService и пытаться в ней регистрировать пользователя вызовом userRegister. Если регистрация будет успешной, то перенаправим пользователя на index.jsp.

Содержимое модели UsersService: package jperm.service;

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException;

/** * * @author ars */ public class UsersService { private int usersCount; private Connection connection; private Connection getConnection throws NamingException, SQLException { if (connection == null ) { Context initctx=new InitialContext; Context envCtx=(Context)initctx.lookup("java:comp/env"); javax.sql.DataSource ds=(javax.sql.DataSource)envCtx.lookup("jpermdb"); Connection conn = ds.getConnection; connection = conn; return connection; }       return connection; }   public int getUsersCount { return usersCount; }

public void setUsersCount(int usersCount) { this.usersCount = usersCount; }   public Integer loadUsersCount throws SQLException, NamingException { Connection conn = getConnection; Statement stmt = null; stmt = conn.createStatement; java.sql.ResultSet result = stmt.executeQuery("SELECT COUNT(*) FROM USERS"); if (result.next) { return Integer.parseInt(result.getString(1)); }       return new Integer(0); }   public Boolean userExists(String name) throws NamingException, SQLException { Connection conn = getConnection; PreparedStatement pst = conn.prepareStatement("SELECT status FROM USERS WHERE name = ?"); pst.setString(1,name); ResultSet result = pst.executeQuery; if (result.next) { return true; }       return false; }   public Boolean userRegister(String name, String password) throws SQLException, NamingException { if ( userExists(name) ) { return false; }       Connection conn = getConnection; PreparedStatement pst = conn.prepareStatement("INSERT INTO USERS (id, name, password, status) VALUES (users_seq.nextval, ?, ?, 1)"); pst.setString(1,name); pst.setString(2,password); pst.executeUpdate; return true; } }

Содержимое RegisterController: package jperm.controller;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jperm.service.UsersService; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;

/** * * @author ars */ public class RegisterController implements Controller {

@Override public ModelAndView handleRequest(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception { ModelAndView mav = new ModelAndView("register"); UsersService us = new UsersService; mav.addObject("usersCount",us.loadUsersCount); if (hsr.getParameter("name") != null && hsr.getParameter("password") != null) { if ( us.userRegister(hsr.getParameter("name"), hsr.getParameter("password") ) ) { return new ModelAndView("index");      // Если удалось зарегестрировать пользователя. //fixme: лучше было бы залогинеть пользователя. }           // Регистрация может быть не успешной, например, пользователь уже может существовать. mav.addObject("name", hsr.getParameter("name")); mav.addObject("pssword",hsr.getParameter("password")); if (us.userExists(hsr.getParameter("name"))) { mav.addObject("userExists","Такой пользователь существует"); }           }        return mav; } }

Содержимое register.jsp: <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>  Registrations Start registrations! Всего ${usersCount} пользователей ${userExists}   имя  пароль  '/>

Содержимое dispatcher-servlet.xml:  <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">



 indexController userRegisterController



 