struts开发

来源:互联网 发布:西班牙语教材 知乎 编辑:程序博客网 时间:2024/04/30 19:56

今天把struts1.3.8(建议下载struts-1.3.8-all)下载了下来,调试了网上很常见的一个登陆程序,感觉和昨天看的jsp2.0有很多相似之处。
这是我关于这个例子的流程或结构图:

struts-config.xml控制着整个流程的流转
AdminLoginForm负责数据的保存和传递
AdminLoginAction负责业务逻辑的处理

现在把测试的过程列出来:
1、程序运行环境:
Tomcat5.5.25
Oracle10g
struts1.3.8
2、数据准备:
建立数据库:testperson,用于存储登陆用到的用户名、密码

  1. create table testperson(
  2. name char(20),
  3. password char(20)
  4. );
  5. insert into testperson values('admin','admin')

3、在Tomcat中新建一个虚拟目录:
在%TOMCAT_HOME%\conf\Catalina\localhost目录下新建一个文件:strutstest.xml
文件内容:

  1. <context path="/strutstest" docBase="d:/jsp/struts138" reloadable="true" crossContext="true" debug="0"></context>

这样就创建了一个虚拟目录
path为浏览器中的访问路径,应该与文件名保持一致
docBase为你的文件存放的位置
4、添加所需要的.jar包:
在d:/jsp/struts138目录下创建如下目录结构:
–WEB-INF
  |
  |—lib
  |—classes
将下载到的struts中lib目录下的全部文件拷贝到此lib目录下
将下载到的struts中src\taglib\src\main\resources\META-INF\tld目录下的全部.tld文件拷贝到WEB-INF目录下
5、创建配置文件:
(1)web.xml
这是一个基本的配置,文件保存位置:WEB-INF\
关于每个配置节都起什么作用,网上可以找到详细说明,此处不再详述。

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.   <!DOCTYPE web-app PUBLIC
  3.     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  4.     "http://java.sun.com/dtd/web-app_2_3.dtd">
  5.  
  6. <web-app>
  7.   <display-name>Struts Blank Application</display-name>
  8.  
  9.   <servlet>
  10.     <servlet-name>action</servlet-name>
  11.     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  12.     <init-param>
  13.       <param-name>config</param-name>
  14.       <param-value>/WEB-INF/struts-config.xml</param-value>
  15.     </init-param>
  16.     <load-on-startup>2</load-on-startup>
  17.  </servlet>
  18.  
  19.   <servlet-mapping>
  20.     <servlet-name>action</servlet-name>
  21.     <url-pattern>*.do</url-pattern>
  22.   </servlet-mapping>
  23.  
  24.   <welcome-file-list>
  25.     <welcome-file>index.jsp</welcome-file>
  26.   </welcome-file-list>
  27.  
  28.   <taglib>
  29.     <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
  30.     <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  31.   </taglib>
  32.  
  33. </web-app>

(2)struts-config.xml
这是一个struts的配置,文件保存位置:WEB-INF\
关于每个配置节都起什么作用,网上可以找到详细说明,此处不再详述。

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <struts-config>
  3.  
  4. <form-beans> 
  5. <form-bean name="adminLoginForm" type="AdminLoginForm" /> 
  6. </form-beans> 
  7.  
  8. <global-forwards> 
  9. <forward name="ToUserList" path="/userlist.jsp" /> 
  10. <forward name="ToErrorPage" path="/error.jsp" /> 
  11. </global-forwards> 
  12.  
  13. <action-mappings> 
  14. <action path="/adminlogin" type="AdminLoginAction" name="adminLoginForm" scope="request" />
  15. </action-mappings>
  16.  
  17. <message-resources parameter="ApplicationResources" />
  18.  
  19. </struts-config>

6、创建jsp文件:
(1)adminlogin.jsp
登陆窗体,其中用到了tag标签,我们在web.xml中作了配置,同时在这里引用

  1. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

