<?xml version="1.0" encoding="ISO-8859-1"?>org.apache.struts.action.ActionServlet的设定中,设定config参数的作用是设定struts-config.xml的档案来源,struts-config.xml中包括了所有Struts的相关请求转发,以及一些资源设定。
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- 注意,xsi那行是沒換行的,排版關係才作了換行 -->
<!-- 如果您是直接拷貝這個設定,請自行接上該行 -->
<description>
Struts Web Application
</description>
<display-name>Struts Web Application</display-name>
<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/conf/struts-config.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="ISO-8859-1" ?>在struts-config.xml中,定义了<action-mappings>,这当中关系到请求与资源的转发设定对应,< action>中设定了path为/hello,这表示请求的资源若是/hello.do,则会呼叫HelloAction 来处理这个请求(type属性设定的),<forward>设定则是HelloAction处理完毕之后的转发对象,一个< action>中可以有多个 <forward>,在Action对象中将根据<forward>上的name来查找并返回对应的ActionForward 对象,ActionServlet会根据 Action 传回的ActionForward来将请求转发至指定的对象。
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<action-mappings>
<action
path="/hello"
type="onlyfun.caterpillar.HelloAction">
<forward
name="helloUser"
path="/WEB-INF/pages/hello.jsp"/>
</action>
</action-mappings>
</struts-config>
package onlyfun.caterpillar;这边先关心一些execute()中传入的request与response,而暂不理会另两个参数,request与 response是HttpServletRequest及HttpServletResponse的实例,就如何在一个简单的Servlet一样,您可 以使用这两个对象来分别取得请求与响应的相关资源。
import java.util.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class HelloAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// get information from request object
String username = request.getParameter("user");
// prepare model
Map model = new HashMap();
if(username != null)
model.put("username", username);
else
model.put("username", "nobody");
// pass information to View by using reqeust object
request.setAttribute("userInfo", model);
return mapping.findForward("helloUser");
}
}
<html>在这边先使用JSP 2.0所提供的Express Language新功能来取得设定于request中的Model对象之数据,Struts提供有一组可以与其配合的标签库(Tag Library),如果您的View层技术使用的是JSP资源,也可以善加利用。
<head>
<title>Hello, ${userInfo["username"]} !</title>
</head>
<body>
<H1>Hello, ${userInfo["username"]} !</H1>
</body>
</html>
http://localhost:8080/strutsapp/hello.do?user=Justin您将会得到以下的内容:
<html> <head> <title>Hello, Justin !</title> </head> <body> <H1>Hello, Justin !</H1></body> </html>