開發流程:
1、準備Jar包(到Blank項目中拷)
2、將struts2的核心類配置到web.xml -------配過濾器(filter): org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
3、寫一個控制器(Action)--EJB=JavaBean+業務方法(默認String execute() )
4、寫返回頁面(JSP頁面)
5、寫struts2的配置文件:struts.xml---把我們寫的Action和返回頁面配置到該文件中
6、測試
最小包:
Struts2能幫我們做:
1、幫助我們把前端頁面上傳的參數獲取,並封裝成EJB(Action對象)
2、幫助我們自動把信息存放到request中
3、幫我們實現頁面轉發(根據struts.xml中的結果頁面配置 <action>中的<result>標籤配置)
4、以上3個是核心功能。另外,還有國際化、表單可配置、文件上傳下載、頁面標籤庫,驗證框架,對Ajax的支持,數據庫連接和事務,攔截器!
canStrutsHello
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd">
<display-name></display-name>
<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>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 表單請求地址爲struts.xml配置文件中action的name值 -->
<form action="aa/login.action" method="post">
姓名:<input type="text" name="userName" /><br/>
密碼:<input type="text" name="password" /><br/>
<input type="submit" value="登錄" />
</form>
</body>
</html>
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值可隨意取,可被繼承,namespace屬性值"/"+字符,可防止action的name值相同時出錯,進行分辨。 extends屬性 值struts-default繼承struts的一個默認包-->
<package name="login" namespace="/aa" extends="struts-default">
<action name="login" class="cn.hncu.user.login.LoginAction">
<result name="index">/index.jsp</result>
<result name="success">/jsps/success.jsp</result>
</action>
</package>
</struts>
LoginAction.java
package cn.hncu.user.login;
import com.opensymphony.xwork2.ActionSupport;
/*
* 注意:
* 1.寫Action時一定要要寫 set get 方法,在業務方法中可以直接屬性名或 get方法直接獲取屬性值
* 2.寫Action時,屬性名要和前臺發送數據的屬性名一致,這樣struts會幫我自動獲取並且封裝到Action中
* 3.寫Action時,業務方法的返回值是一個字符串,該值決定導向不同結果對象頁面(字符串值與頁面的對應關係,由struts.xml的<action>來定義)
* 4.寫Action時,如果想使用request,response,session,application等,繼承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;
}
@Override//業務邏輯方法------調用service層
public String execute() throws Exception {
/*
//這一段展示使用web容器------普通EJB也可以這樣使用
ActionContext context=ActionContext.getContext();
context.getApplication().put("user", "Tom");//類似 application.setAttribute("user","Tom");
String user=(String) context.getApplication().get("user");//application.getAttribute("user");
System.out.println("user :"+user);
*/
// String name=getUserName();
// String pwd=getPassword();
String name=userName;
String pwd=password;
//按理這裏應該訪問service層以進行登錄判斷,此處模擬了
System.out.println("這裏模擬登錄service了.......");
boolean boo=name.endsWith("hncu")&&pwd.equals("1234");
if(boo){
return "success";
}else{
return "index";
}
}
@Override
public void validate() {
System.out.println("校驗:"+userName+","+password);
}
}
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h2>恭喜你,登錄成功了!</h2>
</body>
</html>
主頁:
登陸結果: