在对Tomcat技术基本了解之后,用MVC框架简单搭建一个数据库-后台-服务器Web项目
MVC框架简介
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
- Model(模型)表示应用程序核心(比如数据库记录列表)
- View(视图)显示数据(数据库记录)
- Controller(控制器)处理输入(写入数据库记录)
首先,构建数据库,在servlet用户下建表
create user servlet identified by servlet;
grant connect,resource to servlet;
create table t_user(
tid number primary key,
uname varchar2(20),
pwd
);
select * from t_user for update;
alter table t_user add sex number check (sex in('1','0'))
总共四个字段:id,用户名。密码,性别
开始搭建一个简单web项目
看到有生成的目录结构
按照之前的链接: IDEA的Servlet类链接tomcat,我的第一个Web项目简单部署一下Idea项目和Tomcat关联
在File->project structure->libraries中导入oracle的驱动
结果:
在src目录下创建以下几个package:
- com.my.dao:数据访问层(持久化层)——数据的增删改查,与数据库建立连接;封装了对数据库的curd操作
- com.my.pojo:简单的Java对象
- com.my.service:业务逻辑层——做一些业务逻辑地处理,并给控制层返回结果
- com.my.servlet:servlet类,用于控制页面交互逻辑,运行在服务器上的java程序
- com.my.util:工具类
项目搭建完成后:
.my.dao:数据访问层(持久化层)
my.dao.UserDao
package com.my.dao;
import com.my.pojo.User;
public interface UserDao {
public User Login(String uname,String pwd);
}
my.dao.UserDaoImpl
package com.my.dao;
import com.my.pojo.User;
import com.my.util.DBUtil;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
@Override
public User Login(String uname,String pwd) {
String sql = "select * from t_user where uname = ? and pwd = ?";
ResultSet rs = DBUtil.select(sql, uname, pwd);
User u = null;
try {
if(rs.next()){
String name = rs.getString("uname");
String password = rs.getString("pwd");
int sex = rs.getInt("sex");
u = new User();
u.setUname(name);
u.setPwd(password);
u.setSex(sex);
}
} catch (SQLException e) {
e.printStackTrace();
}
return u;
}
}
.my.service:业务逻辑层
my.service.UserService
package com.my.service;
import com.my.pojo.User;
public interface UserService {
public User Login(String uname,String pwd);
}
my.service.UserSericeImpl
package com.my.service;
import com.my.dao.UserDaoImpl;
import com.my.pojo.User;
public class UserServiceImpl implements UserService {
private UserDaoImpl udi;
public UserServiceImpl() {
udi = new UserDaoImpl();
}
@Override
public User Login(String uname,String pwd) {
return udi.Login(uname,pwd);
}
}
.my.pojo:简单的Java对象
my.pojo.User
package com.my.pojo;
import java.io.Serializable;
public class User implements Serializable {
private String uname;
private String pwd;
private int sex;
public User() {
}
public User(String uname, String pwd, int sex) {
this.uname = uname;
this.pwd = pwd;
this.sex = sex;
}
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 int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", pwd='" + pwd + '\'' +
", sex=" + sex +
'}';
}
}
.my.servlet:servlet类
my.servlst.Servlet1
package com.my.servlet;
import com.my.pojo.User;
import com.my.service.UserService;
import com.my.service.UserServiceImpl;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "Servlet1",urlPatterns = "/ser1")
public class Servlet1 extends HttpServlet {
private UserServiceImpl usi;
public Servlet1() {
usi = new UserServiceImpl();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
//访问业务层访问层
User user = usi.Login(uname,pwd);
if(user!=null){
HttpSession session = req.getSession();
session.setAttribute("user",user);
resp.sendRedirect("ser2");
}else{
resp.getWriter().write("用户名或密码错误,请重新输入");
}
}
}
my.servlst.Servlet2
package com.my.servlet;
import com.my.pojo.User;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "Servlet2",urlPatterns = "/ser2")
public class Servlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
if(user.getSex()==0) {
resp.getWriter().write("登录成功" + user.getUname()+"女士");
}else{
resp.getWriter().write("登录成功" + user.getUname()+"先生");
}
}
}
.my.util:工具类
my.util.DBUtil用于连接数据库
package com.my.util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DBUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private DBUtil(){}
static {
Properties pro =new Properties();
try {
InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
pro.load(in);
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
private static Connection conn =null;
public static Connection getConn(){
if(conn==null) {
try {
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
private static Statement stat =null;
public static Statement getStat(){
try {
conn = getConn();
stat = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stat;
}
private static PreparedStatement pstat =null;
public static PreparedStatement getPstat(String sql){
try {
conn = getConn();
pstat = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pstat;
}
public static int update(String sql,Object...obj){
pstat = getPstat(sql);
int n = 0;
try {
for (int i = 0; i < obj.length; i++) {
pstat.setObject(i + 1, obj[i]);
}
n = pstat.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return n;
}
static ResultSet rs = null;
public static ResultSet select(String sql,Object...obj){
pstat = getPstat(sql);
try {
for (int i = 0; i < obj.length; i++) {
pstat.setObject(i + 1, obj[i]);
}
rs = pstat.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public static void close() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
db.properties数据库连接配置
url = jdbc:oracle:thin:@localhost:1521:orcl
user = servlet
password = servlet
主页面 index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="ser1" method="get">
用户名:<input type="text" name="uname"></br>
密码:<input type="password" name="pwd"></br>
性别:<input type="radio" name="sex" value="1" />男
<input type="radio" name="sex" value="0" />女</br>
<input type="submit" value="提交"></br>
</form>
</body>
</html>
项目截图
项目试运行:
1.部署项目,大概1-2分钟
2.服务器自动跳转到index.html
3.试登录
可以看到当前数据库中有两个用户
尝试登录张三账号
提交后:
登录李四账号
提交后:
登录错误账号:
提交后: