项目开发

来源:互联网 发布:淘宝上杨氏鼻炎膏 编辑:程序博客网 时间:2024/05/16 12:00

思路:

      1.引入struts的jar包到当前工程的的/WEB-INF/lib目录下

      2.在web.xml文件中注册org.apache.struts.action.ActionServlet.并且设置初始化参数以便于系统自动获取strut-config.xml文件.

      3.定义视图(jsp),定义javaBean

      4.定义formBean(即实现actionForm的类)

      5.创建控制器组件(关键:即实现action类的)后面还会引入同一控制器实现增删改查的控制(用DispatchAction)

关键问题:理解struts是如何将表单的数据封装到指定的actionform中的,并且数据传输的方式是什么.

      创建一个Struts工程的步骤:
    * 创建web工程
    * 下载struts的jar包 拷贝到当前工程的的/WEB-INF/lib目录下
    * 定义视图 login.jsp
    * 定义javaBean接受表单数据
    * 创建控制器组件 class LoginAction  extends Action
    * 准备配置文件
          * web.xml
              <servlet>
         <servlet-name>action</servlet-name>
         <!-- struts的中央控制器,在目前的struts版本中,只能配置一个ActionServlet,多线程运行 -->
         <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>
         <!--
           数值越小,启动越靠前
           服务器启动时实例化ActionServlet 同时调用ActionServet的init方法初始化-->
         <load-on-startup>0</load-on-startup>
      </servlet>
     
     
       <!-- Standard Action Servlet Mapping -->
       <servlet-mapping>
         <servlet-name>action</servlet-name>
         <!-- 对外访问路径 -->
         <url-pattern>*.do</url-pattern>
       </servlet-mapping>
      
       * 配置struts-config.xml文件
              <struts-config>
          <form-beans>
            <!--
               name属性:该ActionForm的唯一标识
               type属性:该ActionForm所在类的完整路径
             -->
            <form-bean name="loginForm" type="com.itcast.struts.form.LoginForm"></form-bean>
          </form-beans>
       
        
        
         <!-- 表示请求的集合,可以配置多个action,每个action就是一个ActionMapping -->
         <action-mappings>
           <!--
                /login.do  actionServlet解析请求把.do去掉/login
                path属性:唯一,就是action的唯一标识
                name属性:表示的是一个ActionForm的标识.页面的数据要封装到name属性指定的ActionForm中
                        该属性值执行必须在form-beans标签中定义的
                type属性:指定action的完整路径,常见LoginAction实例,自动调用Action中的execute方法
           -->
           <action path="/login" name="loginForm" type="com.itcast.struts.action.LoginAction">
           </action>
         </action-mappings>
       </struts-config> 
       * 发布运行 
      

   疑问:
     * struts中的javaBean为什么要继承ActionForm?

       可以简单理解为,为了方便bean数据的封装和传递.
     * javaBean中属性的名称必须为什么和表单页面中组件的name属性的值相同?

       以便于底层反射的实现.如果属性名不相同则操作起来将会很麻烦.
     * struts的页面表单的数据是怎么封装到javaBean中?

       读取struts-config.xml文件可以得到action和actionform的对应关系.然后用反射获取actionForm中的左右set方法,查找与表单匹配的bean,对其进行赋值.
     * 控制器组件为什么必须要继承Action

       为了重写actoin的execute方法.
     * 为什么重写execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)

        servlet在截取到请求后会调用action的exectue方法。如果不重写则,该action实现类则无意义。    

     * execute方法的四个参数是怎么传递的

       首先,四个参数分别是:(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response)。httpServletRequest,和HttpServletResponse参数可以通过actionservlet直接传入。actionMapping其实就是struts-config.xml文件中action的实例,actionForm则是action对应的formBean的实例.底层都是通过反射进行实现的.

 

截取字符串的常用方法:

 

    a.判断以xxx开头的

//方法的名称是以set

                  if(m.getName().startsWith("set")){

                     listMehtod.add(m);

                 }

 

 

   b.截取需要的字符串

//获取请求路径

       String servletPath=request.getServletPath();

       //  /login.do  ---->/login

       //System.out.println("servletPath  "+servletPath);

       servletPath=servletPath.substring(0,servletPath.lastIndexOf("."));

       System.out.println("servletPath  "+servletPath);  ///login

 

c.截取需要的字符串(截取set方法后面的值,先转小写,再获取)

 

System.out.println("^^^^^^^^^^methodname  "+methodname);  //setUsername

//获取属性

                 String params=methodname.substring(3,4).toLowerCase()+methodname.substring(4);

原创粉丝点击