之前只学过Struts2,学过的版本有2.0和2.1的,在几次面试中都有被问到Struts1的,对于这些回答唯有说还没学过,心里很是好奇,也来瞧瞧。
本文是新手文章,属学习笔记,还望指教!
笔者使用的是MyEclipse集成的struts1.2。
web.xml配置如下(配置说明已在注释中):
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- struts1.2配置 --> <!-- 配置ActionServlet --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!-- Struts应用程序的配置文件位置(相对路径),则默认值为/WEB-INF/struts-config.xml --> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <!-- 设置Servlet的debug级别,控制日志记录的详细程度。默认为0,记录相对最少的日志信息。 --> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <!-- 设置Digester的debug级别,Digester是Struts框架所使用的用来解析xml配置文件的一个框架,通过此设置,可以查看不同详细等级的解析日志。默认为0,记录相对最少的日志信息。 --> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <!-- ActionServlet在服务器开启时加载的优先级,数值越低,越先加载。 大多数 Servlet是在用户第一次请求的时候由应用服务器创建并初始化,但<load-on-startup>n</load-on-startup>可以用来改变这种状况,该元素说明某个 Servlet在应用程序启动的时候就立即装入 Servlet,并初始化它。 --> <load-on-startup>0</load-on-startup> </servlet> <!-- Struts所拦截的路径,即Struts要处理的请求路径。 --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Action 类代码(Hello World):
package bing.struts.action; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * struts1第一例hello world * @author bing * @version 2011-07-06 * */ public class HelloAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { try { String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); request.setAttribute("msg", "hello " + name); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return mapping.findForward("index"); } }
Struts1是从Servlet中扩展出来的,用起来与Servlet有些相似,捕获参数用的还是HttpServletRequest的getParameter方法,而且还要处理中文乱码问题。
struts-config.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <!-- 数据源元素,可以通过<set-property>设置driverClass、url、user、password等属性 --> <data-sources /> <!-- 子元素form-beans用来配置绑定到Action的各个FormBean的实例。每个FormBean实例用form-bans的子元素form-bean来定义。form-bean又分普通的FormBan和动态FormBean。 --> <form-beans /> <global-exceptions /> <!-- global-forwards用于配置全局转发,struts首先会在<action-mappings>元素中找对应的<forward>,若找不到,则到全局转发配置中找。它包含0个或多个<forward/>元素。 --> <global-forwards /> <!-- 该元素用于将Action元素定义到ActionServlet类中,它含有0到多个<action/>元素 --> <action-mappings > <action path="/hello" type="bing.struts.action.HelloAction"> <forward name="index" path="/index.jsp"></forward> </action> </action-mappings> <!-- 该元素用来定义资源文件。 --> <message-resources parameter="bing.struts.ApplicationResources" /> <!-- 该元素用于定义插件,可定义0到多个插件元素,最常见的plug-in为Struts的验证的插件 --> <!-- <plug-in className=""></plug-in> --> </struts-config>
struts-config标签中各元素的顺序是固定的,不可变换的。
笔者在网上找到了一篇struts1.2的配置文件struts-config.xml的详细教程,以上的注释说明来源于blogjava,原地址如下:
http://www.blogjava.net/amigoxie/archive/2008/01/03/172360.html
index.jsp:
... ${msg==null?'显示区域':msg } <form action="hello.do" method="post"> <input type="text" name="name" /> <input type="submit" value="say hello" /> </form> ...