一要求
模拟一个用户的登录功能
登录页面: 校验账号密码
Form使用struts的
点击登录---login里面
获取参数并且判断账号密码是否匹配
如果匹配--到查询action里 ,通过查询的action跳到查询页面
如果没有登录直接进查询的action返回登录页面
二实现
1.配置Struts基本构成(详情看 --初识框架之struts2(一))
2.jsp页面
------login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!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>Insert title here</title>
<script type="text/javascript">
function checkForm(){
//制定正则表达式 获取表单数据
//账号 第一位是字母 由6-18位数字 字母 和 _组成 \w表示字母数字下划线
var regUsername=/^[a-zA-Z]{1}\w{5,15}$/;
var regPassword=/^[a-zA-Z]\w{5,17}$/;
//获取表单的数据 的值 document.getElementById("id").vaule;
var username=document.getElementById("username").value;
var password=document.getElementById("password").value;
//校验
if(!regUsername.test(username)){
document.getElementById("s1").innerHTML="<font color=red>请输入 第一位为 字母 由6-18位数字 字母 和 _组成 ";
return false;
}else{
document.getElementById("s1").innerHTML="√";
}
if(!regPassword.test(password)){
document.getElementById("s2").innerHTML="<font color=red>请输入 第一位为 字母 由6-18位数字 字母 和 _组成 ";
return false;
}else{
document.getElementById("s2").innerHTML="√";
}
}
</script>
</head>
<body>
<h1>欢迎来到注册页面</h1>
<s:form action="login" method="post" οnsubmit="return checkForm()" theme="simple">
账号:<s:textfield name="username" id="username"></s:textfield><span id="s1"></span><br>
密码:<s:password name="password" id="password"></s:password><span id="s2"></span><br>
<s:submit></s:submit>
</s:form>
</body>
3.action方法
包括登录和查询方法
package com.zy.action;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.zy.model.User;
public class UserAction extends ActionSupport implements ModelDriven<User>{
/**
*
*/
private static final long serialVersionUID = 1L;
private User user= new User();
public String login(){
System.out.println("登录了");
//如果账号=xx 密码=xx登录成功
if("a123456".equals(user.getUsername())&&"a123456".equals(user.getPassword())){
//绑定参数, 目的是传参到拦截器里 ,然后拦截直接在页面不登录就不嫩查询
ServletActionContext.getRequest().getSession().setAttribute("loginFlag", "loginSuccess");
return SUCCESS;
}
return INPUT;
}
public String select(){
System.out.println("查询"+user);
return SUCCESS;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
4。拦截器(获取参数并且判断)
a.放行
b.如果直接在浏览器直接输入页面 则返回登录页面
package com.zy.inter;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class MyMethodsInter extends MethodFilterInterceptor{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
//获取参数 并且接受
String flag = (String) ServletActionContext.getRequest().getSession().getAttribute("loginFlag");
if("loginSuccess".equals(flag)){
// 放行
arg0.invoke();
}else{
return "login";
}
return null;
}
}
5. struts.xml
a.自定义拦截器配置
b.action方法result 视图
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="my" extends="struts-default" abstract="true">
<interceptors>
<interceptor name="myInter" class="com.zy.inter.MyMethodsInter"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="myInter" >
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
</package>
<!-- 整理归类(类) -->
<package name="user" extends="my">
<!-- 动作1(方法1) -->
<action name="login" class="com.zy.action.UserAction" method="login">
<!-- result视图 -->
<!-- type="chain" action到action需要请求转发 -->
<result type="chain">select</result>
<result name="input">/login.jsp</result>
</action>
<action name="select" class="com.zy.action.UserAction" method="select">
<!-- result视图 -->
<result >/success.jsp</result>
<result name="input">/login.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
</struts>