struts2学习(2)struts2核心知识
一、Struts2 get/set 自动获取/设置数据
根据上一章。中的源码继续。
HelloWorldAction.java中private String name,自动获取/设置name:
package com.cy.action; import com.opensymphony.xwork2.Action; public class HelloWorldAction implements Action{ private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String execute() throws Exception {
System.out.println("执行了Action的默认方法");
return SUCCESS;
} }
helloWorld.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${name }你好!!
</body>
</html>
1)使用get方式:
浏览器中访问:http://localhost:8080/Struts2Chap01/hello?name=asdasd
结果:
2)post方式:
编写index.jsp页面:
<body>
<form action="hello" method="post">
name: <input type="text" name="name"/>
<input type="submit" value="submit" />
</form>
</body>
浏览器中访问:http://localhost:8080/Struts2Chap01/index.jsp,输入name:
点击submit:
二、ActionSupport 类引入
HelloWorldAction2.java中继承ActionSupport:
package com.cy.action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction2 extends ActionSupport{ /**
*
*/
private static final long serialVersionUID = 1L; private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String execute() throws Exception {
System.out.println("执行了HelloWorldAction2 Action的默认方法");
return SUCCESS;
} }
struts.xml中修改为com.cy.action.HelloWorldAction2:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 可以创建很多的package,用name来区分 -->
<package name="helloWorld" extends="struts-default">
<action name="hello" class="com.cy.action.HelloWorldAction2">
<!-- 默认是转发,转发到helloWorld.jsp -->
<result name="success">helloWorld.jsp</result>
</action>
</package> </struts>
测试结果ok;

