stust2 hibernate spring 框架复习(二)

上节主要讲了stust2的相关配置,本节将讨论代码实现的原理

第二节:Stust2 登录验证实例代码详解

首先,我们先理清文件结构:


从java resources开始从上到下,有用的文件为:

src(源码)

    hjc.action.LoginAction.java---获取网页(jsp form)中的username和password,然后通过sql语句进行数据库操作

    hjc.dbr.DBUtil.java---封装数据库的连接、关闭、增删查改等操作。

    hjc.vo.User.java---封装用户类

    stust.xml---stust2的配置文件

lib(内涵各种可能用到的jar依赖包,上一节有截图)

web.xml---也是stust2的配置文件

(注:关于这两个配置文件的工作原理,可参照http://blog.csdn.net/gopain/article/details/40790523)

.jpg文件---jsp文件所调用的图片

login.jsp---登录页面,需要输入用户名密码

index.jsp---登录成功的结果页面

jmp.jsp---登录失败的结果页面

以一次登录为例:

在j2ee中运行login.jsp,url中review_ssh为项目(project)名称


我们输入数据库中存在的用户名密码:

(数据库名为hjc,表名为user,主键为uid类型int递增)


输入的是xlc,grc


页面跳转成功,到index.jsp,这里用的是明文传输


从开始的登录页面,到跳转成功,经历了从jsp——传值——java——数据库操作——jsp的过程

首先看jsp如何传值到java上,方法是stust.xml中的相关配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="default" namespace="/" extends="struts-default">
    	<global-results>
			<result name="fail">jmp.jsp</result>
		</global-results>
		<action name="login" class="hjc.action.LoginAction">
			<result name="success">index.jsp</result>
			<result name="failed">jmp.jsp</result>
		</action>
    </package>

</struts>
里面有一段
<action name="login" class="hjc.action.LoginAction">

意思就是,如果触发"login"的action,就执行hjc.action.LoginAction.java,上面已经说到,这个java文件的作用是进行数据库操作的。

登录时,jsp执行的action为login!select,即执行login的action--跳到hjc.action.LoginAction.java,再执行这个java文件的select的方法。所以我们知道了,jsp中form表单action的格式为 “action!method”(动作!方法)。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login & Register</title>
<script>
function onregister(){
	document.getElementById("loginid").style.display="none";
	document.getElementById("registerid").style.display="";
}
function onlogin(){
	document.getElementById("loginid").style.display="";
	document.getElementById("registerid").style.display="none";
}
</script>
</head>
<style> 
body{text-align:center} 
</style> 
<body background="bkg.jpg">
<div id = "loginid" style="display:">
		<s:actionerror/>
<h1>登录</h1><br>
	<form action="login!select" name="loginform">
	account : <input type="text" name="username"><br><br>
	password: <input type="password" name="password"><br><br>
	<input type="submit" value="登录" οnclick="check()"><br><br>
	</form>
	<button οnclick="onregister()">立即注册</button>
</div>
<div id = "registerid" style="display:none">
<h1>注册</h1><br>
	<form action="login!add" name="loginform">
	account : <input type="text" name="username"><br><br>
	password: <input type="password" name="password"><br><br>
	<input type="submit" value="注册"><br><br>
	</form>
	<button οnclick="onlogin()">返回登录</button>
</div>
</body>
</html>

之后我们看java中的操作:

package hjc.action;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import hjc.dbr.DBUtil;
import hjc.vo.User;

public class LoginAction extends ActionSupport implements ModelDriven<User>{
	private User user=new User();
	public String add(){
		DBUtil db=new DBUtil();
		String sql = "insert into user value(null,?,?)";
		int rs = db.executOther(sql, new Object[] {user.getUsername(),user.getPassword()});
		if(rs>0) return SUCCESS;
		return "failed";
	}
	public String select() {
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session= request.getSession();
		System.out.println(user.getUsername().length());
		session.setAttribute("password", user.getPassword());
		session.setAttribute("username", user.getUsername());
		DBUtil db=new DBUtil();
		String sql = "select * from user where username=? and password=?";
		ResultSet rs = db.execQuery(sql, new Object[] {user.getUsername(),user.getPassword()});
		try {
			if(rs.next()) return SUCCESS;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "failed";
	}
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

}

session是干什么的?

session是将本次登录的个人信息存在session中,以便后续的页面操作。也就是说让跳转之后“你”还是“你”。



后记:在只有stust2的框架中,我们在数据库不发生更改的情况下可以实现登录验证,与数据库增删查改相关的相当多的功能,但是如果数据库的表结构发生更改,比如在user中,我们加了一个2级密码,那么数据库表以及java代码都需要大面积改动。

本节项目下载:https://pan.baidu.com/s/1U3jTgomXflQs7gWofhFdMQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值