基于Jsp和Servlet的简单项目

xxx管理系统的基本实现

  • 一、项目名称
  • 二、项目环境
    • 1、软件环境:
    • 2、项目思路 :
    • 3、项目所用知识点:
    • 4、项目架构:
  • 三、项目源码
    • 数据库设计
    • UserDaoImpl.java
    • UserDao.java
    • User.java
    • UserService.java
    • BaseServlet.java
    • DataServlet.java
    • DBUtil.java
    • db.properties
    • web.xml
    • info.jsp
    • login.jsp
    • main.jsp
    • reg.jsp
    • 运行结果
  • 四、bug以及心得体会
    • 1、bug:由于粗心引起的bug,均已改正。
    • 2、心得与体会
  • 五、项目源码及压缩包

一、项目名称

使用MVC模式和三层开发架构,开发一个完整的“注册登录退出”模块。

二、项目环境

1、软件环境:

系统环境:win10
JDK版本: jdk1.8.0_181
IDE版本:eclipse-java-oxygen-3a-win32-x86_64
avaEE varsion:JavaEE5 –Web2.5
Java version: 1.7.
服务器版本:apache-tomcat-7.0.69
浏览器版本:Google Chrome浏览器

2、项目思路 :

通过MVC开发流程,实现项目的架构。然后利用Servlet+Jsp+Jdbc的功能开发流程,实现登陆注册退出功能。
通过DataServlet实现服务器在接收到浏览器发送的请求后,会调用对应的Servlet进行请求处理,从而将多个业务逻辑功能组合到一起。

3、项目所用知识点:

模板的套用
MVC开发流程
Servlet+Jsp+Jdbc的功能开发流程
request和session作用域的使用
浏览器发起请求到服务器的方式(重点记忆)
BaseServlet的抽取和使用

4、项目架构:

基于Jsp和Servlet的简单项目_第1张图片

三、项目源码

数据库设计

##创建用户表
create table t_user(
uid int(10) not null auto_increment,
uname varchar(100) not null,
pwd varchar(100) not null, 
sex char(4) not null,
age int(3) not null,
birthday date not null,
primary key(uid)
);

insert into t_user values(default,'张三',123,'男',18,'1988-09-09' );
insert into t_user values(default,'高淇',456,'男',20,'1996-09-09' );

基于Jsp和Servlet的简单项目_第2张图片

UserDaoImpl.java

package com.bjsxt.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.bjsxt.dao.UserDao;
import com.bjsxt.pojo.User;
import com.bjsxt.util.DBUtil;
/**
 * 导的不是jdbc包,全是sql包
 * @author 曹海洋
 *
 */
public class UserDaoImpl implements UserDao {
	//查询用户信息
	@Override
	public User getUserInfoDao(String uname, String pwd) {
		//声明jdbc变量
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		//声明变量
		User u=null;
		
		try {
			
			//创建连接
			conn=DBUtil.getConnection();
			//创建sql命令
			String sql="select * from t_user where uname=? and pwd=?";
			//创建SQL命令对象
			ps=conn.prepareStatement(sql);
			//给占位符赋值
			ps.setString(1,	uname);
			ps.setString(2, pwd);
			//执行sql命令
			rs=ps.executeQuery();
			//遍历
			while (rs.next()) {
				//给变量赋值
				u=new User();
				u.setUid(rs.getInt("uid"));
				u.setUname(rs.getString("uname"));
				u.setPwd(rs.getString("pwd"));
				u.setSex(rs.getString("sex"));
				u.setAge(rs.getInt("age"));
				u.setBirthday(rs.getString("birthday"));
			}
			//关闭资源
			//返回结果
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			DBUtil.closeAll(rs, ps, conn);
		}
		
		return u;
	}

	//用户注册
	@Override
	public int regUserInfoDao(String uname, String pwd, String sex, int age,
			String birthday) {
		
		//创建sql语句
		String sql="insert into t_user values(default,?,?,?,?,?)";
		return DBUtil.executeDML(sql, uname,pwd,sex,age,birthday);
	}

}

UserDao.java

package com.bjsxt.dao;

import com.bjsxt.pojo.User;

public interface UserDao {
	/**
	 * 根据用户名和密码,查询用户信息
	 * @author 曹海洋
	 *
	 */
	User getUserInfoDao(String uname, String pwd);

	
	int regUserInfoDao(String uname, String pwd, String sex, int age,
			String birthday);

}

User.java

package com.bjsxt.pojo;

