struts2.2.3
登陆验证:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆。
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>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml 关键在此文件需要配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.ui.templateDir" value="template" />
<constant name="struts.ui.templateSuffix" value="ftl" />
<package name="struts2" extends="struts-default">
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority" class="net.mtk.tools.LoginInterceptor"> </interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login2.jsp</result>
</global-results>
<action name="login" class="net.mtk.action.loginAction">
<result name="success">/welcome.jsp</result>
<result name="input">/login2.jsp</result>
<result name="error">/login2.jsp</result>
</action>
<action name="show" class="net.mtk.action.ShowAction">
<result name="success">/show.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action>
<action name="sho" class="net.mtk.action.shoAction">
<result name="success">/sho.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action>
</package>
</struts>
login2.jsp 登陆页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login2.jsp' starting page</title>
</head>
<body>
<s:fielderror>
<s:param>username </s:param>
<s:param>password </s:param>
</s:fielderror>
<s:form action="login">
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:submit label="登录"></s:submit>
</s:form>
</body>
</html>
loginAction.java
package net.mtk.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class loginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
if ("hello".equals(this.getUsername().trim())
&& "123456".equals(this.getPassword().trim())) {
//先存到session里,要验证的时候取出来对比
ActionContext.getContext().getSession()
.put("USER_NAME", getUsername());
return this.SUCCESS;
} else {
this.addFieldError("username", "username or password is error.");
return this.ERROR;
}
}
// 重写ActionSupport类中的validate()方法;实现表单验证
@Override
public void validate() {
if (null == this.getUsername() || "".equals(this.getUsername().trim())) {
this.addFieldError("username", "userName request is null");
}
if (null == this.getPassword() || "".equals(this.getPassword().trim())) {
this.addFieldError("password", "password request is null");
}
}
}
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>yuewei's Welcome</title>
</head>
<body>
<h1>
登录成功后显示此页面
</h1>
<a href="show.action" mce_href="show.action">show</a>
</body>
</html>
ShowAction.java
package net.mtk.action;
import com.opensymphony.xwork2.ActionSupport;
public class ShowAction extends ActionSupport {
public String execute() {
// 此处在loginAction里存了,不用再存
// ActionContext.getContext().getSession().put("USER_NAME", getUsername());
return "success";
}
}
show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>yuewei's Show</title>
</head>
<body>
登录后执行此页面
<a href="sho.action" mce_href="sho.action">再进入</a>
<br>
</body>
</html>
sho.java
package net.mtk.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class shoAction extends ActionSupport {
public String execute() {
//此处是存入另外通不过的验证的值,用于返回登陆界面
ActionContext.getContext().getSession()
.put("USER_NAME", "dd");
return "success";
}
}
sho.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>yuewei's Show</title>
</head>
<body>
登录后执行此页面
<br>
</body>
</html>
LoginInterceptor.java 关键的登陆验证拦截器文件
package net.mtk.tools;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class LoginInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
//取出session中存入的值
String username_dd = (String) ActionContext.getContext().getSession()
.get("USER_NAME");
System.out.println("username=" + username_dd);
System.out.println("进入登陆验证拦截器!");
if (username_dd != null && username_dd.equals("hello")) {
System.out.println("已经登录,验证成功!");
return invocation.invoke();
}
return Action.LOGIN;
// return invocation.invoke();
}
}
关键性的语句已用红字标出,今天总算又搞出点东东来。加油!
感谢:http://blog.csdn.net/java_cxrs/article/details/5514340 的主人