struts2 默認配置
1、全局視圖跳轉配置、配置的各項默認值
在config.xml中如此配置
<!-- 配置全局跳轉視圖 -->
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<!-- 配置各項默認值 -->
<!--
name 只配置了訪問路徑名稱
class 默認執行的action在struts-default有配置
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
method 默認爲execute
默認的方法execute返回值爲success,對應的頁面去全局視圖找。
-->
<action name="test"></action>
<!-- 什麼情況不配置class? 即處理的aciton -->
<!-- 答案: 當只是需要跳轉到WEB-INF下資源的時候。 -->
<action name="test2">
<result name="success" type="redirect">/WEB-INF/index.jsp</result>
</action>
2、structs2 數據處理的集中方式
1)直接拿到ServletApi
2)通過ActionContext類
3)實現接口的方法
public class DataAction_bak extends ActionSupport{
@Override
public String execute() throws Exception {
// 1. 請求數據封裝; 2. 調用Service處理業務邏輯,拿到結果數據
// 3. 數據保存到域中
/*
*
// Struts中對數據操作,方式1: 直接拿到ServletApi, 執行操作
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext application = ServletActionContext.getServletContext();
// 操作
request.setAttribute("request_data", "request_data1");
session.setAttribute("session_data", "session_data1");
application.setAttribute("application_data", "application_data1");
*/
// 【推薦:解耦的方式實現對數據的操作】
// Struts中對數據操作,方式2: 通過ActionContext類
ActionContext ac = ActionContext.getContext();
// 得到Struts對HttpServletRequest對象進行了封裝,封裝爲一個map
// 拿到表示request對象的map
Map<String,Object> request = ac.getContextMap();
// 拿到表示session對象的map
Map<String, Object> session = ac.getSession();
// 拿到表示servletContext對象的map
Map<String, Object> application = ac.getApplication();
// 數據
request.put("request_data", "request_data1_actionContext");
session.put("session_data", "session_data1_actionContext");
application.put("application_data", "application_data1_actionContext");
return SUCCESS;
}
/**
* 數據處理, 方式3: 實現接口的方法
*
*/
public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
// struts運行時候,會把代表request的map對象注入
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
// 注入session
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
// 注入application
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public String execute() throws Exception {
// 數據
request.put("request_data", "request_data1_actionAware");
session.put("session_data", "session_data1_actionAware");
application.put("application_data", "application_data1_actionAware");
//
return SUCCESS;
}
}
3、請求數據封裝
regist.jsp
<body>
<form action="${pageContext.request.contextPath }/user_register.action" method="post">
用戶名:<input type="text" name="user.name"><br/>
密碼:<input type="text" name="user.pwd"><br/>
年齡:<input type="text" name="user.age"><br/>
生日:<input type="text" name="user.birth"><br/>
<input type="submit" value="註冊">
</form>
</body>
User
public class User {
// 封裝請求數據
private String name; // 必須給set / get可以不用給
private String pwd;
private int age;
private Date birth;
public void setName(String name) {
this.name = name;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public void setAge(int age) {
this.age = age;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getName() {
return name;
}
public String getPwd() {
return pwd;
}
public int getAge() {
return age;
}
public Date getBirth() {
return birth;
}
}
UserAction
/**
* Struts核心業務: 請求數據自動封裝以及類型轉換
*
*/
public class UserAction {
// 對象類型,一定給get方法
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
// 處理註冊請求
public String register() {
System.out.println(user.getName());
System.out.println(user.getPwd());
System.out.println(user.getAge());
System.out.println(user.getBirth());
return "success";
}
}
4、structs2 日期轉換器
日期 默認情況下 只支持 yyyy-mm–dd
轉換器類
/**
* 自定義類型轉換器類
*
*
*/
public class MyConverter extends StrutsTypeConverter {
// 新需求: 要求項目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日..
// 先定義項目中支持的轉換的格式
DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyyMMdd"),
new SimpleDateFormat("yyyy年MM月dd日") };
/**
* 把String轉換爲指定的類型 【String To Date】
*
* @param context
* 當前上下文環境
* @param values
* jsp表單提交的字符串的值
* @param toClass
* 要轉換爲的目標類型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// 判斷: 內容不能爲空
if (values == null || values.length == 0) {
return null;
}
// 判斷類型必須爲Date
if (Date.class != toClass) {
return null;
}
// 迭代:轉換失敗繼續下一個格式的轉換; 轉換成功就直接返回
for (int i=0; i<df.length; i++) {
try {
return df[i].parse(values[0]);
} catch (ParseException e) {
continue;
}
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
return null;
}
}
局部
全局