学生管理系统之简化学生版(练习版)
JAVA代码
Controller层
StuController
import com. gl. sms. service. impl. StuServiceImpl ;
import com. gl. sms. servlet. BaseServlet ;
import javax. servlet. ServletException ;
import javax. servlet. annotation. WebServlet ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. io. IOException ;
import java. lang. reflect. InvocationTargetException ;
@WebServlet ( "/StuController" )
public class StuController extends BaseServlet {
private StuServiceImpl stuService = new StuServiceImpl ( ) ;
public void register ( HttpServletRequest request, HttpServletResponse response) throws IOException , InvocationTargetException , IllegalAccessException , ServletException {
boolean register = stuService. register ( request, response) ;
if ( register) {
response. sendRedirect ( "login.jsp" ) ;
} else {
request. getRequestDispatcher ( "register.jsp" ) . forward ( request, response) ;
}
}
public void initModify ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
stuService. initModify ( request, response) ;
request. getRequestDispatcher ( "stuinfo.jsp" ) . forward ( request, response) ;
}
public void modify ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
stuService. modify ( request, response) ;
String role = ( String ) request. getSession ( ) . getAttribute ( "role" ) ;
if ( "student" . equals ( role) ) {
response. sendRedirect ( "index.jsp" ) ;
} else if ( "teacher" . equals ( role) ) {
response. sendRedirect ( "StuController?action=getStuList&curPage=1" ) ;
}
}
public void getStuList ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
stuService. getStuList ( request) ;
request. getRequestDispatcher ( "stulist.jsp" ) . forward ( request, response) ;
}
public void delete ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
stuService. delete ( request) ;
response. sendRedirect ( "StuController?action=getStuList&curPage=1" ) ;
}
}
TeaController
import com. gl. sms. servlet. BaseServlet ;
import javax. servlet. annotation. WebServlet ;
@WebServlet ( "/TeaController" )
public class TeaController extends BaseServlet {
}
UserController
import com. gl. sms. service. impl. UserServiceImpl ;
import com. gl. sms. servlet. BaseServlet ;
import javax. servlet. ServletException ;
import javax. servlet. annotation. WebServlet ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. io. IOException ;
@WebServlet ( "/UserController" )
public class UserController extends BaseServlet {
private UserServiceImpl userService = new UserServiceImpl ( ) ;
public void drawCode ( HttpServletRequest request, HttpServletResponse response) {
userService. drawCode ( request, response) ;
}
public void login ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
boolean login = userService. login ( request, response) ;
if ( login) {
response. sendRedirect ( "index.jsp" ) ;
} else {
request. getRequestDispatcher ( "login.jsp" ) . forward ( request, response) ;
}
}
public void safeExit ( HttpServletRequest request, HttpServletResponse response) throws IOException {
userService. safeExit ( request, response) ;
response. sendRedirect ( "welcome.html" ) ;
}
public void repassword ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
boolean repassword = userService. repassword ( request, response) ;
if ( repassword) {
response. sendRedirect ( "UserController?action=safeExit" ) ;
} else {
request. getRequestDispatcher ( "repassword.jsp" ) . forward ( request, response) ;
}
}
}
Mapper层
interface接口
IStuMapper
import com. gl. sms. pojo. vo. Student ;
import java. util. List ;
public interface IStuMapper {
public int add ( Student stu) ;
public int delete ( String username) ;
public int update ( Student stu) ;
public Student query ( String username) ;
public Student query ( String username, String password) ;
public List < Student > query ( int offset, int limit) ;
public int getCount ( ) ;
}
ITeaMapper
import com. gl. sms. pojo. vo. Teacher ;
public interface ITeaMapper {
public int update ( Teacher tea) ;
public Teacher query ( String username) ;
public Teacher query ( String username, String password) ;
}
Impl
StuMapperImpl
import com. gl. sms. mapper. IStuMapper ;
import com. gl. sms. pojo. vo. Student ;
import com. gl. sms. utils. DBUtil ;
import java. sql. Connection ;
import java. sql. PreparedStatement ;
import java. sql. ResultSet ;
import java. sql. SQLException ;
import java. util. List ;
public class StuMapperImpl implements IStuMapper {
@Override
public int add ( Student stu) {
String sql = "insert into student(username,password,name,sex,age,hobbys) values(?,?,?,?,?,?)" ;
int num = DBUtil . commonUpdate ( sql, stu. getUsername ( ) , stu. getPassword ( ) , stu. getName ( ) , stu. getSex ( ) , stu. getAge ( ) , stu. getHobbys ( ) ) ;
return num;
}
@Override
public int delete ( String username) {
String sql = "delete from student where username=?" ;
int num = DBUtil . commonUpdate ( sql, username) ;
return num;
}
@Override
public int update ( Student stu) {
String sql = "update student set password=?,name=?,sex=?,age=?,hobbys=? where username=?" ;
int num = DBUtil . commonUpdate ( sql, stu. getPassword ( ) , stu. getName ( ) , stu. getSex ( ) , stu. getAge ( ) , stu. getHobbys ( ) , stu. getUsername ( ) ) ;
return num;
}
@Override
public Student query ( String username) {
String sql = "select * from student where username=?" ;
Student stu = DBUtil . commonQueryOfObj ( Student . class , sql, username) ;
return stu;
}
@Override
public Student query ( String username, String password) {
String sql = "select * from student where username=? and password=?" ;
Student stu = DBUtil . commonQueryOfObj ( Student . class , sql, username, password) ;
return stu;
}
@Override
public List < Student > query ( int offset, int limit) {
String sql = "select * from student limit ?,?" ;
List < Student > stuList = DBUtil . commonQueryOfList ( Student . class , sql, offset, limit) ;
return stuList;
}
@Override
public int getCount ( ) {
String sql = "select count(username) from student" ;
int count = DBUtil . getCount ( sql) ;
return count;
}
public static void main ( String [ ] args) throws Exception {
Connection connection = DBUtil . getConnection ( ) ;
String sql = "select * from student limit ?,?" ;
PreparedStatement statement = connection. prepareStatement ( sql) ;
statement. setInt ( 1 , 0 ) ;
statement. setInt ( 2 , 10 ) ;
ResultSet resultSet = statement. executeQuery ( ) ;
while ( resultSet. next ( ) ) {
String username = resultSet. getString ( "username" ) ;
System . out. println ( username) ;
}
}
}
TeaMapperImpl
import com. gl. sms. mapper. ITeaMapper ;
import com. gl. sms. pojo. vo. Teacher ;
import com. gl. sms. utils. DBUtil ;
public class TeaMapperImpl implements ITeaMapper {
@Override
public int update ( Teacher tea) {
String sql = "update teacher set password=?,name=?,sex=?,age=?,course=? where username=?" ;
int num = DBUtil . commonUpdate ( sql, tea. getPassword ( ) , tea. getName ( ) , tea. getSex ( ) , tea. getAge ( ) , tea. getCourse ( ) , tea. getUsername ( ) ) ;
return num;
}
@Override
public Teacher query ( String username) {
String sql = "select * from teacher where username=?" ;
Teacher tea = DBUtil . commonQueryOfObj ( Teacher . class , sql, username) ;
return tea;
}
@Override
public Teacher query ( String username, String password) {
String sql = "select * from teacher where username=? and password=?" ;
Teacher tea = DBUtil . commonQueryOfObj ( Teacher . class , sql, username, password) ;
return tea;
}
}
pojo实体
dto
StuDto
import com. gl. sms. pojo. vo. Student ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class StuDto {
private Student stu;
private String sex;
private String hobbys;
}
vo
Page
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import java. util. List ;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Page < T > {
private String url;
private int curPage;
private int totalPage;
private int curCount;
private List < T > list;
}
Student
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student extends User {
private String hobbys;
public Student ( String username, String password, String name, String sex, int age, String hobbys) {
super ( username, password, name, sex, age) ;
this . hobbys = hobbys;
}
}
Teacher
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Teacher extends User {
private String course;
}
User
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
private String username;
private String password;
private String name;
private String sex;
private int age;
}
Service层
interface接口
IStuService
import com. gl. sms. pojo. vo. Student ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. lang. reflect. InvocationTargetException ;
public interface IStuService {
public boolean isRegister ( String username) ;
public boolean register ( HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException , IllegalAccessException ;
public Student login ( HttpServletRequest request, HttpServletResponse response) ;
public void initModify ( HttpServletRequest request, HttpServletResponse response) ;
public void modify ( HttpServletRequest request, HttpServletResponse response) ;
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) ;
public void delete ( HttpServletRequest request) ;
public void getStuList ( HttpServletRequest request) ;
public int getTotalPage ( int curCount) ;
}
ITeaService
import com. gl. sms. pojo. vo. Teacher ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
public interface ITeaService {
public Teacher login ( HttpServletRequest request, HttpServletResponse response) ;
public Teacher initModify ( HttpServletRequest request, HttpServletResponse response) ;
public boolean modify ( HttpServletRequest request, HttpServletResponse response) ;
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) ;
}
IUserService
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
public interface IUserService {
public boolean login ( HttpServletRequest request, HttpServletResponse response) ;
public void drawCode ( HttpServletRequest request, HttpServletResponse response) ;
public void rememberMe ( HttpServletRequest request, HttpServletResponse response, String name, String role, String username) ;
public void safeExit ( HttpServletRequest request, HttpServletResponse response) ;
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) ;
}
Impl
StuServiceImpl
import com. gl. sms. mapper. impl. StuMapperImpl ;
import com. gl. sms. pojo. dto. StuDto ;
import com. gl. sms. pojo. vo. Page ;
import com. gl. sms. pojo. vo. Student ;
import com. gl. sms. service. IStuService ;
import com. gl. sms. utils. CookieUtil ;
import com. gl. sms. utils. DtoUtil ;
import com. gl. sms. utils. HobbysUtil ;
import org. apache. commons. beanutils. BeanUtils ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. lang. reflect. InvocationTargetException ;
import java. util. List ;
import java. util. Map ;
public class StuServiceImpl implements IStuService {
private StuMapperImpl stuMapper = new StuMapperImpl ( ) ;
@Override
public boolean isRegister ( String username) {
Student stu = stuMapper. query ( username) ;
if ( stu == null ) {
return true ;
}
return false ;
}
@Override
public boolean register ( HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException , IllegalAccessException {
Map < String , String [ ] > parameterMap = request. getParameterMap ( ) ;
Student stu = new Student ( ) ;
BeanUtils . populate ( stu, parameterMap) ;
boolean register = isRegister ( stu. getUsername ( ) ) ;
if ( register) {
stuMapper. add ( stu) ;
return true ;
} else {
request. setAttribute ( "msg" , "注册失败 -- 账号已存在..." ) ;
return false ;
}
}
@Override
public Student login ( HttpServletRequest request, HttpServletResponse response) {
String username = request. getParameter ( "username" ) ;
String password = request. getParameter ( "password" ) ;
Student stu = stuMapper. query ( username, password) ;
return stu;
}
@Override
public void initModify ( HttpServletRequest request, HttpServletResponse response) {
String username = request. getParameter ( "username" ) ;
Student stu = stuMapper. query ( username) ;
request. setAttribute ( "stu" , stu) ;
}
@Override
public void modify ( HttpServletRequest request, HttpServletResponse response) {
String username = request. getParameter ( "username" ) ;
String name = request. getParameter ( "name" ) ;
String sex = request. getParameter ( "sex" ) ;
String age = request. getParameter ( "age" ) ;
String [ ] hobbys = request. getParameterValues ( "hobbys" ) ;
Student stu = stuMapper. query ( username) ;
stu. setName ( name) ;
stu. setSex ( sex) ;
stu. setAge ( Integer . parseInt ( age) ) ;
stu. setHobbys ( HobbysUtil . getHobbys ( hobbys) ) ;
stuMapper. update ( stu) ;
String role = ( String ) request. getSession ( ) . getAttribute ( "role" ) ;
if ( "student" . equals ( role) ) {
request. getSession ( ) . setAttribute ( "name" , name) ;
response. addCookie ( CookieUtil . createCookie ( "name" , name, 60 * 60 * 24 * 10 ) ) ;
}
}
@Override
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) {
String username = request. getParameter ( "username" ) ;
String password = request. getParameter ( "password" ) ;
String newpassword = request. getParameter ( "newpassword" ) ;
String repassword = request. getParameter ( "repassword" ) ;
if ( ! newpassword. equals ( repassword) ) {
request. setAttribute ( "msg" , "修改密码失败 -- 新密码与确认密码不一致" ) ;
return false ;
}
if ( password. equals ( newpassword) ) {
request. setAttribute ( "msg" , "修改密码失败 -- 原密码与新密码一致" ) ;
return false ;
}
Student stu = stuMapper. query ( username, password) ;
if ( stu == null ) {
request. setAttribute ( "msg" , "修改密码失败 -- 原密码错误" ) ;
return false ;
}
stu. setPassword ( newpassword) ;
stuMapper. update ( stu) ;
return true ;
}
@Override
public void delete ( HttpServletRequest request) {
String username = request. getParameter ( "username" ) ;
stuMapper. delete ( username) ;
}
@Override
public void getStuList ( HttpServletRequest request) {
int curPage = Integer . parseInt ( request. getParameter ( "curPage" ) ) ;
int curCount = 10 ;
int offset = ( curPage- 1 ) * curCount;
int totalPage = getTotalPage ( curCount) ;
List < Student > stuList = stuMapper. query ( offset, curCount) ;
List < StuDto > stuDtoList = DtoUtil . getStuDtoList ( stuList) ;
String url = "StuController?action=getStuList&curPage=" ;
Page < StuDto > page = new Page < > ( url, curPage, totalPage, curCount, stuDtoList) ;
request. setAttribute ( "page" , page) ;
}
@Override
public int getTotalPage ( int curCount) {
int count = stuMapper. getCount ( ) ;
if ( count % curCount == 0 ) {
return count/ curCount;
} else {
return count/ curCount + 1 ;
}
}
}
TeaServiceImpl
import com. gl. sms. mapper. impl. TeaMapperImpl ;
import com. gl. sms. pojo. vo. Teacher ;
import com. gl. sms. service. ITeaService ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
public class TeaServiceImpl implements ITeaService {
private TeaMapperImpl teaMapper = new TeaMapperImpl ( ) ;
@Override
public Teacher login ( HttpServletRequest request, HttpServletResponse response) {
String username = request. getParameter ( "username" ) ;
String password = request. getParameter ( "password" ) ;
Teacher tea = teaMapper. query ( username, password) ;
return tea;
}
@Override
public Teacher initModify ( HttpServletRequest request, HttpServletResponse response) {
return null ;
}
@Override
public boolean modify ( HttpServletRequest request, HttpServletResponse response) {
return false ;
}
@Override
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) {
return false ;
}
}
UserServiceImpl
import com. gl. sms. pojo. vo. User ;
import com. gl. sms. service. IUserService ;
import com. gl. sms. utils. CookieUtil ;
import javax. imageio. ImageIO ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import javax. servlet. http. HttpSession ;
import java. awt. * ;
import java. awt. image. BufferedImage ;
import java. io. IOException ;
import java. util. Random ;
public class UserServiceImpl implements IUserService {
private StuServiceImpl stuService = new StuServiceImpl ( ) ;
private TeaServiceImpl teaService = new TeaServiceImpl ( ) ;
@Override
public boolean login ( HttpServletRequest request, HttpServletResponse response) {
String code = request. getParameter ( "code" ) ;
String systemCode = ( String ) request. getSession ( ) . getAttribute ( "systemCode" ) ;
if ( systemCode. equalsIgnoreCase ( code) ) {
String role = request. getParameter ( "role" ) ;
User user = null ;
if ( "student" . equals ( role) ) {
user = stuService. login ( request, response) ;
} else if ( "teacher" . equals ( role) ) {
user = teaService. login ( request, response) ;
}
if ( user != null ) {
HttpSession session = request. getSession ( ) ;
session. setAttribute ( "name" , user. getName ( ) ) ;
session. setAttribute ( "role" , role) ;
session. setAttribute ( "username" , user. getUsername ( ) ) ;
String rememberMe = request. getParameter ( "rememberMe" ) ;
if ( rememberMe != null ) {
rememberMe ( request, response, user. getName ( ) , role, user. getUsername ( ) ) ;
}
return true ;
} else {
request. setAttribute ( "msg" , "登录失败 -- 账号或密码错误..." ) ;
}
} else {
request. setAttribute ( "msg" , "登录失败 -- 验证码错误..." ) ;
}
return false ;
}
@Override
public void drawCode ( HttpServletRequest request, HttpServletResponse response) {
int width = 120 ;
int height = 50 ;
BufferedImage image = new BufferedImage ( width, height, BufferedImage . TYPE_INT_RGB ) ;
Graphics graphics = image. getGraphics ( ) ;
graphics. setColor ( Color . BLUE ) ;
graphics. fillRect ( 0 , 0 , width, height) ;
Random ran = new Random ( ) ;
Color [ ] colors = { Color . GREEN , Color . PINK , Color . RED , Color . CYAN , Color . WHITE , Color . ORANGE } ;
String [ ] codes = { "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" } ;
StringBuffer sb = new StringBuffer ( ) ;
for ( int i = 0 ; i < 4 ; i++ ) {
Color color = colors[ ran. nextInt ( colors. length) ] ;
graphics. setColor ( color) ;
graphics. setFont ( new Font ( "宋体" , Font . BOLD , 20 + ran. nextInt ( 20 ) ) ) ;
String code = codes[ ran. nextInt ( codes. length) ] ;
sb. append ( code) ;
graphics. drawString ( code, 25 + 20 * i, 20 + ran. nextInt ( 20 ) ) ;
}
HttpSession session = request. getSession ( ) ;
session. setAttribute ( "systemCode" , sb. toString ( ) ) ;
graphics. setColor ( Color . YELLOW ) ;
for ( int i = 0 ; i < 5 ; i++ ) {
graphics. drawLine ( ran. nextInt ( width) , ran. nextInt ( height) , ran. nextInt ( width) , ran. nextInt ( height) ) ;
}
try {
ImageIO . write ( image, "jpg" , response. getOutputStream ( ) ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
@Override
public void rememberMe ( HttpServletRequest request, HttpServletResponse response, String name, String role, String username) {
response. addCookie ( CookieUtil . createCookie ( "name" , name, 60 * 60 * 24 * 10 ) ) ;
response. addCookie ( CookieUtil . createCookie ( "role" , role, 60 * 60 * 24 * 10 ) ) ;
response. addCookie ( CookieUtil . createCookie ( "username" , username, 60 * 60 * 24 * 10 ) ) ;
}
@Override
public void safeExit ( HttpServletRequest request, HttpServletResponse response) {
response. addCookie ( CookieUtil . createCookie ( "name" , "" , 0 ) ) ;
response. addCookie ( CookieUtil . createCookie ( "role" , "" , 0 ) ) ;
response. addCookie ( CookieUtil . createCookie ( "username" , "" , 0 ) ) ;
HttpSession session = request. getSession ( ) ;
session. removeAttribute ( "name" ) ;
session. removeAttribute ( "role" ) ;
session. removeAttribute ( "username" ) ;
}
@Override
public boolean repassword ( HttpServletRequest request, HttpServletResponse response) {
String role = request. getParameter ( "role" ) ;
boolean repassword = false ;
if ( "student" . equals ( role) ) {
repassword = stuService. repassword ( request, response) ;
} else if ( "teacher" . equals ( role) ) {
repassword = teaService. repassword ( request, response) ;
}
return repassword;
}
}
Servlet
BaseServlet
import javax. servlet. ServletException ;
import javax. servlet. http. HttpServlet ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
import java. io. IOException ;
import java. lang. reflect. InvocationTargetException ;
import java. lang. reflect. Method ;
public class BaseServlet extends HttpServlet {
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
this . doPost ( request, response) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
request. setCharacterEncoding ( "UTF-8" ) ;
response. setContentType ( "text/html;charset=UTF-8" ) ;
String action = request. getParameter ( "action" ) ;
Class < ? extends BaseServlet > clazz = this . getClass ( ) ;
try {
Method method = clazz. getDeclaredMethod ( action, HttpServletRequest . class , HttpServletResponse . class ) ;
method. setAccessible ( true ) ;
method. invoke ( this , request, response) ;
} catch ( NoSuchMethodException e) {
e. printStackTrace ( ) ;
} catch ( IllegalAccessException e) {
e. printStackTrace ( ) ;
} catch ( InvocationTargetException e) {
e. printStackTrace ( ) ;
}
}
}
utilS工具类
DBUtil
import com. alibaba. druid. pool. DruidDataSource ;
import java. io. IOException ;
import java. lang. reflect. Field ;
import java. sql. * ;
import java. util. ArrayList ;
import java. util. List ;
import java. util. Properties ;
public class DBUtil {
private static DruidDataSource dataSource;
static {
Properties properties = new Properties ( ) ;
try {
properties. load ( DBUtil . class . getClassLoader ( ) . getResourceAsStream ( "DBConfig.properties" ) ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
String driverName = properties. getProperty ( "driverName" ) ;
String url = properties. getProperty ( "url" ) ;
String username = properties. getProperty ( "username" ) ;
String password = properties. getProperty ( "password" ) ;
int maxCapacity = Integer . parseInt ( properties. getProperty ( "maxCapacity" ) ) ;
dataSource = new DruidDataSource ( ) ;
dataSource. setDriverClassName ( driverName) ;
dataSource. setUrl ( url) ;
dataSource. setUsername ( username) ;
dataSource. setPassword ( password) ;
dataSource. setMaxActive ( maxCapacity) ;
}
private static ThreadLocal < Connection > local = new ThreadLocal < > ( ) ;
public static void startTransaction ( ) throws SQLException {
Connection connection = getConnection ( ) ;
connection. setAutoCommit ( false ) ;
}
public static void commit ( ) throws SQLException {
Connection connection = local. get ( ) ;
if ( connection != null ) {
connection. commit ( ) ;
connection. close ( ) ;
local. set ( null ) ;
}
}
public static void rollback ( ) throws SQLException {
Connection connection = local. get ( ) ;
if ( connection != null ) {
connection. rollback ( ) ;
connection. close ( ) ;
local. set ( null ) ;
}
}
public static Connection getConnection ( ) throws SQLException {
Connection connection = local. get ( ) ;
if ( connection == null ) {
connection = dataSource. getConnection ( ) ;
connection. setTransactionIsolation ( Connection . TRANSACTION_REPEATABLE_READ ) ;
local. set ( connection) ;
}
return connection;
}
public static void close ( Connection connection, Statement statement, ResultSet resultSet) {
if ( resultSet != null ) {
try {
resultSet. close ( ) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
}
}
if ( statement != null ) {
try {
statement. close ( ) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
}
}
if ( connection != null ) {
try {
if ( connection. getAutoCommit ( ) ) {
connection. close ( ) ;
local. set ( null ) ;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
}
}
}
public static int commonUpdate ( String sql, Object . . . params) {
Connection connection = null ;
PreparedStatement statement = null ;
try {
connection = getConnection ( ) ;
statement = connection. prepareStatement ( sql) ;
setParameter ( statement, params) ;
int num = statement. executeUpdate ( ) ;
return num;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
close ( connection, statement, null ) ;
}
return - 1 ;
}
public static int commonInsert ( String sql, Object . . . params) {
Connection connection = null ;
PreparedStatement statement = null ;
try {
connection = getConnection ( ) ;
statement = connection. prepareStatement ( sql, PreparedStatement . RETURN_GENERATED_KEYS ) ;
setParameter ( statement, params) ;
statement. executeUpdate ( ) ;
ResultSet resultSet = statement. getGeneratedKeys ( ) ;
if ( resultSet. next ( ) ) {
int primaryKey = resultSet. getInt ( 1 ) ;
return primaryKey;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
close ( connection, statement, null ) ;
}
return - 1 ;
}
public static < T > List < T > commonQueryOfList ( Class < T > clazz, String sql, Object . . . params) {
Connection connection = null ;
PreparedStatement statement = null ;
ResultSet resultSet = null ;
try {
connection = getConnection ( ) ;
statement = connection. prepareStatement ( sql) ;
setParameter ( statement, params) ;
resultSet = statement. executeQuery ( ) ;
List < T > list = new ArrayList < > ( ) ;
ResultSetMetaData metaData = resultSet. getMetaData ( ) ;
int columnCount = metaData. getColumnCount ( ) ;
while ( resultSet. next ( ) ) {
T obj = clazz. newInstance ( ) ;
for ( int i = 1 ; i <= columnCount; i++ ) {
String columnName = metaData. getColumnName ( i) ;
Object columnValue = resultSet. getObject ( columnName) ;
Field field = getField ( clazz, columnName) ;
if ( field != null ) {
field. setAccessible ( true ) ;
field. set ( obj, columnValue) ;
}
}
list. add ( obj) ;
}
return list;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} catch ( IllegalAccessException e) {
e. printStackTrace ( ) ;
} catch ( InstantiationException e) {
e. printStackTrace ( ) ;
} finally {
close ( connection, statement, resultSet) ;
}
return null ;
}
public static < T > T commonQueryOfObj ( Class < T > clazz, String sql, Object . . . params) {
Connection connection = null ;
PreparedStatement statement = null ;
ResultSet resultSet = null ;
try {
connection = getConnection ( ) ;
statement = connection. prepareStatement ( sql) ;
setParameter ( statement, params) ;
resultSet = statement. executeQuery ( ) ;
ResultSetMetaData metaData = resultSet. getMetaData ( ) ;
int columnCount = metaData. getColumnCount ( ) ;
if ( resultSet. next ( ) ) {
T obj = clazz. newInstance ( ) ;
for ( int i = 1 ; i <= columnCount; i++ ) {
String columnName = metaData. getColumnName ( i) ;
Object columnValue = resultSet. getObject ( columnName) ;
Field field = getField ( clazz, columnName) ;
if ( field != null ) {
field. setAccessible ( true ) ;
field. set ( obj, columnValue) ;
}
}
return obj;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} catch ( IllegalAccessException e) {
e. printStackTrace ( ) ;
} catch ( InstantiationException e) {
e. printStackTrace ( ) ;
} finally {
close ( connection, statement, resultSet) ;
}
return null ;
}
private static void setParameter ( PreparedStatement statement, Object . . . params) throws SQLException {
for ( int i = 0 ; i < params. length; i++ ) {
statement. setObject ( i+ 1 , params[ i] ) ;
}
}
private static Field getField ( Class < ? > clazz, String fieldName) {
for ( Class < ? > c = clazz; c != null ; c= c. getSuperclass ( ) ) {
try {
Field field = c. getDeclaredField ( fieldName) ;
return field;
} catch ( NoSuchFieldException e) {
}
}
return null ;
}
public static int getCount ( String sql) {
Connection connection = null ;
PreparedStatement statement = null ;
ResultSet resultSet = null ;
try {
connection = DBUtil . getConnection ( ) ;
statement = connection. prepareStatement ( sql) ;
resultSet = statement. executeQuery ( ) ;
if ( resultSet. next ( ) ) {
int count = resultSet. getInt ( 1 ) ;
return count;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
DBUtil . close ( connection, statement, resultSet) ;
}
return - 1 ;
}
}
DtoUtil
import com. gl. sms. pojo. dto. StuDto ;
import com. gl. sms. pojo. vo. Student ;
import java. util. ArrayList ;
import java. util. List ;
public class DtoUtil {
public static StuDto getStuDto ( Student stu) {
StuDto stuDto = new StuDto ( ) ;
stuDto. setStu ( stu) ;
if ( stu. getSex ( ) . equals ( "man" ) ) {
stuDto. setSex ( "男" ) ;
} else if ( stu. getSex ( ) . equals ( "woman" ) ) {
stuDto. setSex ( "女" ) ;
}
String hobbys = stu. getHobbys ( ) ;
hobbys = hobbys. replaceAll ( "football" , "足球" ) ;
hobbys = hobbys. replaceAll ( "basketball" , "篮球" ) ;
hobbys = hobbys. replaceAll ( "shop" , "购物" ) ;
stuDto. setHobbys ( hobbys) ;
return stuDto;
}
public static List < StuDto > getStuDtoList ( List < Student > stuList) {
ArrayList < StuDto > stuDtoList = new ArrayList < > ( ) ;
for ( Student stu : stuList) {
StuDto stuDto = getStuDto ( stu) ;
stuDtoList. add ( stuDto) ;
}
return stuDtoList;
}
}
HobbysUtil
public class HobbysUtil {
public static String getHobbys ( String [ ] hobbys) {
StringBuffer sb = new StringBuffer ( ) ;
for ( String hobby: hobbys) {
sb. append ( hobby) ;
sb. append ( "," ) ;
}
sb. deleteCharAt ( sb. length ( ) - 1 ) ;
return sb. toString ( ) ;
}
}
resources配置文件
driverName= com. mysql. jdbc. Driver
url= jdbc: mysql: / / localhost: 3306 / javaee? useUnicode= true & characterEncoding= utf8& rewriteBatchedStatements= true
username= root
password= root
maxCapacity= 20
Web前端
web.xml
<! DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
< web-app>
< display-name> Archetype Created Web Application</ display-name>
< welcome-file-list>
< welcome-file> welcome.html</ welcome-file>
</ welcome-file-list>
</ web-app>
pop.xml
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0</ modelVersion>
< groupId> com.gl.sms</ groupId>
< artifactId> xueshengguanlixitong</ artifactId>
< version> 1.0-SNAPSHOT</ version>
< packaging> war</ packaging>
< name> xueshengguanlixitong Maven Webapp</ name>
< url> http://www.example.com</ url>
< properties>
< project.build.sourceEncoding> UTF-8</ project.build.sourceEncoding>
< maven.compiler.source> 1.8</ maven.compiler.source>
< maven.compiler.target> 1.8</ maven.compiler.target>
</ properties>
< dependencies>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.11</ version>
< scope> test</ scope>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.10</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.25</ version>
</ dependency>
< dependency>
< groupId> com.alibaba</ groupId>
< artifactId> druid</ artifactId>
< version> 1.1.10</ version>
</ dependency>
< dependency>
< groupId> javax.servlet</ groupId>
< artifactId> javax.servlet-api</ artifactId>
< version> 4.0.1</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> commons-beanutils</ groupId>
< artifactId> commons-beanutils</ artifactId>
< version> 1.9.3</ version>
</ dependency>
< dependency>
< groupId> javax.servlet</ groupId>
< artifactId> jsp-api</ artifactId>
< version> 2.0</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> javax.servlet.jsp.jstl</ groupId>
< artifactId> jstl-api</ artifactId>
< version> 1.2</ version>
</ dependency>
< dependency>
< groupId> taglibs</ groupId>
< artifactId> standard</ artifactId>
< version> 1.1.2</ version>
</ dependency>
</ dependencies>
< build>
< finalName> Day38_01</ finalName>
< pluginManagement>
< plugins>
< plugin>
< artifactId> maven-clean-plugin</ artifactId>
< version> 3.1.0</ version>
</ plugin>
< plugin>
< artifactId> maven-resources-plugin</ artifactId>
< version> 3.0.2</ version>
</ plugin>
< plugin>
< artifactId> maven-compiler-plugin</ artifactId>
< version> 3.8.0</ version>
</ plugin>
< plugin>
< artifactId> maven-surefire-plugin</ artifactId>
< version> 2.22.1</ version>
</ plugin>
< plugin>
< artifactId> maven-war-plugin</ artifactId>
< version> 3.2.2</ version>
</ plugin>
< plugin>
< artifactId> maven-install-plugin</ artifactId>
< version> 2.5.2</ version>
</ plugin>
< plugin>
< artifactId> maven-deploy-plugin</ artifactId>
< version> 2.8.2</ version>
</ plugin>
</ plugins>
</ pluginManagement>
</ build>
</ project>
welcome.html
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< h1> 欢迎页面</ h1>
< a href = " login.jsp" > 登录</ a>
< a href = " register.jsp" > 注册</ a>
</ body>
</ html>
register.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
${ msg}
< body>
< h1> 注册< / h1>
< form action= "StuController?action=register" method= "post" >
账号:< input name= "username" type= "text" placeholder= "请输入账号" / > < br / >
密码:< input name= "password" type= "password" placeholder= "请输入密码" / > < br / >
姓名:< input name= "name" type= "text" placeholder= "请输入姓名" / > < br / >
性别:
< input type= "radio" name= "sex" value= "man" checked= "checked" / > 男
< input type= "radio" name= "sex" value= "woman" / > 女
< br / >
年龄:< input name= "age" type= "text" placeholder= "请输入年龄" / > < br / >
爱好:
< input type= "checkbox" name= "hobbys" value= "football" / > 足球
< input type= "checkbox" name= "hobbys" value= "basketball" / > 篮球
< input type= "checkbox" name= "hobbys" value= "shop" / > 购物
< br / >
< input type= "submit" value= "注册" / >
< / form>
< / body>
< / html>
login.jsp
< % @ page import = "java.net.URLDecoder" % >
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
< body>
< ! -- 物理包含:导入外界代码,底层只有一个文件- login_jsp. java -- >
< % @include file= "rememberMe.jsp" % >
${ msg}
< h1> 登录< / h1>
< form action= "UserController?action=login" method= "post" >
账号:< input name= "username" type= "text" placeholder= "请输入账号" / > < br / >
密码:< input name= "password" type= "password" placeholder= "请输入密码" / > < br / >
角色:
< select name= "role" >
< option value= "student" > 学员< / option>
< option value= "teacher" > 教师< / option>
< / select>
< br / >
验证码:< input name= "code" type= "text" placeholder= "请输入验证码" / > < img src= "UserController?action=drawCode" width= "120px" height= "50px" onclick= "refreshImg()" > < a onclick= "refreshImg()" > 看不清< / a> < br / >
记住我:< input type= "checkbox" name= "rememberMe" / > < br / >
< input type= "submit" value= "登录" / >
< / form>
< script type= "text/javascript" >
var img = document. getElementsByTagName ( "img" ) [ 0 ] ;
function refreshImg ( ) {
img. src = "UserController?action=drawCode&time=" + new Date ( ) ;
}
< / script>
< / body>
< / html>
index.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
< body>
< input type= "button" value= "安全退出" onclick= "safeExit()" / >
< h1> 详情页面< / h1>
< h3> 欢迎${ name} ${ role eq "student" ? "学员" : "" } ${ role eq "teacher" ? "教师" : "" } 进入到学生管理系统< / h3>
< a href= "repassword.jsp" > 修改密码< / a>
< c: if test= "${role eq 'student'}" >
< a href= "StuController?action=initModify&username=${username}" > 修改信息< / a>
< / c: if >
< c: if test= "${role eq 'teacher'}" >
< a href= "#" > 修改信息< / a>
< a href= "StuController?action=getStuList&curPage=1" > 查看学员列表< / a>
< / c: if >
< script type= "text/javascript" >
function safeExit ( ) {
location = "UserController?action=safeExit" ;
}
< / script>
< / body>
< / html>
repassword.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
${ msg}
< body>
< h1> 修改密码< / h1>
< form action= "UserController?action=repassword" method= "post" >
< input type= "hidden" name= "username" value= "${username}" / >
< input type= "hidden" name= "role" value= "${role}" / >
账号:${ username} < br / >
原密码:< input name= "password" type= "password" placeholder= "请输入原密码" / > < br / >
新密码:< input name= "newpassword" type= "password" placeholder= "请输入新密码" / > < br / >
确认密码:< input name= "repassword" type= "password" placeholder= "请输入确认密码" / > < br / >
< input type= "submit" value= "注册" / >
< / form>
< / body>
< / html>
rememberMe.jsp
< % @ page import = "java.net.URLDecoder" % > < %
Cookie[ ] cookies = request. getCookies ( ) ;
if ( cookies != null ) {
int num = 0 ;
for ( Cookie cookie: cookies) {
String name = cookie. getName ( ) ;
String value = URLDecoder. decode ( cookie. getValue ( ) , "UTF-8" ) ;
if ( "name" . equals ( name) ) {
session. setAttribute ( "name" , value) ;
num++ ;
}
if ( "role" . equals ( name) ) {
session. setAttribute ( "role" , value) ;
num++ ;
}
if ( "username" . equals ( name) ) {
session. setAttribute ( "username" , value) ;
num++ ;
}
}
if ( num == 3 ) {
response. sendRedirect ( "index.jsp" ) ;
}
}
% >
page.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" % >
< % @ page isELIgnored= "false" % >
< a href= "${page.url}1" > 首页< / a>
< c: if test= "${page.curPage>1}" >
< a href= "${page.url}${page.curPage-1}" > 上一页< / a>
< / c: if >
< c: if test= "${page.curPage<page.totalPage}" >
< a href= "${page.url}${page.curPage+1}" > 下一页< / a>
< / c: if >
< a href= "${page.url}${page.totalPage}" > 尾页< / a>
stuinfo.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" % >
< % @ taglib uri= "http://java.sun.com/jsp/jstl/functions" prefix= "fn" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
< body>
< h1> 修改学生信息< / h1>
< form action= "StuController?action=modify" method= "post" >
< input type= "hidden" name= "username" value= "${stu.username}" / >
账号:${ stu. username} < br / >
姓名:< input name= "name" type= "text" value= "${stu.name}" / > < br / >
性别:
< input type= "radio" name= "sex" value= "man" < c: if test= "${stu.sex eq 'man'}" > checked= 'checked' < / c: if > / > 男
< input type= "radio" name= "sex" value= "woman" < c: if test= "${stu.sex eq 'woman'}" > checked= 'checked' < / c: if > / > 女
< br / >
年龄:< input name= "age" type= "text" value= "${stu.age}" / > < br / >
爱好:
< input type= "checkbox" name= "hobbys" value= "football" < c: if test= "${fn:contains(stu.hobbys,'football')}" > checked= 'checked' < / c: if > / > 足球
< input type= "checkbox" name= "hobbys" value= "basketball" < c: if test= "${fn:contains(stu.hobbys,'basketball')}" > checked= 'checked' < / c: if > / > 篮球
< input type= "checkbox" name= "hobbys" value= "shop" < c: if test= "${fn:contains(stu.hobbys,'shop')}" > checked= 'checked' < / c: if > / > 购物
< br / >
< input type= "submit" value= "修改信息" / >
< / form>
< / body>
< / html>
stulist.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< % @ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" % >
< % @ page isELIgnored= "false" % >
< html>
< head>
< title> Title< / title>
< / head>
< body>
< h1> 学生列表< / h1>
< table width= "80%" border= "1" >
< tr>
< th> 账号< / th>
< th> 姓名< / th>
< th> 性别< / th>
< th> 年龄< / th>
< th> 爱好< / th>
< th> 操作< / th>
< / tr>
< c: forEach items= "${page.list}" var = "stuDto" >
< tr>
< th> ${ stuDto. stu. username} < / th>
< th> ${ stuDto. stu. name} < / th>
< th> ${ stuDto. sex} < / th>
< th> ${ stuDto. stu. age} < / th>
< th> ${ stuDto. hobbys} < / th>
< th>
< a href= "StuController?action=initModify&username=${stuDto.stu.username}" > 修改< / a>
< a href= "StuController?action=delete&username=${stuDto.stu.username}" > 删除< / a>
< / th>
< / tr>
< / c: forEach>
< / table>
< ! -- 逻辑包含:导入外界代码,底层有两个文件- stulist_jsp. java和page_jsp. java -- >
< jsp: include page= "page.jsp" / >
< / body>
< / html>