public class User {
	private int uid;
	private String uname;
	private String pwd;
	private String sex;
	private int age;
	private String birthday;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	public User(int uid, String uname, String pwd, String sex, int age,
			String birthday) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.pwd = pwd;
		this.sex = sex;
		this.age = age;
		this.birthday = birthday;
	}
	public User() {
		super();
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result
				+ ((birthday == null) ? 0 : birthday.hashCode());
		result = prime * result + ((pwd == null) ? 0 : pwd.hashCode());
		result = prime * result + ((sex == null) ? 0 : sex.hashCode());
		result = prime * result + uid;
		result = prime * result + ((uname == null) ? 0 : uname.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (age != other.age)
			return false;
		if (birthday == null) {
			if (other.birthday != null)
				return false;
		} else if (!birthday.equals(other.birthday))
			return false;
		if (pwd == null) {
			if (other.pwd != null)
				return false;
		} else if (!pwd.equals(other.pwd))
			return false;
		if (sex == null) {
			if (other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		if (uid != other.uid)
			return false;
		if (uname == null) {
			if (other.uname != null)
				return false;
		} else if (!uname.equals(other.uname))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd
				+ ", sex=" + sex + ", age=" + age + ", birthday=" + birthday
				+ "]";
	}
	
	
}

UserService.java

package com.bjsxt.service;

import com.bjsxt.pojo.User;

public interface UserService {
	/**用户登陆
	 * 
	 * @param uname
	 * @param pwd
	 * @return
	 */
	User getUserInfoService(String uname, String pwd);
	
	/**用户注册
	 * 
	 * @param uname
	 * @param pwd
	 * @param sex
	 * @param age
	 * @param birthday
	 * @return
	 */
	int getUserInfoService(String uname, String pwd, String sex, int age,
			String birthday);
	
}


UserServiceImpl.java

package com.bjsxt.service.impl;

import com.bjsxt.dao.UserDao;
import com.bjsxt.dao.impl.UserDaoImpl;
import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;

public class UserServiceImpl implements UserService {
	//创建Dao对象
	UserDao ud = new UserDaoImpl();
	
	
	@Override
	public User getUserInfoService(String uname, String pwd) {
		//处理登录业务
		return ud.getUserInfoDao(uname,pwd);
	}

	
	//用户注册
	@Override
	public int getUserInfoService(String uname, String pwd, String sex,
			int age, String birthday) {
		//处理注册业务
		return ud.regUserInfoDao(uname,pwd,sex,age,birthday);
	}

}

BaseServlet.java

package com.bjsxt.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class BaseServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置请求、响应编码格式
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=utf-8");
		//获取请求信息
		String methodName = req.getParameter("method");
		//处理请求信息(动态调用方法处理请求--》反射)
			try {
				//反射方法获取所在类的类对象
				Class cla = this.getClass();
				//反射方法获取要被调用的方法对象
				Method m= cla.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
				//反射执行的方法
				m.invoke(this, req,resp);
			} catch (Exception e) {
				e.printStackTrace();
			} 
	}
}

DataServlet.java

package com.bjsxt.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;

public  class DataServlet extends BaseServlet {
	/*@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置请求、响应编码格式
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=utf-8");
		//获取请求信息
		String methodName = req.getParameter("method");
		//处理请求信息(动态调用方法处理请求--》反射)
			try {
				//反射方法获取所在类的类对象
				Class cla = this.getClass();
				//反射方法获取要被调用的方法对象
				Method m= cla.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
				//反射执行的方法
				m.invoke(this, req,resp);
			} catch (Exception e) {
				e.printStackTrace();
			} 
	}*/
	
	
	//登陆处理方法
	public void Userlogin(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		//获取请求信息
				String uname = req.getParameter("uname");
				String pwd = req.getParameter("pwd");
				//处理请求信息
				System.out.println("DataServlet.Userlogin()"+uname+":"+pwd);
				
					//创建业务层对象
					UserService us = new UserServiceImpl();
					User u= us.getUserInfoService(uname,pwd);
					System.out.println("用户查询登陆结果为:"+u);
					
				//响应处理结果
					//直接响应	
					//请求转发
					
					//获取session对象
					HttpSession hs = req.getSession();
					
					if (u!=null) {//登陆成功
						//将用户信息存储到session
						hs.setAttribute("user", u);
						
						//重定向到mian.jsp
						resp.sendRedirect("/16/main.jsp");
					}else {//登录失败
						//将登陆标记添加
						hs.setAttribute("flag", "loginfalse");
						//重定向到login.jsp
						resp.sendRedirect("/16/login.jsp");
					}
	}
	//退出处理方法
	public void UserOut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		//获取请求信息
		//处理请求信息
			//获取session、销毁session
			HttpSession hs = req.getSession();
			hs.invalidate();
		//相应处理结果
			//直接响应
			//请求转发
			//重定向
		resp.sendRedirect("/16/login.jsp");
		}
	//注册处理方法
	public void UserReg(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		//获取请求信息
				String uname = req.getParameter("uname");
				String pwd = req.getParameter("pwd");
				String sex = req.getParameter("sex");
				int age =Integer.parseInt(req.getParameter("age")) ;
				String birthday = req.getParameter("birthday");
				//处理请求信息
					//获取业务层对象
				    UserService us = new UserServiceImpl();
				     //处理注册
				    int i=us.getUserInfoService(uname, pwd,sex,age,birthday);
				    
				//相应处理结果
				    //获取session对象
				    HttpSession hs = req.getSession();
					//重定向到登陆界面
				    if(i>0){
						//注册成功,添加标记到session
				    	hs.setAttribute("flag", "regsuccess");
						resp.sendRedirect("/16/login.jsp");
					}else{
						//重定向到注册页面
						resp.sendRedirect("/16/login.jsp");
					}
	}
}

