1.创建Action的3种方式
1)普通java类
public class FirstAction {
private String userName;
private String userPass;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public String test(){
System.out.println("userName:"+userName);
System.out.println("userPass:"+userPass);
return "success";
}
}
2)实现Action接口
public class SecondAction implements Action {
public String execute() throws Exception {
return null;
}
}
3)继承ActionSupport类:
public class ThirdAction extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("--------Thirdexecute-------");
return "success";
}
}
三种方式都需要在struts2配置文件种配置Action
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 配置常量 -->
<constant name="struts.devMode" value="true"></constant>
<package name="abc" extends="struts-default">
<action name="first" class="com.softeem.actions.FirstAction"
method="test">
<result name="success">/index.jsp</result>
</action>
<action name="second" class="com.softeem.actions.SecondAction">
<result name="success">/index.jsp</result>
</action>
<action name="third" class="com.softeem.actions.ThirdAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
2.url映射的几种方式
1)类+方法名
一个action的一个方法在配置文件中对应一个配置项
<action name="first_test" class="com.softeem.actions.FirstAction" method="test">
<result name="success">/index.jsp</result>
</action>
前端的调用:
<form action="first_test.action" method="post">
2)DMI方式
一个action在配置文件中配置一次,方法不需要配置。
<action name="second" class="com.softeem.actions.SecondAction">
<result name="success">/index.jsp</result>
</action>
前端通过:类别名!方法名的方式访问:
<form action="second!test.action" method="post">
3)通配符方式
多个action在配置文件中对应一个配置项:
<action name="*_*" class="com.softeem.actions.{1}Action" method="{2}">
<result name="success">/index.jsp</result>
</action>
前端通过拼接类名+方法名的方式访问,比如访问FirstAction的test方法:
<form action="First_test.action" method="post">
3.前端向后端传值的两种方式。
前端:
<form action="userlogin!check.action" method="post">
账号:<input type="text" name="user.userName"><br>
密码:<input type="text" name="user.userPass"><br>
<input type="text" name="userType"><br>
<input type="button" value="注册" onclick="javascript:window.location.href='regist.jsp'" />
<input type="submit" value="登录">
</form>
1)通过类中的全局变量,比如下面就是通过userName和userPass两个成员变量传值,对象类型的成员变量也是相同方式,这种方式需要加入set和get方法。
public class FirstAction {
private String userName;
private String userPass;
public String test(){
System.out.println("userName:"+userName);
System.out.println("userPass:"+userPass);
return "success";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
}
2)通过实现ModelDriven接口,这种方式不需要加入set和get方法,但是要重写getModel方法。
public class ThirdAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public String execute() throws Exception {
System.out.println("--------Thirdexecute-------");
return "success";
}
@Override
public User getModel() {
return user;
}
}
3)也可以通过web元素来传值,前端有一个userType文本框。
public class LoginAction extends ActionSupport{
private User user;
@Override
public String execute() throws Exception {
return "success";
}
public String check(){
HttpServletRequest request = ServletActionContext.getRequest();
String userType = request.getParameter("userType");
System.out.println("userType="+userType);
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
4.后端向前端页面传值的两种方式
1)通过全局变量(存放在值栈之中)
后端:
public class LoginAction{
private User user;
private String state;
List<User> users;
public String check(){
System.out.println("userName:"+user.getUserName());
System.out.println("userPass:"+user.getUserPass());
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
前端取值:
${user.userName}
2)通过web元素(存放在上下文之中)
后端存值:
public class LoginAction{
// private User user;
// private String state;
// List<User> users;
public String check(){
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("para","近乡情更怯");
return "success";
}
}
前端取值:
${para}
5.result的配置方式,用一个截图来说明吧