同时文件中form的action指向我们在struts-config中作了配置

  1. <%@ page contentType="text/html;charset=GBK" language="java"%>
  2. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
  3. <html> 
  4. <head>
  5. <title>JSP for loginForm form</title>
  6. </head>
  7. <body>
  8. <html:form action="adminlogin.do" >
  9.   <table> 
  10.     <tr> 
  11.       <td > 用户名 </td> 
  12.       <td > <html:text property="username" /> </td> 
  13.     </tr> 
  14.     <tr> 
  15.       <td > 密码</td> 
  16.       <td > <html:password property="password" />  </td> 
  17.     </tr> 
  18.     <tr> 
  19.       <td ><html:submit property="submit">登录</html:submit></td> 
  20.       <td ><html:reset>  重置</html:reset> </td> 
  21.     </tr> 
  22.   </table> 
  23. </html:form>
  24. </body>
  25. </html>

(2)error.jsp

  1. <%@ page contentType="text/html;charset=GBK" language="java"%>
  2. <html>
  3. <head><title>登陆失败</title></head>
  4. <body>
  5. 登陆失败
  6. <html:errors />
  7. </body>
  8. </html>

(3)userlist.jsp

  1. <%@ page contentType="text/html;charset=GBK" language="java"%>
  2. <html>
  3. <head><title>登陆成功</title></head>
  4. <body>登陆成功</body>
  5. </html>

7、Java类
(1)AdminLoginForm.java
用于数据的保存和传递

  1. import org.apache.struts.action.ActionForm;
  2.  
  3. public class AdminLoginForm extends ActionForm {
  4.     /**
  5.      *
  6.      */
  7.     private static final long serialVersionUID = 8189906596424257682L;
  8.  
  9.     private String username = null;
  10.  
  11.     private String password = null;
  12.  
  13.     public AdminLoginForm() {
  14.     }
  15.  
  16.     public void setUsername(String username) {
  17.         this.username = username;
  18.     }
  19.  
  20.     public String getUsername() {
  21.         return username;
  22.     }
  23.  
  24.     public void setPassword(String password) {
  25.         this.password = password;
  26.     }
  27.  
  28.     public String getPassword() {
  29.         return password;
  30.     }
  31. }

(2)AdminLoginAction.java
用于登陆验证

  1. import java.sql.Connection;
  2. import java.sql.ResultSet;
  3. import java.sql.Statement;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.apache.struts.action.Action;
  8. import org.apache.struts.action.ActionForm;
  9. import org.apache.struts.action.ActionForward;
  10. import org.apache.struts.action.ActionMapping;
  11. import org.apache.struts.action.ActionMessage;
  12. import org.apache.struts.action.ActionMessages;
  13.  
  14. public final class AdminLoginAction extends Action { 
  15.     public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception { 
  16. //获取来自AdminLoginForm对象的数据。
  17.        AdminLoginForm adminLoginForm = (AdminLoginForm) form;
  18.        String username = adminLoginForm.getUsername();
  19.        String password = adminLoginForm.getPassword();
  20.        ActionMessages errors = new ActionMessages();
  21.       
  22.        String PageForward = "ToErrorPage";
  23. //只有用户名与密码相匹配,而且用户身份为管理员时才能进入系统
  24. //设置转发页面,struts-config. xml中<forward path="/"项目路径/userlist.jsp" />定义。
  25.      
  26.     Connection conn = DataBaseConn.getConn();
  27.     // Create a Statement
  28.     Statement stmt = conn.createStatement ();
  29.  
  30.     ResultSet rset = stmt.executeQuery ("select * from testperson where name='"+username+"' and password = '"+password+"'");
  31.       if(rset.next()){
  32.          PageForward = "ToUserList";
  33.        } else { 
  34.              errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "error.admin.accessDeny")); //error.admin.accessDeny定义在ApplicationResource.properties
  35.              if (!errors.isEmpty()){ 
  36.                 saveErrors(request, errors);
  37.               }
  38.        } 
  39.          conn.close();
  40.          return mapping.findForward(PageForward);
  41.        } 
  42. }

(3)DataBaseConn.java
返回一个数据连接对象

  1. import java.sql.*;
  2.  
  3. public class DataBaseConn
  4. {
  5. public static Connection getConn() throws SQLException{
  6.     String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//连接url
  7.     String userName = "user";//用户名
  8.     String password = "pass";//密码
  9.  
  10.     DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
  11.     Connection conn = DriverManager.getConnection (url, userName, password);
  12.     return conn;
  13. }
  14. }

(4)ApplicationResource.properties
属性文件,登陆失败时的错误记录信息

  1. error.admin.accessDeny=密码错误!

好了,这就是全部了!
初学,理解难免有偏差,欢迎大家就Struts方面的问题与我交流!