Struts2二之知识点总结

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的配置方式,用一个截图来说明吧

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/84137638
今日推荐