MVC模式实现登录以及增删改查之登录(一)
我在这里用的不是maven项目,用的一般的web项目,所以需要用到的架包需要自己去下载添加,在项目中,一定注意环境的配置,我用的是jre1.7
1 新建项目

2 建立好MVC的管理包,导入对应的架包servlet

3 建立好与数据库对应的实体类 teacher.java
public class Teacher {
private int tid;
private String tname;
private String tpsw;
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public String getTpsw() {
return tpsw;
}
public void setTpsw(String tpsw) {
this.tpsw = tpsw;
}
public Teacher(String tname, String tpsw) {
super();
this.tname = tname;
this.tpsw = tpsw;
}
public Teacher(int tid, String tname, String tpsw) {
super();
this.tid = tid;
this.tname = tname;
this.tpsw = tpsw;
}
public Teacher() {
super();
}
}
4 在WebContent新建login.jsp文件编写登陆框
<body>
<form action="login" method="post">
用户名:<input type="text" name="tname">
密码:<input type="text" name="tpsw">
<input type="submit" value="登录">
</form>
5 配置web.xml文件对应表单请求login

web.xml文件
注意:配置时<servlet-name>要在之前,否则会报错<servlet-class>
<!-- 提交登录请求 -->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.zr.controller.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
6 编写对应的请求实体类LoginController.java:继承HttpServlet重写doget(),dopost()方法,根据method请求的不同调用doget或者dopost方法
LoginController.java
import java.io.IOException;
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.zr.model.Teacher;
import com.zr.service.valiDateService;
import com.zr.serviceIm.valiDateServiceImpl;
public class LoginController extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取前台form表单的input输入框
String tname=req.getParameter("tname");
String tpsw=req.getParameter("tpsw");
Teacher tc=new Teacher();
tc.setTname(tname);
tc.setTpsw(tpsw);
valiDateService vds=new valiDateServiceImpl();
Teacher t= vds.valiDateTeacher(tc);
HttpSession session=req.getSession();
session.setAttribute("teacher", t);
if (t!=null) {
//返回的不是空值,重定向到登录成功界面
req.getRequestDispatcher("main.jsp").forward(req, resp);
} else {
//返回空值,请求转发到登录界面
resp.sendRedirect("login.jsp");
}
}
}
7 从后台dao层写到control层
public interface TeacherDao {
/**
* 验证老师是否存在
* @param tc
* @return
*/
public Teacher validateTeacher(Teacher tc);
}
8.1 编写封装类建立与数据库的连接JDBCUtil.java
package JDBCUtil; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class JDBCUtil {
//1.数据库地址 (根据不同的数据标准是不一样)
private final static String DBURL = "jdbc:mysql://localhost:3306/student_crm?useUnicode=true&characterEncoding=UTF8";
//2.设置用户和密码
private final static String USERNAME = "root";
private final static String PASSWORD = "root";
//3.设置驱动名称 (根据不同的数据标准是不一样)
private final static String DBDRIVER = "com.mysql.jdbc.Driver";
/**
* 获取数据库连接
* @return 返回数据库连接
*/
public static Connection getConnection(){
Connection con = null;
try {
Class.forName(DBDRIVER);
con = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
//关闭连接
public static void closeJDBC(Statement st,Connection con) throws SQLException{
if(st!=null){
st.close();
}
if(con!=null){
con.close();
}
} }
8.2 dao层的实现
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zr.dao.TeacherDao;
import com.zr.model.Teacher;
import JDBCUtil.JDBCUtil;
public class TeacherDaoImpl implements TeacherDao{
/**
* 输入老师的对象,返回老师对象
* @param args
*/
public Teacher validateTeacher(Teacher tc) {
Teacher teacher=new Teacher();
//sql语句
StringBuffer sql=new StringBuffer("select * from teacher where tname=? and tpsw=?");
//获取数据库连接
Connection con=JDBCUtil.getConnection();
try {
PreparedStatement pst=con.prepareStatement(sql.toString());
pst.setString(1, tc.getTname());
pst.setString(2, tc.getTpsw());
//返回一个结果集
ResultSet rs=pst.executeQuery();
if (rs.next()) {
//把结果集里面的数据放入对应的teacher对象
teacher=new Teacher(rs.getInt("tid"),rs.getString("tname"),rs.getString("tpsw"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return teacher;
}
}
9 Service层
public interface valiDateService {
/**
* @param tc
* @return 老师对象
* 根据用户输入值验证老师是否存在
*/
public Teacher valiDateTeacher(Teacher tc);
}
10 Service层实现ServiceImpl.java
import com.zr.dao.TeacherDao;
import com.zr.daoIm.TeacherDaoImpl;
import com.zr.model.Teacher;
import com.zr.service.valiDateService;
public class valiDateServiceImpl implements valiDateService{
public Teacher valiDateTeacher(Teacher tc) {
//父类的引用指向子类的对象,父类可以直接调用子类的方法
TeacherDao teacherDao=new TeacherDaoImpl();
//调用dao层的方法验证存在
Teacher teacher=teacherDao.validateTeacher(tc);
return teacher;
}
}
11 com.zr.controller层
import java.io.IOException;
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.zr.model.Teacher;
import com.zr.service.valiDateService;
import com.zr.serviceIm.valiDateServiceImpl;
public class LoginController extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取前台form表单的input输入框
String tname = req.getParameter("tname");
String tpsw = req.getParameter("tpsw");
// 将前台对象放入tc对象,作为输入参数
Teacher tc = new Teacher();
tc.setTname(tname);
tc.setTpsw(tpsw);
// 调用Service层的方法传入tc对象,并用t接收返回结果
valiDateService vds = new valiDateServiceImpl();
Teacher t = vds.valiDateTeacher(tc);
// 获取JSP作用域session,将老师t对象放入session
HttpSession session = req.getSession();
int a = t.getTid();//最好根据返回的老师的id进行判断
if (a != 0) {
// 返回的有id,重定向到登录成功界面
req.getRequestDispatcher("main.jsp").forward(req, resp);
session.setAttribute("teacher", t);
} else {
// 返回空值,请求转发到登录界面
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
}
MVC模式实现登录以及增删改查之登录(一)的更多相关文章
- asp.net下利用MVC模式实现Extjs表格增删改查
在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC ...
- MVC模式的学生信息增删改查
准备:建一个名为 userdb的数据库.建一个student表,有stuid,stuname,gender三个字段.其中stuid为主键.j加入相应的驱动包,相应的JSTL标签 先看目录结构 代码: ...
- SSH登录与增删改查demo详解+源代码
点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679 一.框架概述 spri ...
- 05_Elasticsearch 单模式下API的增删改查操作
05_Elasticsearch 单模式下API的增删改查操作 安装marvel 插件: zjtest7-redis:/usr/local/elasticsearch-2.3.4# bin/plugi ...
- Elasticsearch 单模式下API的增删改查操作
<pre name="code" class="html">Elasticsearch 单模式下API的增删改查操作 http://192.168. ...
- Elasticsearch学习系列之单模式下API的增删改查操作
这里我们通过Elasticsearch的marvel插件实现单模式下API的增删改查操作 索引的初始化操作 创建索引之前可以对索引进行初始化操作,比如先指定shard数量以及replicas的数量 代 ...
- 招新系统(jsp+servlet,实现简略前端网页注册登录+后台增删改查,分学生和管理员,Java语言,mysql数据库连接,tomcat服务器)
生活不只是眼前的苟且,还有诗和远方. 架构说明: 要求是采用MVC模式,所以分了下面的几个包,但是由于是第一次写,可能分的也不是很清楚: 这个是后台部分的架构: 这个是前端的的展示: (那个StuLo ...
- MVC中的Ajax与增删改查
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
- MVC中的Ajax与增删改查(一)
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
随机推荐
- 理解CSS Clip属性及用法
应用Clip属性实现的一个简单效果图: 样式写法: .my-element { position: absolute; clip: rect(10px 350px 170px 0); /* IE ...
- yii框架的foreach 已经优化好了,可以“$user_model->attributes=$_POST['Admin'];”
yii框架的foreach 已经优化好了, 以前我们遍历数组的时候是用foreach循环 foreach ( as $key=>$value){ $user ...
- jquery.lazyload.js图片延迟加载
转:http://www.jb51.net/article/50273.htm 这篇文章主要介绍了Jquery图片延迟加载插件jquery.lazyload.js的使用方法,需要的朋友可以参考下 ...
- TatukGIS - GisDefs - DateTimeToXMLString 函数
函数名称 DateTimeToXMLString 所在单元 GisDefs 函数原型 function DateTimeToXMLString(_dtm: TDateTime; ...
- 【Java】Java网络编程菜鸟进阶:TCP和套接字入门
Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...
- vsphere 出现“在主机的当前连接状况下不允许执行该操作”
问题: 登录vsphere client启动虚拟机出现“在主机的当前连接状况下不允许执行该操作” 解决方法: 1.选择主机->右键->断开 2.选择主机->右键->连接 3.在 ...
- SQL Server 中的嵌套事务与@@TranCount(转)
在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误. 在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映 ...
- 中国linux论坛
linux在国内经过十多年的发展,已慢慢走向成熟.昔日如雨后春笋般成长的linux网站,现在已出现了明显的两极分化.一部分已成长壮大,公司化运作,一部分面临域名出售或关闭的境地. 以笔者经验,以下十 ...
- bzoj3123
首先肯定是主席树但这是一类“动态树”,似乎没有什么好的办法那就暴力呗,这里用到启发式合并,即两棵树合并,重建节点少的的那棵可以用并查集维护连通性查询主席树的建立还是和bzoj2588一样 ; type ...
- 「Poetize5」GF弹钢琴
描述 Description 现在PianoEater有一架有52个白键和 36个黑键的钢琴,并且他要弹奏的曲子只需要按白键.在同一时刻,他只用弹奏一个音符.如果这个音符不移动大拇指就可以按到,那么他 ...