struts2 获得前端数据:
獲取url 參數數據
<action name="findById" class="cn.itcast.crm.action.CustomerAction" method="findCustomerById"><result name="success">/info.jsp</result> <!-- 如果加絕對路徑"/"的話,是從webapp 路徑下的文件,如果不加"/" 表示的相對路徑 --> </action>http://localhost:8080/maven-first/findById.action?custId=11111?
?
方式二:表單數據
Struts2封裝獲取表單數據,模型驅動封裝(重點),表達式封裝(會用),封裝到list,map集合里面
registration.jsp
<form action="/struts2_example/registration" method="post">
user name:<input type="text" name="user.name" value="hnyd" />
birthday:<input type="text" name="user.birthday" />
<input type="submit" value="submit" />
</form>
User.java
public class User {
private String name;
private Date birthday;
public User() {
}
// 此處省略setter與getter方法
}
RegistrationServlet.java
?
?
public class RegistrationServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
<span style="color:#ff0000;">// 從request獲取參數
String name = req.getParameter("name");
String birthdayString = req.getParameter("birthday");
// 做必要的類型轉化
Date birthday = null;
try {
birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthdayString);
} catch (Exception e) {
e.printStackTrace();
}
// 初始化User類,并設置字段到user對象中去
User user = new User();
user.setName(name);
user.setBirthday(birthday);</span>
// 調用業務邏輯代碼完成注冊
UserService userService = new UserService();
userService.register(user);
<span style="color:#ff0000;">req.getRequestDispatcher("/success.jsp").forward(req, resp);</span>
}
}
除了上述代碼外,我們還需建立起JSP頁面中的form請求與Servlet類的響應之間的關系。這一關系是在web.xml中維護的,代碼如下:
?
web.xml
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class>com.example.web.RegistrationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Register</servlet-name>
<url-pattern>/struts2_example/registration</url-pattern>
</servlet-mapping>
?
上面是一個簡單的用Servlet處理的業務,由于Http協議與Java數據形式的不匹配性,RegistrationServlet在數據類型轉化和實例化對象上花費了大量的精力,我們編寫了額外的代碼,把頁面上傳來的日期值轉化為Java中的Date對象。在參數的數量和Java對象越來越來復雜的情況下,這種額外的代碼就會變成一種災難,甚至成為我們開發的主要瓶頸之一。
而Struts2通過攔截器幫助我們完美的完成了以上這些和核心業務無關的工作,所以struts 幫我們解決了對象的封裝性質
Struts2封裝獲取表單數據方式
使用最原始方式獲取表單封裝到實體類對象
</head> <body><form action="${pageContext.request.contextPath }/form4.action" method="post">username:<input type="text" name="username"/><br/>password:<input type="text" name="password"/><br/>address:<input type="text" name="address"/><br/><input type="submit" value="提交"/></form> </body> </html> public class Form4DemoAction extends ActionSupport {public String execute() throws Exception {//1 獲取表單數據HttpServletRequest request = ServletActionContext.getRequest();String username = request.getParameter("username");String password = request.getParameter("password");String address = request.getParameter("address");//2 封裝到實體類對象里面User user = new User();user.setUsername(username);user.setPassword(password);user.setAddress(address);System.out.println(user);return NONE;}屬性封裝(會用)
1 直接把表單提交屬性封裝到action的屬性里面
2 實現步驟
(1)在action成員變量位置定義變量
- 變量名稱和表單輸入項的name屬性值一樣
(2)生成變量的set方法(把set和get方法都寫出來)
3 使用屬性封裝獲取表單數據到屬性里面,不能把數據直接封裝到實體類對象里面
package cn.itcast.data;import com.opensymphony.xwork2.ActionSupport; /*** 使用屬性封裝獲取表單數據* @author asus**/ public class DataDemo1Action extends ActionSupport {//1 定義變量//變量的名稱和表單輸入項name屬性值一樣private String username;private String password;private String address;//2 生成變量的set和get方法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 getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String execute() throws Exception {System.out.println(username+":"+password+":"+address);return NONE;} }?
?
模型驅動封裝(重點)
<body><form action="${pageContext.request.contextPath }/data2.action" method="post">username:<input type="text" name="username"/><br/>password:<input type="text" name="password"/><br/>address:<input type="text" name="address"/><br/><input type="submit" value="提交"/></form> </body> </html> public class DataDemo2Action extends ActionSupport implements ModelDriven<User>{//創建對象//前提要求: 表單輸入項name屬性值 和 實體類屬性名稱一樣private User user = new User();public User getModel() {//返回創建user對象return user;}@Overridepublic String execute() throws Exception {System.out.println(user);return NONE;}?
(2)實現接口里面的方法 getModel方法
- 把創建對象返回
(3)在action里面創建實體類對象
3 使用模型驅動和屬性封裝注意問題:
(1)在一個action中,獲取表單數據可以屬性封裝,使用模型驅動封裝,
不能同時使用屬性封裝和模型驅動封裝獲取同一個表單數據
如果同時使用,之后執行模型驅動
?
表達式封裝(會用)
1 實現過程
(1)使用表達式封裝可以把表單數據封裝到實體類對象里面
第一步 在action里面聲明實體類
第二步 生成實體類變量的set和get方法
一定要有get set 方法
public class User {private String username;private String password;private String address;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 getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [username=" + username + ", password=" + password + ", address=" + address + "]";}} public class Book {private String bname;public String getBname() {return bname;}public void setBname(String bname) {this.bname = bname;}} /*** 使用表達式封裝數據到實體類對象* @author asus**/ public class DataDemo3Action extends ActionSupport {//1 聲明實體類private User user;private Book book;public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}//2 生成實體類變量的set和get方法public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String execute() throws Exception {System.out.println(user);System.out.println(book.getBname());return NONE;}第三步 在表單輸入項的name屬性值里面寫表達式形式
<body><form action="${pageContext.request.contextPath }/data3.action" method="post">username:<input type="text" name="user.username"/><br/>password:<input type="text" name="user.password"/><br/>address:<input type="text" name="user.address"/><br/>bname: <input type="text" name="book.bname"/><br/><input type="submit" value="提交"/></form> </body> </html>2 把表達式封裝歸類到屬性封裝里面
比較表達式封裝和模型驅動封裝
1 使用表達式封裝和模型驅動封裝都可以把數據封裝到實體類對象里面
2 不同點:
(1)使用模型驅動只能把數據封裝到一個實體類對象里面
- 在一個action里面不能使用模型驅動把數據封裝到不同的實體類對象里面
(2)使用表達式封裝可以把數據封裝到不同的實體類對象里面
封裝到集合里面
封裝數據到List集合
第一步 在action聲明List
第二步 生成list變量的set和get方法
/*** 封裝數據到list集合* @author asus**/ public class ListAction extends ActionSupport {// 1 聲明List變量private List<User> list;// 2 生成get和set方法public List<User> getList() {return list;}public void setList(List<User> list) {this.list = list;}@Overridepublic String execute() throws Exception {System.out.println(list);return NONE;}第三步 在表單輸入項里面寫表達式
</head> <body><form action="${pageContext.request.contextPath }/list.action" method="post"><!-- list[0] : 表示list集合中第一個user對象 -->username:<input type="text" name="list[0].username"/><br/>password:<input type="text" name="list[0].password"/><br/>address:<input type="text" name="list[0].address"/><br/><br/>username:<input type="text" name="list[1].username"/><br/>password:<input type="text" name="list[1].password"/><br/>address:<input type="text" name="list[1].address"/><br/><input type="submit" value="提交"/></form> </body> </html>封裝數據到Map集合
第一步 聲明map集合
第二步 生成get和set方法
第三步 在表單輸入項的name屬性值里面寫表達式
<body><form action="${pageContext.request.contextPath }/map.action" method="post"><!-- 設置key值 map['key值']設置value值-->username:<input type="text" name="map['one'].username"/><br/>password:<input type="text" name="map['one'].password"/><br/>address:<input type="text" name="map['one'].address"/><br/><br/>username:<input type="text" name="map['abcd'].username"/><br/>password:<input type="text" name="map['abcd'].password"/><br/>address:<input type="text" name="map['abcd'].address"/><br/><input type="submit" value="提交"/></form> </body> </html>?
?
總結
以上是生活随笔為你收集整理的struts2 获得前端数据:的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html下播放.wav,wav格式文件用
- 下一篇: html设计学校网站,基于HTML5的学