Struts 2项目(登录和注销示例)

  1. Struts 2登录和注销示例
在使用struts 2创建登录和注销应用程序之前, 必须清除struts 2中的感知接口的概念。在本示例中, 我们使用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 ) /

使用struts 2创建登录和注销应用程序的示例
在此示例中, 我们需要以下页面
  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="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>

下载此示例

    推荐阅读