DBUtil.java

package com.bjsxt.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
	//声明全局变量记录jdbc参数
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	//使用静态代码块,在类加载时即完成对属性文件的读取
	static{
		//动态获取属性配置文件的流对象
		InputStream in=DBUtil.class.getResourceAsStream("/db.properties");
		//创建Properties对象
		Properties p=new Properties();
		//加载
		try {
			p.load(in);//会将属性配置文件的所有数据存储到Properties对象中
			//将读取的jdbc参数赋值给全局变量
			driver=p.getProperty("driver");
			url=p.getProperty("url");
			username=p.getProperty("username");
			password=p.getProperty("password");
			//加载驱动
			Class.forName(driver);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//创建连接对象并返回
	public static Connection getConnection(){
		Connection conn=null;
		try {
			conn = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
	//关闭资源
	public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			stmt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	//封装增加删除修改的通用工具方法
	/**
	 * @param sql SQL语句
	 * @param objs	SQL语句占位符实参,如果没有参数则传入null
	 * @return 返回增删改的结果,类型为int
	 */
	public static int executeDML(String sql,Object...objs){
		// 声明jdbc变量
				Connection conn = null;
				PreparedStatement ps = null;
				int i = -1;
				try {
					// 获取连接对象
					conn = DBUtil.getConnection();
					// 开启事务管理
					conn.setAutoCommit(false);
					// 创建SQL命令对象
					ps = conn.prepareStatement(sql);
					// 给占位符赋值
					if(objs!=null){
						for(int j=0;j

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/project
username=root
password=root

web.xml



  15Progect
  
    This is the description of my J2EE component
    This is the display name of my J2EE component
    UserServlet
    com.bjsxt.servlet.UserServlet
  
  
    This is the description of my J2EE component
    This is the display name of my J2EE component
    OutServlet
    com.bjsxt.servlet.OutServlet
  
  
    This is the description of my J2EE component
    This is the display name of my J2EE component
    RegServlet
    com.bjsxt.servlet.RegServlet
  
  
    This is the description of my J2EE component
    This is the display name of my J2EE component
    DataServlet
    com.bjsxt.servlet.DataServlet
  
 

  
    UserServlet
    /user
  
  
    OutServlet
    /out
  
  
    RegServlet
    /reg
  
  
    DataServlet
    /data


    

  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  

info.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

   



  
    
    
    
    
    网站信息  
    
    
    
      


网站信息

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 
 
 



    
    
    
    
    登录  
    
    
    
      


chy超级管理系统

<% //获取session中的标记 Object obj =session.getAttribute("flag"); if(obj!=null){ if("loginfalse".equals((String)obj)){ %>

用户名或密码错误

<% }else if("regsuccess".equals((String)obj)){ %>

新用户注册成功

<% } } session.invalidate();/* 销毁session */ %>

main.jsp

<%@page import="com.bjsxt.pojo.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

    




    
    
    
    
    chy参与管理系统修改  
    
    
       
    
    


欢迎:<%=( (User)session.getAttribute("user")).getUname() %>进入系统    退出登录

reg.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

















新用户注册
性别:男

运行结果

四、bug以及心得体会

1、bug:由于粗心引起的bug,均已改正。

2、心得与体会

  很多时候出现的bug,都是因为自己粗心所导致的。例如页面无法跳转多半是因为重定向的路径没有写对、或者form表单的action没写对、亦或是href后的路径没有写对,要特别注意。

​    ​在一开始时,每个请求或独立的业务逻辑(登陆、退出、注册)都要单独使用一个Servlet进行处理。但随着网站功能的增多,Servlet增多导致资源浪费,需要我们进一步的优化。使用反射动态调用其功能处理方法,并将相关的Servlet集成在一个Servlet上。

​    ​虽然使用了反射集成了一个独立的业务逻辑,但是反射不会只使用一次,需要我们在一些Servlet中的service方法中的反射代码声明一遍,然后使用时直接继承声明该反射代码的类。而且,该类最好不能被访问到(删除相应的url-pattern),最好不能被实例化(声明为抽象类)。

​    ​刚接触JavaEE项目,需要掌握的知识点很多而且很杂,学起来比较吃力。但是这些零碎的知识点恰恰是今后做项目的基础。我还在不断花费时间去吸收、去归纳这些知识,相信通过本章的学习,我能够更加轻松的掌握这些知识!

五、项目源码及压缩包

链接:https://pan.baidu.com/s/1ylOi3PXFy6nwoOyVGVrBeg
提取码:yvsn
复制这段内容后打开百度网盘手机App,操作更方便哦

你可能感兴趣的:(Java项目,JavaEE和项目开发)