
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.可以运行了!
中文用户名登录