- Struts 2登录和注销示例
此示例包含三个链接登录, 注销和配置文件。最终用户只有在登录后才能单击个人资料页面。登录后, 他/她可以进入个人资料页面。如果最终用户单击注销页面, 则将无法访问个人资料页面。
在这里, 我们假设你在Oracle数据库中有一个名为user3333的表, 其中包含记录。表查询为:
CREATE TABLE"USER3333"
( "ID" NUMBER, "NAME" VARCHAR2(4000), "PASSWORD" VARCHAR2(4000), "EMAIL" VARCHAR2(4000), CONSTRAINT "USER3333_PK" PRIMARY KEY ("ID") ENABLE
)
/
使用struts 2创建登录和注销应用程序的示例
在此示例中, 我们需要以下页面
- index.jsp, 用于提供登录, 注销和配置文件的链接。
- 用于定义结果和操作的struts.xml。
- Login.java, 用于定义登录和注销逻辑。
- LoginDao.java用于匹配数据库中的用户名和密码。
- Profile.java, 用于检查用户是否登录。
- 查看显示结果的组件。
该jsp页面创建三个用于登录, 注销和配置文件的链接。
index.jsp
<
hr/>
<
a href="http://www.srcmini.com/login">
login<
/a>
|
<
a href="http://www.srcmini.com/logout">
logout<
/a>
|
<
a href="http://www.srcmini.com/profile">
profile<
/a>
2)在struts.xml中定义动作并生成结果
该xml文件定义了一个包和4个动作。每个动作至少定义一个结果页面。
对于loginprocess和logout操作, 我们使用相同的操作类, 但是调用方法不同。
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.srcmini.Login">
<
result name="success">
loginsuccess.jsp<
/result>
<
result name="error" >
loginerror.jsp<
/result>
<
/action>
<
action name="logout" class="com.srcmini.Login" method="logout">
<
result name="success" >
logoutsuccess.jsp<
/result>
<
/action>
<
action name="profile" class="com.srcmini.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.srcmini;
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.srcmini;
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.srcmini;
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
【Struts 2项目(登录和注销示例)】该页面创建登录表单。
<
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="http://www.srcmini.com/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="http://www.srcmini.com/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
profileerror.jsp
此页面将打印要首先登录的消息, 并包括login.jsp页面。
Please login first to see profile
<
jsp:include page="login.jsp">
<
/jsp:include>
下载此示例
推荐阅读
- SVG第一个例子详解
- Struts 2提取表的所有记录示例
- Struts 2 i18n用法示例图解教程
- Struts 2 Tiles Framework集成教程示例
- Struts 2实现注册表单示例
- Struts 2迭代器标签示例
- e551. 精简的Applet
- android view 转Bitmap 生成截图
- e555. 在Applet中播放音频