1. 訪問Servlet API
1.1 使用ActionContext類獲取Servlet API對象對應的Map對象
ActionContext ac=ActionContext.getContext();
Map<String,Object> request=(Map<String,Object>)ac.get("request");
Map<String, Object> session=ac.getSession();
Map<String, Object> application=ac.getApplication();
session.put("key","value");
1.2 向Action注入Servlet API對象對應的Map對象
public class HelloAction implements RequestAware,SessionAware,ApplicationAware {
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
public void setRequest(Map<String, Object> request) {
this.request=request;
}
public void setSession(Map<String, Object> session) {
this.session=session;
}
public void setApplication(Map<String, Object> application) {
this.application=application;
}
1.3 向Action注入原生態Servlet API
public class HelloAction implements ServletRequestAware,ServletResponseAware {
private HttpServletRequest request;
private HttpServletResponse response;
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
1.4 使用ServletActionContext類訪問Servlet API
- 推薦使用,代碼少,方便,能獲取所有Servlet API,但是耦合的,必須導入相應的Servlet包,功能完全跟原生態的Servlet API一樣
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
2. 數據封裝
2.1 單個數據封裝
2.2 對象數據封裝
- 請求參數名稱必須以對象名稱爲前綴
- 在Action聲明對象時不用顯式new對象,struts會自動創建的
- 需要手動添加對象的getter和setter方法
<form action="/Struts02/addStudent" method="post">
<input type="hidden" name="hidden_value" value="aaa"/>
名字:<input type="text" name="student.name"/><br>
性別:<select name="student.sex">
<option value="1">男</option>
<option value="0">女</option>
</select><br>
<input type="submit" value="提交"/>
</form>
public class StudentAction extends ActionSupport{
private String hidden_value;
private Student student;
public String add(){
System.out.println(hidden_value);
System.out.println(student.getName());
System.out.println(student.getSex());
return SUCCESS;
}
public void setHidden_value(String hidden_value) {
this.hidden_value = hidden_value;
}
public String getHidden_value() {
return hidden_value;
}
public void setStudent(Student student) {
this.student = student;
}
public Student getStudent() {
return student;
}
}
2.3 使用模型驅動ModelDriven接口
- 請求參數名稱不需要前綴,只要跟對象字段屬性一致即可
- 在聲明對象時必須new一個新對象,不然會報空指針異常
- 一個Action只能實現一個ModelDriven接口,所以需要封裝多個數據對象時該方式不適用,要用2.2方式
<form action="/Struts02/addStudent" method="post">
名字:<input type="text" name="name"/><br>
性別:<select name="student.sex">
<option value="1">男</option>
<option value="0">女</option>
</select><br>
<input type="submit" value="提交"/>
</form>
public class StudentAction extends ActionSupport implements ModelDriven<Student>{
private Student student=new Student();
@Override
public Student getModel() {
return student;
}
public String add(){
System.out.println(student.getName());
System.out.println(student.getSex());
return SUCCESS;
}
2.4 封裝集合數據
<form action="/Struts02/addStudent2" method="post">
名字:<input type="text" name="studentList[0].name"/><br>
班級:<input type="text" name="studentList[0].grade.name"/><br>
名字:<input type="text" name="studentList[1].name"/><br>
班級:<input type="text" name="studentList[1].grade.name"/><br>
名字:<input type="text" name="studentList[2].name"/><br>
班級:<input type="text" name="studentList[2].grade.name"/><br>
<input type="submit" value="提交"/>
</form>
private List<Student> studentList;
public String add(){
for (Student student : studentList) {
System.out.println(student.getName()+","+student.getGrade().getName());
}
return SUCCESS;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}