近期剛剛入門struts2。這里做一個簡單的struts2實例來跟大家一起學習一下。
本例實現最簡單的登陸,僅包括兩個頁面:login.jsp 用來輸入username與password;success.jsp 為登陸成功頁面。error.jsp為登陸失敗頁面。
1、新建web項目“struts2”
2、引入jar包
下載struts2所需jar包 struts-2.3.24-all.zip
解壓后將例如以下最主要的jar包導入到WebRoot/WEB-INF/lib下
3、在WebRoot下建立頁面
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head> <body><form action="login">username:<input type="text" name="username" /><br>password:<input type="password" name="password" /><br><input type="submit" value="submit" /><br></form> </body>
</html>
此處form標簽的action屬性值指向的是以下struts.xml中的action標簽的name屬性,表示提交的表單由action標簽中的class指向的LoginAction類來處理。
success.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body>恭喜您:${requestScope.username} 登陸成功<br/></body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head> <body>登陸失敗</body>
</html>
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"><display-name></display-name> <welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><!-- 此Filter目的是設置全部的請求都由Struts2來處理 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern><!-- 全部請求都由Struts2來處理 --></filter-mapping>
</web-app>
此處用filter過濾器設置了不論什么client的請求都由struts2來處理(設置struts為請求分發器)
4、建立action
package com.danny.user.action;public class LoginAction {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() {if("admin".equals(username) && "admin".equals(password)){return "success";}else{return "error";}}
}
這個LoginAction用于處理登陸頁面發來的數據。既然要處理數據,首先要接收數據,那么它是怎樣接收到前臺的數據的呢?
頁面提交之后,去struts.xml中尋找相應action,進而找到LoginAction。LoginAction依據表單中input的name屬性來獲取值。規則就是:input的name屬性值要和LoginAction中相相應的get、set方法后面的值一樣。與LoginAction的字段沒有關系:比方input的name屬性值為“username”,那么LoginAction重相應的字段的get方法名應為“getUsername()”。所以這個LoginAction全然能夠改成這樣:
package com.danny.user.action;public class LoginAction {private String name;private String pwd;public String getUsername() {return name;}public void setUsername(String username) {this.name = username;}public String getPassword() {return pwd;}public void setPassword(String password) {this.pwd = password;}public String execute() {if("admin".equals(name) && "admin".equals(pwd)){return "success";}else{return "error";} }
}
LoginAction中的execute方法是每一個action必需要實現的方法,用于處理數據并返回要顯示的界面。
5、配置struts.xml
在src文件夾下建立struts.xml
<?
xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="struts2" extends="struts-default"> <!-- extends是繼承的意思,struts-default位于struts2-core-2.3.24.jar.struts-default.xml --> <action name="login" class="com.danny.user.action.LoginAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
struts.xml中,每一個action相應一個action。這個name為”login”的action就相應com.danny.user.action包下的LoginAction。result的name相應于action的execute的返回值,假設返回”success”則跳轉到success.jsp;假設返回”error”則跳轉到error.jsp。
至此。部署項目,訪問localhost:8080/struts2,進入登陸頁面:
登陸成功時,跳轉到成功頁面:
用戶名、密碼錯誤時,跳轉到登陸失敗頁面:
整個步驟例如以下