猿教程 Logo

Struts2实例:登录和注销

在使用struts 2创建登录和注销应用程序之前,必须清除struts 2中aware接口的概念。在此示例中,我们使用SessionAware接口将信息放在会话范围和ServletActionContext类中,以从 会话范围获取信息。

此示例包含三个链接:登录,注销和个人资料页面。 最终用户在他/她登录之前无法点击个人资料页面。登录后,他/她可以进入个人资料页面。 如果最终用户点击注销页面,他将无法访问该资料页面。

在这里,我们假设您在oracle数据库中有一个名为user3333的表,其中包含记录。 表查询是:

CREATE TABLE  "USER3333" 
   (	"ID" NUMBER, 
	"NAME" VARCHAR2(4000), 
	"PASSWORD" VARCHAR2(4000), 
	"EMAIL" VARCHAR2(4000), 
	 CONSTRAINT "USER3333_PK" PRIMARY KEY ("ID") ENABLE
   )
/

使用struts2创建登录和注销应用程序的示例

在这个例子中,我们需要以下页面

  1. index.jsp用于提供登录,注销和配置文件的链接。

  2. 用于定义结果和操作的struts.xml。

  3. Login.java用于定义登录和注销逻辑。

  4. LoginDao.java用于在数据库中匹配用户名和密码。

  5. Profile.java用于检查用户是否登录。

  6. 查看显示结果的组件。


1)创建index.jsp进行输入

这个jsp页面创建三个用于登录,注销和配置文件的链接。

index.jsp

<hr/>
<a href="login">login</a>|
<a href="logout">logout</a>|
<a href="profile">profile</a>

2)struts.xml中定义action和结果

这个xml文件定义了一个包和4个action。 每个action定义至少一个结果页。

对于loginprocess和logout操作,我们使用相同的action类,但调用方法不同。

struts.xml

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

<action name="login">
<result >login.jsp</result>
</action>

<action name="loginprocess" class="com.javatpoint.Login">
<result name="success"  >loginsuccess.jsp</result>
<result name="error" >loginerror.jsp</result>
</action>

<action name="logout" class="com.javatpoint.Login" method="logout">
<result name="success" >logoutsuccess.jsp</result>
</action>

<action name="profile" class="com.javatpoint.Profile">
<result name="success" >profilesuccess.jsp</result>
<result name="error" >profileerror.jsp</result>
</action>

</package>
</struts>

3)创建用于登录和注销的动作类

此操作类实现SessionAware接口,并覆盖setSession方法以将信息存储在会话范围中。

对于注销,我们只是调用SessionMap的invalidate()方法。

Login.java

package com.javatpoint;

import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

public class Login implements SessionAware{
private String username,userpass;
SessionMap<String,String> sessionmap;

public String getUsername() {
	return username;
}

public void setUsername(String username) {
	this.username = username;
}

public String getUserpass() {
	return userpass;
}

public void setUserpass(String userpass) {
	this.userpass = userpass;
}

public String execute(){
	if(LoginDao.validate(username, userpass)){
		return "success";
	}
	else{
		return "error";
	}
}

public void setSession(Map map) {
	sessionmap=(SessionMap)map;
	sessionmap.put("login","true");
}

public String logout(){
	sessionmap.invalidate();
	return "success";
}

}

4)创建Dao类验证用户

该类简单地从存储在oracle数据库中的表中验证用户。

LoginDao.java

package com.javatpoint;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class LoginDao {

public static boolean validate(String username,String userpass){
 boolean status=false;
  try{
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection con=DriverManager.getConnection(
   "jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
   
   PreparedStatement ps=con.prepareStatement(
     "select * from user3333 where name=? and password=?");
   ps.setString(1,username);
   ps.setString(2,userpass);
   ResultSet rs=ps.executeQuery();
   status=rs.next();
  }catch(Exception e){e.printStackTrace();}
 return status;
}
}

5)创建Profile类

该类从会话范围获取信息,如果在会话范围中发现登录名,则返回成功否则为false。

Profile.java

package com.javatpoint;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;

public class Profile {

public String execute(){
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();

String s=(String)session.getAttribute("login");
if(s!=null && !s.equals("")){
	return "success";
}
else{
	return "error";
}

}
}

6)创建视图组件

有很多视图组件:

  • login.jsp
  • loginsuccess.jsp
  • loginerror.jsp
  • logoutsuccess.jsp
  • profilesuccess.jsp
  • profileerror.jsp

此页面创建登录表单。

login.jsp

<jsp:include page="index.jsp"></jsp:include>
<hr/>
<%@ taglib uri="/struts-tags" prefix="s" %>

<s:form action="loginprocess">
<s:textfield name="username" label="Name"></s:textfield>
<s:password name="userpass" label="Password"></s:password>
<s:submit value="login"></s:submit>
</s:form>

此页面打印带有用户名的欢迎信息。

loginsuccess.jsp

<jsp:include page="index.jsp"></jsp:include>
<hr/>
<%@ taglib uri="/struts-tags" prefix="s" %>

<br/>Welcome, <s:property value="username"/>

此页面显示错误消息。

loginerror.jsp

Sorry username or password error!
<jsp:include page="login.jsp"></jsp:include>

此页面只显示成功注销的消息。

logoutsuccess.jsp

<jsp:include page="index.jsp"></jsp:include>
<hr/>
You are successfully logged out!

此页面打印欢迎来到个人资料消息。

profilesuccess.jsp

<jsp:include page="index.jsp"></jsp:include>
<hr/>
<br/>Welcome to profile

此页面打印消息以先登录,并包括login.jsp页面。

profileerror.jsp

Please login first to see profile
<jsp:include page="login.jsp"></jsp:include>


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Struts/struts-2-login-and-logout-example.html