Struts2(1) jsp 与 java 代码数据的双向传递

Struts2框架

struts2是一个基于MVC设计模式的Web应用框架。他封装、简化了很多原生功能。

我常用它实现 jsp 与 java 代码的数据交换。一般使用servlet进行数据交换的,然而代码一多就不直观了,这时候推荐使用struts2或者其他框架,代替servlet中的get/post方法。

目录

简单案例(了解过程与配置)

Struts2的通用配置

实际例子(了解Jsp与Java代码的数据传递)

一、jsp传递数据给java

二、java传递数据给jsp

小结

一、jsp->java

二、java->jsp

小改进(选看)


 

简单案例(了解过程与配置)

使用struts2访问 hellojava.java,如果java文件返回信息"success"则跳转到hellojsp.jsp欢迎界面。

(1) 首先写hellojava.java:

为了方便代码的管理我将hellojava.java放到action包下(包名随意)。

位置:项目->Java Resources->src->action(新建包)->hellojava.java

public class hellojava {
	public String execute(){
		return "success";
	}
}

(2) 然后再写hellojsp.jsp:

位置:项目->WebContent->hellojsp.jsp

My first strusts is running success!

(3) 配置struts2信息。

Struts2的通用配置

任何一个使用到struts2框架的项目代码一定有以下配置:

1、导入核心包(本例中只导入最最基本的八个struts2的库文件)

位置:项目->WebContent->WEB-INF->lib

Struts2(1) jsp 与 java 代码数据的双向传递_第1张图片

 

2、web.xml的配置编写(一般这么写,特殊需求除外)

位置:项目->WebContent->WEB-INF->lib->web.xml



  Struts2Demo
  
   
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    

    
        struts2
        /*
    
  
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  

 

3、struts.xml的配置编写(即“结果视图类型”)

位置:项目->Java Resources->src->struts2.xml(注意文件位置~!和web.xml不同)




    
        
			/hellojsp.jsp
        
     

【解释】其中最主要修改的地方是标签内的内容。

如字面意思,该标签定义了一个action,这个action可以访问的class是“action.hellojava”(其中action是包),action的名字为helloword,这个用于我们访问java文件的入口。而访问方法method为execute()方法(默认的也是execute()),也可以设置为其他。

表示当返回值为success时,跳转到hellojsp.jsp页面。

(由于result默认为success,所以该句代码也等价于/hellojsp.jsp

【输入地址】:http://localhost:8080/自己的项目名/helloword

【运行结果】

 


实际例子(了解Jsp与Java代码的数据传递)

一、用户在登录界面login.jsp输入自己的信息,传递信息到LoginFormAction.java进行信息匹配。

二、如果信息匹配成功(即登陆成功,返回为success)则跳到 welcom.jsp 界面,并显示 “欢迎你!xx(用户名)”。

         失败(返回值为 input)则回 login.jsp 页面。

 

一、jsp传递数据给java

(1)首先根据题意,更改我们的struts.xml。

为了方便代码的管理我仍然将LoginFormAction.java放到action包下。

struts.xml




    
        
         
   			/welcom.jsp
   			/login.jsp
   		 
    	
     

其中名为login的action,是进行登录信息匹配的action.

(2)login.jsp

这里的重点是已经定义好了

表单提供的action的名字是login。

需要传递的值是username和password。


		username:
password:

(3)java代码的编写(其实这个java文件就是我们常说的action)

最核心的点在于:需要传递的变量值,必须在接收方——java中定义该变量的set\get方法。

LoginFormAction.java

位置:项目->Java Resources->src->action->LoginFormAction.java

public class LoginFormAction {
	private String username,password;

	public String execute(){
		if(username.equals("ac")&&password.equals("123")){
			return "success";
		}
		return "input";
	}


	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;
	}
}

【注】此信息匹配的代码可以替换成数据库操作的相关代码。在此为了简洁,略,仅设置一个用户(名ac,密码123)。

 

二、java传递数据给jsp

在这里使用EL表达式可以直接取值。

(4)welcom.jsp

Welcome ${username}!

 

【运行结果】运行login.jsp

Struts2(1) jsp 与 java 代码数据的双向传递_第2张图片


 

小结

一、jsp->java

(1)使用常规的servlet

(2)使用struts2等框架,重点是在接收方的java代码中,将要传递的变量设置好set\get方法。

二、java->jsp

 (1)EL表达式直接获取

 (2)使用session存值

例如在本例中,如果

/welcom.jsp

返回的方式改成了重定向,如下(两次请求。不写name=“success”也可以,因为不写,则默认有这个标签名和值)

/welcom.jsp

那么则LoginFromAction.java中能在信息匹配成功后添加如下代码,设置session:

ActionContext aContext = ActionContext.getContext();
Map session = 	aContext.getSession();
session.put("username", getUsername());

 

小改进(选看)

为了开发的“可维护性”,最好将用户对象抽出来,例如本例中,可以抽出一个实例对象User,其余代码略改。

User.java

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;
	}
}

LoginFormAction.java

public class LoginFormAction {
	private User user;
	public void setUser(User user){		 
		this.user = user;
	}
	public User getUser(){
		return this.user;
	}
	//登录方法
	public String execute(){
		public String execute(){
			if(user.getUsername().equals("ac")&&user.getPassword().equals("123")){
				return "success";
			}
			return "input";
		}
	}
}

login.jsp

username:
password:

welcom.jsp

	Welcome ${user.username}!

struct.xml

不用变

你可能感兴趣的:(Struts2(1) jsp 与 java 代码数据的双向传递)