JSP + JavaBean + Servlet实现MVC设计模式
1、流程图:

2、代码清单

数据库脚本:
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (
`userid` varchar(30) NOT NULL,
`name` varchar(30) NOT NULL,
`password` varchar(30) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `user` VALUES ('admin', 'administrator', 'admin');
User 类:
package com.shawn.mvcdemo.vo;
public class User{
private String userID;
private String name;
private String password;
public String getUserID(){
return this.userID;
}
public String getName(){
return this.name;
}
public String getPassword(){
return this.password;
}
public void setUserID(String userID){
this.userID = userID;
}
public void setName(String name){
this.name = name;
}
public void setPassword(String password){
this.password = password;
}
}
DatabaseConnection 类:
package com.shawn.mvcdemo.dbc;
import java.sql.*;
public class DatabaseConnection{
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; //数据库驱动
private static final String DBURL = "jdbc:mysql://localhost:3306/mldn"; //数据库URL
private static final String DBUSER = "root"; //用户名
private static final String DBPASSWORD = "root"; //密码
private Connection conn = null;
public DatabaseConnection() throws Exception{
try{
Class.forName(DBDRIVER);
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
} catch(Exception e){
throw e;
}
}
public Connection getConnection(){
return this.conn;
}
public void close() throws Exception{
if(this.conn != null){
try{
this.conn.close();
} catch(Exception e){
throw e;
}
}
}
public static void main(String args[]){
try{
System.out.println(new DatabaseConnection().getConnection());
} catch(Exception e){
e.printStackTrace();
}
}
}
IUserDAO 接口:
package com.shawn.mvcdemo.dao;
import com.shawn.mvcdemo.vo.User;
public interface IUserDAO{
//现在完成的是登录验证,那么登录操作只有两种返回结果
public boolean findLogin(User user) throws Exception;
}
UserDAOImpl 类:
package com.shawn.mvcdemo.dao.impl; import java.sql.*; import com.shawn.mvcdemo.vo.User;
import com.shawn.mvcdemo.dbc.*;
import com.shawn.mvcdemo.dao.*; public class UserDAOImpl implements IUserDAO{
private Connection conn = null; private PreparedStatement pstmt = null; public UserDAOImpl(Connection conn){
this.conn = conn;
} public boolean findLogin(User user) throws Exception{
boolean flag = false;
String sql = "select name from user where userid = ? and password = ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1,user.getUserID());
this.pstmt.setString(2,user.getPassword());
ResultSet rs = this.pstmt.executeQuery();
if(rs.next()){
user.setName(rs.getString("name"));
flag = true;
}
this.pstmt.close();
return flag;
}
}
UserDAOProxy 类:
package com.shawn.mvcdemo.dao.proxy; import java.sql.*; import com.shawn.mvcdemo.vo.User;
import com.shawn.mvcdemo.dbc.*;
import com.shawn.mvcdemo.dao.*;
import com.shawn.mvcdemo.dao.impl.*; public class UserDAOProxy implements IUserDAO{
private DatabaseConnection dbc = null;
private IUserDAO dao = null; public UserDAOProxy(){
try{
this.dbc = new DatabaseConnection();
} catch(Exception e){
e.printStackTrace();
}
this.dao = new UserDAOImpl(this.dbc.getConnection());
} public boolean findLogin(User user) throws Exception{
boolean flag = false;
try{
flag = this.dao.findLogin(user); //调用真实主题,完成操作
} catch(Exception e){
throw e;
} finally{
this.dbc.close();
}
return flag;
} }
DAOFactory 类:
package com.shawn.mvcdemo.factory; import com.shawn.mvcdemo.dao.*;
import com.shawn.mvcdemo.dao.proxy.*; public class DAOFactory{
public static IUserDAO getIUserDAOInstance(){
return new UserDAOProxy();
}
}
LoginServlet 类:
package com.shawn.mvcdemo.servlet; import java.io.*;
import java.util.*; import javax.servlet.*;
import javax.servlet.http.*;
import com.shawn.mvcdemo.factory.*;
import com.shawn.mvcdemo.vo.*; public class LoginServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
String path = "login.jsp";
String userID = req.getParameter("userID");
String password = req.getParameter("password");
List<String> info = new ArrayList<String>();//收集错误信息
if(userID == null || "".equals(userID)){
info.add("用户id不能为空!");
}
if(password == null || "".equals(password)){
info.add("密码不能为空!");
}
if(info.size() == 0){//里面没有记录任何的错误
User user = new User();
user.setUserID(userID);
user.setPassword(password);
try{
if(new DAOFactory().getIUserDAOInstance().findLogin(user)){
info.add("用户登陆成功,欢迎" + user.getName() + "光临!");
System.out.println(1);
} else {
info.add("用户登录失败,错误的用户名和密码!");
System.out.println(2);
}
}catch(Exception e){
e.printStackTrace();
}
}
req.setAttribute("info",info);
req.getRequestDispatcher(path).forward(req,resp);
} public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
this.doGet(req,resp);
} }
login.jsp 页面:
<%@ page contentType="text/html" pageEncoding="utf-8" import="java.util.*"%>
<html>
<head>
<title>www.mldnjava.cn, MLDN高端Java培训</title>
<%
request.setCharacterEncoding("utf-8");
%>
<%
List<String> info = (ArrayList<String>)request.getAttribute("info");
String userID = request.getParameter("userID");
String password = request.getParameter("password");
%>
<script>
window.onload = function(){
var objForm = document.getElementById("form1"); objForm.onsubmit = function(){
if(!(/^\w{5,15}$/.test(this.userID.value))){
alert("用户ID必须是5~15位!");
this.userID.focus();
return false;
} if(!(/^\w{5,15}$/.test(this.password.value))){
alert("密码必须是5~15位!");
this.password.focus();
return false;
}
} } </script>
</head> <body>
<form id="form1" action="login" method="post">
用户ID:<input type="text" name="userID" value="<%= (userID == null) ? "" : userID %>" /><br>
密 码:<input type="password" name="password" value="<%= (password == null) ? "" : password %>" /><br>
<input type="submit" value="登录" />
<input type="reset" value="重置" />
</form>
<%
if(info != null){
for(String str : info){
%>
<h3><%=str %></h3>
<%
}
}
%>
</body>
</html>
web.xml 配置:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"> <display-name>Hello World!</display-name>
<welcome-file-list>
<welcome-file>main.html</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.shawn.mvcdemo.servlet.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/mvclogin/login</url-pattern>
</servlet-mapping>
</web-app>
JSP + JavaBean + Servlet实现MVC设计模式的更多相关文章
- JSP+JavaBean+Servlet技术(MVC模型)
一,Servlet开发用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种 ...
- Struts与jsp+javabean+servlet区别
采用Struts框架技术和直接使用jsp+javabean技术开发各有什么优势?各自的缺点又是什么? 在Javaweb开发领域存在2种开发模式, 模式一,jsp+javabean 模式二,jsp+ja ...
- JSP+JavaBean+Servlet工作原理实例…
JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...
- Servlet+JSP+JavaBean开发模式(MVC)介绍
好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...
- JSP+JavaBean+Servlet实现各类列表分页功能
需求: 每页列表下都有一个分页的功能,显示总数量.当前页/总页数.首页.上一页.下一页.最后一页.GO到第几页 效果动态图: 实现思路: 因为每个列表页都需要,在每个出列表页数据的servlet中都要 ...
- 如何开发简单的javaweb项目,jsp+javabean+servlet
一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并配置apache-tomcat(服务器). 4.下载MySQL(数据库). 5.下载Navicat for M ...
- JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理
Oracle库中userinfo表borth字段是Date类型,age年纪字段是int类型.age字段要根据borth来自动计算 先说一下我遇到的问题: insert into的时候遇到日期转换类型错 ...
- javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
随机推荐
- JAVA通过网站域名URL获取该网站的源码(2018
import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnect ...
- POJ_2456 Aggressive cows 【二分求最大化最小值】
题目: Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are l ...
- 洛谷 P3239 / loj 2112 [HNOI2015] 亚瑟王 题解【期望】【DP】
???看不懂的期望DP 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚 ...
- 精神AC合集 2018.4.3
UESTC炸了,先把看似十分OK(只是过了样例)的代码贴上,修复好后再交上去 594 #include<iostream> #include<algorithm> #inclu ...
- HDU - 1520 树形DP入门题
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...
- QQ互联 网站应用接入
1.准备工作 接入qq登陆前,网站需要先进行申请,获得对应的appid和appkey, 以保证后续流程中可正确对网站与用户进行授权. 2.放置qq登陆按钮. 在网站页面上放置“qq登录”按钮,并为按钮 ...
- 如何在新导入的python项目中一次性生成依赖的第三方库
requirements.txt用来记录项目所有的依赖包和版本号,只需要一个简单的pip命令就能完成. pip freeze >requirements.txt 然后就可以用 pip insta ...
- C#生成二維碼(ThoughtWorks.QRCode)
本人使用的是ThoughtWorks.QRCode.dll,在網上可以下載,但要注意dll文件的完整性和準確性,本人之前下載的dll就是不正確導致調試時出現錯誤. 以下為cs文件代碼: using S ...
- pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple 快速下载
- 【C#】隐式类型var
在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...