您的位置:首页 > 编程语言 > Java开发

初识框架之struts2(三。登录页面(初级)+拦截器)

2017-08-16 20:46 513 查看

一要求

模拟一个用户的登录功能

 登录页面: 校验账号密码

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" onsubmit="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>


9417
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息