package com.cy.action; import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private static final long serialVersionUID = 1L;
private UserService userService = new UserService();
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() throws Exception {
System.out.println("执行了UserAction Action的默认方法");
User user = new User();
user.setUserName(userName);
user.setPassword(password);
if(userService.login(user)){
return SUCCESS;
}else{
return ERROR;
} } }
com.cy.model.User:
package com.cy.model; public class User {
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;
}
}
com.cy.service.UserService:
package com.cy.service; import com.cy.model.User; public class UserService { public boolean login(User user){
if("cy".equals(user.getUserName()) && "123456".equals(user.getPassword())){
return true;
}else{
return false;
}
}
}
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 可以创建很多的package,用name来区分 -->
<package name="helloWorld" extends="struts-default">
<action name="hello" class="com.cy.action.HelloWorldAction2">
<!-- 默认是转发,转发到helloWorld.jsp -->
<result name="success">helloWorld.jsp</result>
</action> <action name="user" class="com.cy.action.UserAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
</package> </struts>
login.jsp登录界面:
<body>
<form action="user" method="post">
用户名: <input type="text" name="userName"/><br>
密码: <input type="password" name="password"/><br>
<input type="submit" value="登录" />
</form>
</body>
success.jsp登录成功的页面:
<body>
登录成功!
</body>
error.jsp登录失败的界面:
<body>
登录失败!
</body>
测试:
浏览器访问http://localhost:8080/Struts2Chap01/login.jsp,输入cy,123456
登录成功:
B:javaBean类型属性驱动:
将上面的UserAction中改为private User user;javaBean的方式:
package com.cy.action; import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private static final long serialVersionUID = 1L;
private UserService userService = new UserService();
private User user; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String execute() throws Exception {
System.out.println("执行了UserAction Action的默认方法 采用javaBean");
if(userService.login(user)){
return SUCCESS;
}else{
return ERROR;
} } }
login.jsp登录界面需要修改为如下:
<body>
<form action="user" method="post">
用户名: <input type="text" name="user.userName"/><br>
密码: <input type="password" name="user.password"/><br>
<input type="submit" value="登录" />
</form>
</body>
测试结果ok
第二种:模型驱动:
UserAction.java: //主要实现ModelDriven<User>, private User user = new User(),这里要new一个user:
package com.cy.action; import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User>{ private static final long serialVersionUID = 1L;
private UserService userService = new UserService();
private User user = new User(); public String execute() throws Exception {
System.out.println("执行了UserAction Action的默认方法 采用模型驱动");
if(userService.login(user)){
return SUCCESS;
}else{
return ERROR;
}
} public User getModel() {
return user;
} }
login.jsp:
<body>
<form action="user" method="post">
用户名: <input type="text" name="userName"/><br>
密码: <input type="password" name="password"/><br>
<input type="submit" value="登录" />
</form>
</body>
四、Struts2处理传入多个值
1、需求:选择多个复选框,将复选框选中的值传入到后台;
2、需求:前端批量添加多个Student到后台,后台接受
HobbyAction.java:
package com.cy.action; import com.opensymphony.xwork2.Action; public class HobbyAction implements Action{ private String[] hobby; public String[] getHobby() {
return hobby;
} public void setHobby(String[] hobby) {
this.hobby = hobby;
} public String execute() throws Exception {
System.out.println("执行了HobbyAction的默认方法");
for(String h : hobby){
System.out.println(h);
}
return SUCCESS;
} }
StudentAction.java:
package com.cy.action; import java.util.List; import com.cy.model.Student;
import com.opensymphony.xwork2.Action; public class StudentAction implements Action{ private List<Student> students; public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
} public String execute() throws Exception {
System.out.println("执行了StudentAction的默认方法");
for(Student s : students){
System.out.println(s);
}
return SUCCESS;
} }
com.cy.model.Student.java:
package com.cy.model; public class Student { private String name;
private String sex;
private int age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
} }
struts.xml配置:
<struts> <package name="helloWorld" extends="struts-default">
<action name="hobby" class="com.cy.action.HobbyAction">
<result name="success">success.jsp</result>
</action> <action name="student" class="com.cy.action.StudentAction">
<result name="success">success.jsp</result>
</action>
</package> </struts>
hobby.jsp:
<body>
<form action="hobby" method="post">
爱好:
<input type="checkbox" name="hobby" value="唱歌"/>唱歌
<input type="checkbox" name="hobby" value="跳舞"/>跳舞
<input type="checkbox" name="hobby" value="睡觉"/>睡觉
<input type="checkbox" name="hobby" value="玩CF"/>玩CF
<input type="submit" value="提交"/>
</form>
</body>
addstudents.jsp:
<body>
<form action="student" method="post">
<table>
<tr>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
</tr>
<tr>
<!-- 这边students[0].name命名有规范的,不然action中取不到 -->
<td><input type="text" name="students[0].name"/></td>
<td><input type="text" name="students[0].sex"/></td>
<td><input type="text" name="students[0].age"/></td>
</tr>
<tr>
<td><input type="text" name="students[1].name"/></td>
<td><input type="text" name="students[1].sex"/></td>
<td><input type="text" name="students[1].age"/></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
success.jsp:
<body>
OK!
</body>
测试结果:
1)
2)
五、struts.xml的配置:
<struts> <package name="foreground" namespace="/fore" extends="struts-default">
<action name="studentList" class="com.cy.action.ForeStudent">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package> <package name="background" namespace="/back" extends="struts-default">
<action name="studentList" class="com.cy.action.BackStudent" method="show">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package> <!-- 抽象包,让别人继承,比如过滤敏感词汇啊啥的 -->
<package name="infoFilter" abstract="true"></package> </struts>
com.cy.action.ForeStudent.java:
package com.cy.action; import com.opensymphony.xwork2.ActionSupport; public class ForeStudent extends ActionSupport {
public String execute() throws Exception {
System.out.println("执行了ForeStudent Action的默认方法");
return SUCCESS;
} }
com.cy.action.BackStudent.java:
package com.cy.action; import com.opensymphony.xwork2.ActionSupport; public class BackStudent extends ActionSupport{
public String execute() throws Exception {
System.out.println("执行了BackStudent Action的默认方法");
return SUCCESS;
} public String show() throws Exception{
System.out.println("执行了BackStudent show方法");
return SUCCESS;
}
}
测试结果:
1)/fore/studentList
2)/back/studentList:
console打印:
执行了BackStudent show方法
struts2学习(2)struts2核心知识的更多相关文章
- Struts2学习笔记——Struts2与Spring整合
Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...
- Struts2学习一----------Struts2的工作原理及HelloWorld简单实现
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2工作原理 一个请求在Struts2框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2.这个请求 ...
- struts2学习(4)struts2核心知识III
一.result配置: result - name 就是前面返回的值,success,error等. type: dispatcher. 默认是这个,底层是jsp的forward: redirect: ...
- struts2学习(3)struts2核心知识II
一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...
- struts2学习(1)struts2 helloWorld
一.struts2简介: 二.helloWorld: 1)工程结构: HelloWorldAction.java: package com.cy.action; import com.opensymp ...
- Struts2学习笔记——Struts2搭建和第一个小程序
1.新建web项目 2.配置Struts2核心过滤器 (1)打开web.xml文件,做以下配置: <?xml version="1.0" encoding="UTF ...
- Struts2学习笔记--Struts2的体系结构
1. Struts2体系结构 Struts是以前端控制器框架为主体的框架,用户的请求会通过控制器选择不同的Action类来执行具体的操作,在Action类中所有的Servlet对象(request.r ...
- struts2学习(15)struts2防重复提交
一.重复提交的例子: 模拟一种情况,存在延时啊,系统比较繁忙啊啥的. 模拟延迟5s钟,用户点了一次提交,又点了一次提交,例子中模拟这种情况: 这样会造成重复提交: com.cy.action.St ...
- struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载
四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; i ...
随机推荐
- awk根据指定的字符串分割字符串
以从字符串"hello-kitty-red-for-you"中获取-for前面的内容为例: echo "hello-kitty-red-for-you" |aw ...
- HYSBZ 1036 树的统计Count(树链剖分)题解
思路: 树链剖分,不知道说什么...我连模板都不会用 代码: #include<map> #include<ctime> #include<cmath> #incl ...
- pod状态为Back-off
查看pod状态为CrashLoopBackOff [root@master yaml]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-7 ...
- BZOJ 1853: [Scoi2010]幸运数字(容斥原理)
http://www.lydsy.com/JudgeOnline/problem.php?id=1853 题意: 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运 ...
- HDU 1712 ACboy needs your help(分组背包入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意: 有个人学习n门课程,a[i][j]表示用j分钟学习第i门课程所能获得的价值,背包容量为一共有m时间 ...
- HDU 3488 Tour(最小费用流:有向环最小权值覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意: 给出n个点和m条边,每条边有距离,把这n个点分成1个或多个环,且每个点只能在一个环中,保证有解. ...
- 雷林鹏分享:Ruby CGI Cookies
Ruby CGI Cookies HTTP协议是无状态协议.但对于一个商业网站,它需要保持不同的页面间的会话信息. 如用户在网站注册过程中需要跳转页面,但又要保证之前填写的信息部丢失. 这种情况下 C ...
- hdu3032sg打表找规律
先打个表冷静一下 #include<map> #include<set> #include<cmath> #include<queue> #includ ...
- 个人知识管理系统Version1.0开发记录(08)
切入点 前面,我们已经搭建好了web端的一种基本结构,需要进一步定位的主要问题有三点: 1.界面的选择和确定,用extjs做的初步样式,进一步改动为jqueryUI/html,再进一步改变为HTML5 ...
- windows下编译Hugin时的template错误
Hugin依赖于VIGRA,而VIGRA包含大量的模板,编译Hugin是出现如下的大量错误: "unexpected token(s) preceding ':'; skipping app ...