0.创建oracle的sql语句如下

--创建表

create table userinfo(id number primary key,uname varchar2(20),password varchar2(20),age number);

--创建序列

create sequence seq_userinfo;

--添加数据

insert into userinfo values(seq_userinfo.nextval,'holly','123',18);

insert into userinfo values(seq_userinfo.nextval,'石头','123',18);

insert into userinfo values(seq_userinfo.nextval,'朱亚楠','123',18);

--提交事务

commit;

1.创建如下项目结构

2.在com.entity包下创建实体类UserInfo.java

 package com.entity;
/**
* 用户信息表
* @author Holly老师
*
*/
public class UserInfo {
private Integer id;
private String uname;
private String password;
private Integer age; public UserInfo(Integer id, String uname, String password, Integer age) {
this.id = id;
this.uname = uname;
this.password = password;
this.age = age;
} public UserInfo() {
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} }

UserInfo.java

3.在com.dao包下创建操作数据库的BaseDao.java

 package com.dao;

 import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 链接数据库工具类
* @author Holly老师
*
*/
public class BaseDao{
//1. 定义连接所需要的字符串
private static final String DRIVER="oracle.jdbc.driver.OracleDriver";
private static final String URL="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static final String USER="holly";
private static final String PASSWORD="sys"; public static Connection conn=null;
public static PreparedStatement pstm=null;
public static ResultSet rs=null; static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public Connection getConnection(){
try {
conn=DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public ResultSet executeQuery(String sql,Object[] param){
conn=this.getConnection();
try {
pstm=conn.prepareStatement(sql);
if(param!=null){
for (int i = 0; i < param.length; i++) {
pstm.setObject(i+1, param[i]);
}
}
rs=pstm.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
} public void closeAll(ResultSet rs,PreparedStatement pstm,Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(pstm!=null){
pstm.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} }

BaseDao.java

4.在com.dao包下创建UserInfoDao.java接口

 package com.dao;

 import com.entity.UserInfo;
/**
* 增删改接口
* @author Holly老师
*
*/
public interface UserInfoDao {
public UserInfo getUserByNamePwd(String name,String pwd);
}

UserInfoDao.java

5.在com.dao.impl包下创建接口的实现类UserInfoDaoImpl.java

 package com.dao.impl;

 import java.sql.SQLException;

 import com.dao.BaseDao;
import com.dao.UserInfoDao;
import com.entity.UserInfo;
/**
* 增删改接口实现类
* @author Holly老师
*
*/
public class UserInfoDaoImpl extends BaseDao implements UserInfoDao { public UserInfo getUserByNamePwd(String name, String pwd) {
UserInfo user=null;
String sql="select * from userinfo where uname=? and password=?";
Object[] param={name,pwd};
rs=this.executeQuery(sql, param);
try {
if(rs.next()){
user=new UserInfo(rs.getInt("id"), rs.getString("uname"), rs.getString("password"), rs.getInt("age"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.closeAll(rs, pstm, conn);
}
return user;
} }

UserInfoDaoImpl.java

6.在com.service包下创建业务接口UserInfoService.java

 package com.service;

 import com.entity.UserInfo;
/**
* 服务接口
* @author Dell
*
*/
public interface UserInfoService{
public UserInfo login(String name,String pwd);
}

UserInfoService.java

7.在com.service.impl包下创建业务接口实现类UserInfoServiceImpl.java

 package com.service.impl;

 import com.dao.UserInfoDao;
import com.dao.impl.UserInfoDaoImpl;
import com.entity.UserInfo;
import com.service.UserInfoService;
/**
* 服务实现类
* @author Holly老师
*
*/
public class UserInfoServiceImpl implements UserInfoService{ public UserInfo login(String name, String pwd) {
UserInfoDao dao=new UserInfoDaoImpl();
return dao.getUserByNamePwd(name, pwd);
} }

UserInfoServiceImpl.java

8.在com.action包下创建Action.java接口

package com.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 1.定义主控制器,用于分发请求
* @author Holly老师
*
*/
public interface Action {
/**
* 用于分发拦截的请求
* @param request 请 求
* @param response 响应
* @return 执行完操作要跳转的页面,“success”跳转到成功页面,“fail”跳转到失败页面
*/
public String execute(HttpServletRequest request,HttpServletResponse response); }

Action.java

9.在com.action包下创建LoginAction.java实现类

 package com.action;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.entity.UserInfo;
import com.service.UserInfoService;
import com.service.impl.UserInfoServiceImpl;
/**
* 2.每个action表示用户请求的一个操作
* 该Action控制登录
* @author holly老师
*
*/
public class LoginAction implements Action {
/**
* 控制页面跳转的方法
* request获取页面输入,然后调用业务方法得到结果 ,
* 如果登录失败则将结果保存到request对象中,
* 如果登录成功,将用户信息保存到session中
*/
public String execute(HttpServletRequest request,
HttpServletResponse response) {
//1.获得页面请求参数
String username=request.getParameter("username");
System.out.println("username"+username);
String password=request.getParameter("password");
System.out.println("password"+password); //2.业务处理
UserInfoService userservice=new UserInfoServiceImpl();
UserInfo userinfo=userservice.login(username, password); if(userinfo==null){
System.out.println("没查到");
request.setAttribute("message", "用户名或密码错误");
return "/page/login.jsp";
}else{
System.out.println("查到了");
request.getSession().setAttribute("login",userinfo );
return "/page/show.jsp"; }
} }

LoginAction.java

10.在com.filter包下创建ActionFilter.java核心过滤器类

 package com.filter;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.action.Action;
import com.action.LoginAction;
/**
* 核心控制器=过滤器
* 在处理每次请求时首先根据请求路径找到将要被执行后的Action,然后调用Action的execute方法,
* 根据execute方法返回的转发路径转发到对应的JSP页面
* @author Holly老师
*
*/
public class ActionFilter implements Filter {
//定义接受过滤器节点里param的参数
private String encode = null; //定义过滤器参数变量
private FilterConfig config;
/**
* 销毁
*/
public void destroy() {
encode = null;
}
/**
* 初始化
*/
public void init(FilterConfig config) throws ServletException {
//接受web.xml文件中配置的参数
String encode = config.getInitParameter("encode");
if (this.encode == null) {
this.encode = encode;
} }
/**
* 请求处理
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { //乱码处理
if (null == request.getCharacterEncoding()) {
request.setCharacterEncoding(encode);
} //1.将请求转换成HtpServlet请求
HttpServletRequest hsr=(HttpServletRequest) request;
HttpServletResponse hsp= (HttpServletResponse) response; //2.获得Action
//Action action=new LoginAction();
Action action=this.getAction(hsr); //3.调用Action的execute方法
//定义接受Action中execute方法返回值的变量
String resultView=null;
try {
//得到某个action请求的页面地址
resultView=action.execute(hsr,hsp);
} catch (Exception e) {
e.printStackTrace();
} //4.页面跳转
if(null!=resultView){
//请求下发
request.getRequestDispatcher(resultView).forward(request, response);
} }
/**
* 获取请求中的Action
* @param hsr
* @return
*
*/
private Action getAction(HttpServletRequest request) {
//1.获取请求中的uri:项目名/Xxx.action
//Stuts2_Part1__C1_MyMVC/login.action
String uri=request.getRequestURI();
System.out.println("uri:"+uri); //2.获取上下文路径:项目名
//Stuts2_Part1__C1_MyMVC/
String contextPath=request.getContextPath();
System.out.println("contextPath:"+contextPath); //3.获取Xxx.action,从某个位置截取到最后
String actionPath=uri.substring(contextPath.length());
System.out.println("actionPath:"+actionPath); //4.获取Action的名字:Xxx
String actionName=actionPath.substring(1,actionPath.lastIndexOf('.')).trim();
System.out.println("actionName:"+actionName); //5.获取某个Action类对象
Action action=null;
if("login".equals(actionName)){
action=new LoginAction();
}
//返回拦截的某个action对象
return action;
} }

ActionFilter.java

11.编辑WebRoot先的WEB-INF下的web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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">
<welcome-file-list>
<welcome-file>page/login.jsp</welcome-file>
</welcome-file-list> <!-- 以.action结束的请求都会派发到ActionFilter中进行过滤 -->
<filter>
<filter-name>requestFilter</filter-name>
<filter-class>com.filter.ActionFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>requestFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> </web-app>

web.xml

12.在WebRoot下创建page文件夹,并创建login.jsp页面

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<fieldset style="width:400px; height=400px;">
<legend>登录</legend>
<form action="login.action">
<table>
<tr><td>用户名:</td><td><input type="text" id="username" name="username"/></td></tr>
<tr><td>密 码:</td><td><input type="password" id="password" name="password"/></td></tr>
<tr><td><input type="submit" value="登录"/></td><td><input type="reset" value="重置"/></td></tr>
</table>
</form>
</fieldset>
</body>
</html>

login.jsp

13.在WebRoot下创建page文件夹,并创建show.jsp页面

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
登录成功!欢迎来到首页
</body>
</html>

show.jsp

14.可以运行了!

中文用户名登录

自定义MVC框架(一)-(没有基于xml的)的更多相关文章

  1. 自定义MVC框架

    我们在学习自定义MVC框架的时候常常会听到Model1 ,Model2和MVC.那么什么是Model1 什么是Model2什么又是MVC呢? 什么是Model1? Model1就是一种纯jsp开发技术 ...

  2. Struts2 自定义MVC框架

    一.Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是在Model1的基础上,将业务逻辑的代码分离开来,单独形 ...

  3. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  4. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

  5. MVC框架浅析(基于PHP)

    MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...

  6. 自定义MVC框架之工具类-模型类

    截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...

  7. 自定义MVC框架之工具类-图像处理类

    截止目前已经改造了4个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 图像处理类: 1,图片加水印处理( ...

  8. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  9. struts2自定义MVC框架

    自定义MVC:(首先了解Model1和Model2的概念) Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是 ...

  10. 使用Intellij Idea自定义MVC框架

    ---恢复内容开始--- 今天我学习了自定义一个简单的MVC框架,这个我们首先要知道什么是MVC框架! MVC框架: MVC全名是Model View Controller,是模型(model)-视图 ...

随机推荐

  1. 双数组trie树的基本构造及简单优化

    一 基本构造 Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现.它本质上是一个确定的有限状 ...

  2. ecshop3.0.0注入

    配个环境来演示给别人看..分析一下.flow.php文件缺陷,order_id在post请求没有单引号保护.造成注入 <?php elseif ($_REQUEST['step'] == 're ...

  3. ubuntu 使用apt-get install 安装php5.6--php7

    使用ppa增加源:$ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ondrej/php ...

  4. Navicat连接不上MySQL

    [root@localhost init.d]# pwd /etc/init.d [root@localhost init.d]# mysql -u root -p Enter password: E ...

  5. 【AndroidStudio】关于SVN的相关配置简介

    AndroidStudio 的SVN 安装和使用方法与我以前用的其他IDE 都有很大差别,感觉特麻烦,网上相关资料很少,貌似现在 Git 比较流行,之前有用过 github 但是他只能是开源项目免费, ...

  6. HUD 1171 Big Event in HDU(01背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  7. GNU Octave fact函数输出

    无意间发现了这么一个函数,可以随机输出关于RMS的笑话.挺有意思的. `fact' is a function from the file /usr/share/octave/3.6.2/m/misc ...

  8. 【转】Jmeter(二)-使用代理录制脚本

    Jmeter脚本是以JMX格式为主 Jmeter也是支持录制的,支持第三方录制方式和代理录制方式. 1.第三方录制主要是通过badboy来录制,录制后另存为jmx格式即可. 2.Jmeter也有自己的 ...

  9. 常用Git命令大全

    Git命令 查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show ...

  10. jquery学习笔记3——jq HTML

    jQuery最常用的部分就是操作DOM,jQuery提供了一系列操作DOM的相关方法,使其很容易: 一.获取 1.获取内容 text()方法    设置或返回所选元素的文本内容: html()方法   ...