Struts1

来源:互联网 发布:马布里nba数据 编辑:程序博客网 时间:2024/05/22 06:49

1.      引入struts相关jar包。Struts相关jar包拷贝到WEB-INF/lib文件夹下。

2.      配置Servlet。既然ActionServlet是Servlet,那么要使用这个Servlet同样需要将该Servlet配置到web.xml文件中(具体配置信息见下面实例)。

3.      配置struts-config.xml文件。当Tomcat(本例中以Tomcat服务器为例),启动的时候实例化ActionServlet对象,在这个过程中便将struts-config.xml文件中的内容加载到内存中。

Web.xml文件中的配置信息如下:

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <display-name></display-name>   
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.     
  12.   <servlet>  
  13.     <servlet-name>action</servlet-name>  
  14.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  15.     <init-param>  
  16.       <param-name>config</param-name>  
  17.       <param-value>/WEB-INF/struts-config.xml</param-value>  
  18.     </init-param>  
  19.     <load-on-startup>2</load-on-startup>  
  20.   </servlet>  
  21.   
  22.   
  23.   <!-- Standard Action Servlet Mapping -->  
  24.   <servlet-mapping>  
  25.     <servlet-name>action</servlet-name>  
  26.     <url-pattern>*.do</url-pattern>  
  27.   </servlet-mapping>   
  28. </web-app>  

该配置信息中<servlet-name>和<servlet-class>与之前使用的servlet开发中web.xml文件的含义是一样的都是配置servlet的路径。在<init-param>标签中所配置的内容为当该Servlet实例化的时候所加载的配置文件的路径。<servlet-mapping>所配置的内容可以解释为凡是以.do结尾的请求都会被提交给ActionServlet进行处理。

Struts-config.xml中的配置信息:

[html] view plaincopy
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  6.   
  7. <struts-config>  
  8.     <form-beans>  
  9.         <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>  
  10.     </form-beans>  
  11.       
  12.     <action-mappings>  
  13.         <action path="/login"  
  14.             type="com.bjpowernode.struts.LoginAction"  
  15.             name="loginForm"  
  16.                 scope="request"  
  17.             >  
  18.             <forward name="success" path="/login_success.jsp"/>  
  19.             <forward name="error" path="/login_error.jsp"/>  
  20.         </action>  
  21.     </action-mappings>  
  22. </struts-config>  
<form-beans>配置的是装载表单数据的java类的路径。<action-mapping>标签中所path属性值为请求路径 ,type表示真正的请求对象,也就是上文中提到的RealAction。name 为装载表单数据的AcitonForm类,对应于相应的<form-beans>。<forward>标签对应便是各种条件下的跳转页面了。

转载页面表单信息的LoginActionForm(即上文中提到的ActionForm):

[java] view plaincopy
  1. package com.bjpowernode.struts;  
  2.   
  3. import org.apache.struts.action.ActionForm;  
  4.   
  5. @SuppressWarnings("serial")  
  6. public class LoginActionForm extends ActionForm {  
  7.       
  8.     private String username;  
  9.       
  10.     private String password;  
  11.   
  12.     public String getUsername() {  
  13.         return username;  
  14.     }  
  15.   
  16.     public void setUsername(String username) {  
  17.         this.username = username;  
  18.     }  
  19.   
  20.     public String getPassword() {  
  21.         return password;  
  22.     }  
  23.   
  24.     public void setPassword(String password) {  
  25.         this.password = password;  
  26.     }  
  27. }  

接下来是最能体现Struts统一控制的LoginAction(即上文中提到的RealAction)中的代码,该java类具有一个execute函数,所有的业务逻辑操作以及操作的返回结果及决定跳转界面的操作均在该函数中进行:

[java] view plaincopy
  1. package com.bjpowernode.struts;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts.action.Action;  
  7. import org.apache.struts.action.ActionForm;  
  8. import org.apache.struts.action.ActionForward;  
  9. import org.apache.struts.action.ActionMapping;  
  10.   
  11. public class LoginAction extends Action {  
  12.   
  13.     @Override  
  14.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  15.             HttpServletRequest request, HttpServletResponse response)  
  16.             throws Exception {  
  17.       
  18.         LoginActionForm laf = (LoginActionForm)form;  
  19.         String username = laf.getUsername();  
  20.         String password = laf.getPassword();  
  21.         if("admin".equals(username) && "admin".equals(password)){  
  22.             //登录成功  
  23.             return mapping.findForward("success");  
  24.         }else{  
  25.             //登录失败  
  26.             return mapping.findForward("error");  
  27.         }         
  28.     }     
  29. }  

最后是客户端代码:

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=GB18030"  
  2.     pageEncoding="GB18030"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <form action="login.do" method="post">  
  11.         用户:<input type="text" name="username"><br>  
  12.         密码:<input tyep="password" name="password"><br>  
  13.         <input type="submit" value="登录">  
  14.           
  15.     </form>  
  16. </body>  
  17. </html>  

在客户端中我们指定的action是“login.do”,以“.do”结尾的页面就是我们在web.xml文件中规定的哪些请求会被提交到ActionServlet上。在上文中空谈了很多Struts的执行机制大家可能还不能很好的理解,下面以这个登录例子为例我们来具体解释下Struts到底是怎样一个执行流程。

1. 当Tomcat启动的时候根据配置文件中的<loadon-on-startup>标签中的值,ActionServlet伴随着Tomcat的启动而被实例化。

2. ActionServlet被实例化后会加载struts-config.xml文件,将该文件中的配置信息以键值对的形式读到内存中。

3. 当login页面被提交的时候由于该页面的action结尾是以.do结束的(也就说它符合在web.xml文件中规定的受struts规范的条件,该条件简单的来说就是只要请求是以.do结尾的就都受struts约束),该请求会被提交到ActionServlet。

4. 请求被提交到ActionServlet后,ActionServlet会首先对该URL进行截取(将.do去掉),然后根据截取后的path在已经加载到内存中的struts-config.xml找到对应的path,同时实例化配置文件中配置好的具体的ActionForm对象和RealAction对象,同时将表单信息赋给ActionForm对象。

5.根据配置文件中的type属性找到真正的请求类LoginAction后,由该类完成业务逻辑的各种操作,最后返回ActionForward对象给ActionServlet,最后ActionServlet根据返回情况从struts-config.xml文件中找到对应的跳转页面实现页面导航的统一控制。

0 0
原创粉丝点击