一些总结
使用struts2的项目中各个部分的作用
1.WebContent/*.jsp:显示前端的页面,用于和用户的交互
2.WebContent/WEB-INF/web.xml:设置过滤器
3.WebContent/WEB-INF/lib/*.jar:项目运行过程中依赖的库文件
4.src/[package]/*.java:用于定义各种action,实现对前端用户发出的请求进行处理
5.src/struts.xml:该文件将前端页面和后台的动作联系到了一起
struct.xml的编写
下面是一个动作的例子
<struts>
<package name="searchBookName" extends="struts-default">
<action name="search" class="com.dongchang.action.SearchBook" method="execute">
<result name="SUCCESS">/findbooks.jsp</result>
<result name="FALSE">/false.jsp</result>
</action>
</package>
</struts>
package 为一个包,我们需要关注的是中间action的部分。对于上面的例子,是一个返回用户主页的例子,action的名字是name,这个名字是在jsp等前端页面调用的标识。class属性的值,是src中你的.java文件的包名加文件名。而method属性的值则是在.java文件中你将要调用到的方法,如果method属性为空则默认execute方法。下面result标签则是根据.java文件中调用的方法的返回值确定这个action下一步跳转的页面:当返回的字符串为”SECUSS“那么就会跳转到findbook.jsp这个页面,当然也可以添加其他情况。
这样,前端和后台之间就联系起来了。
前端和后台的数据交互
1.jsp(html)中的表单,如:
<form action="search" method="get">
<input name="name" type="text" placeholder="这里输入姓名以查询书籍信息" size="22"
required />
<input type="submit" value="开始查询" />
</form>
这是一个简单的提交姓名的表单,注意这个input标签的变量名为name,当点击开始查询后会调用search这个action,根据struts.xml文件,将会调用下面这个java文件中的execute方法。
public class SearchBook {
private String name;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public String execute() { return "SUCCESS"; }
}
同时因为form中提交的变量名为name,因此struts2会自动调用java中的setName方法将私有变量name赋值为jsp中接收到的数值。
因为返回值为”SUCCESS“因此会跳转到findbook.jsp界面。假设这个页面有一个table需要上一个jsp中获得的name,此时struts2会自动挑勇getName方法实现变量的传递。
2.在链接中传递数据
在struts2中可以利用链接调用一个方法,如
<a href=action_name>链接名</a>
调用方法的同时传递数据
<a href=action_name?data1=value1&data2=value2>链接名</a>
此时同样会调用get和set方法实现数据的交换,需要注意的是此时特殊字符如空格+号等不能被传递,可以使用URLEncoder方法首先对数据编码然后URLDecoder解码。
3.后台向前台传入数
(1) 利用getAttribute()在jsp页面获得,会调用getter方法
(2)使用session
后台传入,传入session,相当于python的字典,key和value,value可以是任意类型:
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
String[] list;
...
ServletRequest request = ServletActionContext.getRequest();
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
session.setAttribute("booklist", list);
jsp接收:
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String list = (String[]) session.getAttribute("booklist");
if (list.size() > 0) {
youraction;
} else {
error;
}
%>