zoukankan      html  css  js  c++  java
  • 构建Struts1.x项目

    一、搭建环境

    1.导入jar包(本人下载的是struts-1.3.10-all.zip),将里面struts的lib目录下的jar包全部导入。

    2.在WEB-INF下建立一个配置文件:struts-config.xml,如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

    <struts-config>
     <form-beans>
      <!-- 让Struts知道LoginForm,提供给Action使用 ,name为Form的引用名,type为所对应的Form类的全名-->
      <form-bean name="loginForm" type="cn.itcast.LoginForm"></form-bean>
      <form-bean name="addStudentForm" type="cn.itcast.AddStudentForm"></form-bean>
     </form-beans>
     <!-- <action-mappings>元素帮助进行框架内部的流程控制,可将请求URI眏射到Action类,将Action对象与ActionForm对象相关联。<action-mappings>元素可定义多个<action>子元素 -->
     <action-mappings>
      <!-- <action>所描述的是特定的请求路径和一个相应的Action类之间的映射关系。有以下属性:
      attribute:设置和Action关联的form bean在request/session内的属性key,通过request/session的getAttribute(attribute)方法返回该 form bean实例。
      input:当表单验证失败时将请求转发的URL,如果 表单校验不通过则跳转到到该值所代表的目标模块 -->
      <!-- 配置Action,path为ActionServlet能够找到LoginAction,type为Action的类的全名,name指明ActionServlet所用的Form(即用来存放表单提交过的的值的Form,没有的话会将空指针异常) -->
      <action path="/login" type="cn.itcast.LoginAction" name="loginForm">
      <!-- forward实现跳转 ,name指定跳转方式,path指定跳转页面,相当于键值对-->
       <forward name="loginSuccess" path="/LoginSuccess.jsp"></forward>
       <forward name="loginFailure" path="/LoginFailure.jsp"></forward>
      </action>
      <action path="/addStudentAction" type="cn.itcast.AddStudentAction" name="addStudentForm" scope="request" validate="true" attribute="addStudentForm1" input="/ErrorInput.jsp">
       <forward name="addStudentSuccess" path="/AddStudentSuccess.jsp"></forward>
       <forward name="addStudentFailure" path="/AddStudent.jsp"></forward>
      </action>


    <!-- *代表通配符,在{1}出现的地方和前面的*保持一至,这可以用于配置一类类似的文件名。path和type为action必须配置的参数,validate表示在填充Form时是否需要校验,默认值为true表示需要校验。input是校验不通过后返回的页面。--> 

    <action            path="/Edit*"

                   type="org.apache.struts.webapp.example.Edit{1}Action"

                   name="{1}Form"

                  scope="request"

                 validate="false">

        <forward name="sucess" path="/{1}.jsp/">

      </action>

     <action         path="/Save*"

                  type="org.apache.struts.webapp.example.Save{1}Action"

                  name="{1}Form"

                 scope="request"

        <set-property property="cancellable" value="true"/>

      </action>



     </action-mappings>
     <!-- 全局跳转,当有两个或两个以上的Action要跳到同一个页面时使用 -->
     <global-forwards>
      <forward name="error" path="/Error.jsp"/>
     </global-forwards>
    </struts-config>

    3.web.xml中注册struts中心控制器--ActionServlet:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name> 
     
      <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/struts-config.xml</param-value><!-- 参数值:文件名 ,可以有多个配置文件,用“,”分隔-->
       </init-param>
       <load-on-startup>0</load-on-startup><!-- 服务一启动时就进行实例化 -->
      </servlet>
     
      <servlet-mapping>
       <servlet-name>action</servlet-name>
       <url-pattern>*.do</url-pattern> <!--让所有的*.do的请求都进这里-->
      </servlet-mapping>
     
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    二、那立一个类,继承ActionForm:package cn.itcast;

    import org.apache.struts.action.ActionForm;

    public class LoginForm extends ActionForm {
     private String username=null;
     private String password=null;
     public String getUsername() {
      return username;
     }
     public void setUsername(String username) {
      this.username = username;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
    }

    注册修改配置文件struts-config.xml

    见上。

    三、开发Action:

    1.建立一个类,继承Action,覆盖execute方法,需要强制转型:

    package cn.itcast;

    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;

    public class LoginAction extends Action {

     @Override
     public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response)
       throws Exception {
    //  继承父类(父类会将表单提交的值放在form中传递过来),调用LoginForm来存放表单传送过来的值(即将form强转为LoginFrom )
      LoginForm loginForm=(LoginForm)form;
    //  从LogginForm中将值取出来业务逻辑处理
      String returnURLKeyWord="";
      if(loginForm.getUsername().equals("itcast")){
       returnURLKeyWord="loginSuccess";
      }else{
       returnURLKeyWord="loginFailure";
      }
    //  通过使用struts-config.xml配置的父类(先带着跳转方式跳转到ActionServlet再由ActionServlet选择跳转页面 )实现跳转
      return mapping.findForward(returnURLKeyWord);
     }
    }

    注册,修改配置文件struts-config.xml

    见上。

    四、界面JSP

     <body>
       <!-- request.getContextPath():工程上下文,login.do中login是从struts-config.xml下action中的path中拷贝过来的 -->
       <!-- form表单提交给login.do,进入前端控制器ActionServlet(web.xml:*.do)然后再转入后端控制器LoginAction(struts-config.xml:login) -->
        <form action="<%=request.getContextPath() %>/login.do" method="post">
        <!-- 各表单控件的name属性必须和提交后的Form中的属性名一至,否则会出现空指针异常 -->
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="login"><br>
        </form>
      </body>

    五、注意事项

    1、Action是单实例和线程不安全的,在Action中最好不要有可读写的变量。

    2、struts-config.xml文件中的<action>元素的path属性中没有.do,原因是映射到struts的路径可以不是.do的,是不是.do还是.htm什么的由web.xml决定,因此设计时要考虑当web.xml中的配置可以动态更改的问题。

    3、struts-config.xml文件中的<action>元素的path属性必须以“/”开头,forward中配置的jsp文件路径也必须以“/”开头,总之,在web应用程序中记住路径总是以“/”开头,就错不了!

  • 相关阅读:
    LowerUDF
    第二次c++作业总结
    Java多线程详述
    OutOfMemoryError异常
    Java虚拟机内存区域
    HIS(LIS、PACS、RIS、EMR)系统解决方案
    如何用PLSQL Developer连接远程的ORACLE数据库
    iBATIS与Hibernate的异同
    Java复习_static用例_单例模式_饿汉式
    Java复习_static静态方法(类方法)
  • 原文地址:https://www.cnblogs.com/mingforyou/p/2267861.html
Copyright © 2011-2022 走看看