zoukankan      html  css  js  c++  java
  • struts的一些基本用法和操作

    struts需要引入的jar包:

    struts的xml配置的位置,文件是放在webRoot/WRB-INF/ib下,叫做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>
      <data-sources />
      <form-beans />
      <global-exceptions />
      <global-forwards />
      <action-mappings />
      <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
    </struts-config>
    <form-beans />:配置bean的
    <action-mappings />:配置action,和2中的<action>差不多
    web.xml中的配置:
    <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>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>

    总的来说struts1就是一个大的servlet,在接收到request这个大的servlet就分配给对应的servlet,这个总的servlet隐藏在幕后,一般不用动,因为这里只是介绍怎么最基本的使用struts1,因为毕竟还是有一些公司的残余项目再用。如代码所示,这个servlet拦截所有的*.do的请求。

    页面有3个,一个index.jsp,success.jsp,failuer.jsp,index.jsp有一个表单,后台做验证,如果用户名是jackie,密码是111111就跳转到success.jsp,不是的话就跳转到failuer.jsp.index.jsp的表单如下所示

    <form action="check.do" method="post">
      username:<input type="text" name="username">
      <br/>password:<input type="password" name="password">
      <br/>
      <input type="submit" value="submit">
      </form>

    其实有<html:text>的标签,但是我不喜欢用,因为标签实在是记不过来,而且我一直在想,如果不用jsp改用html怎么办,所以我个人比较喜欢最原生的标签

    success.jsp:

     <body>
        check success!!! <br>
      </body>

    如果用户名为jackie,密码为111111就跳转到这个页面

    failuer.jsp:

     <body>
        check failuer!!! <br>
      </body>

    验证错误就跳转到failuer.jsp页面

    好了,前台的页面写好了,就是后台了

    先自己写一个user对象,这样struts1就可以帮助我们封装

    package com.xiaoxia.form;
    
    import org.apache.struts.action.ActionForm;
    
    public class User extends ActionForm{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String username;
        private String password;
        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中的bean必须继承一个叫ActionForm的类,属性私有,提供get和set的方法。

    其次,写一个处理方法的类

    Mycheck.java

    package com.yourcompany.struts;
    
    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;
    import org.apache.struts.actions.DispatchAction;
    import org.apache.struts.actions.ForwardAction;
    
    import com.xiaoxia.form.User;
    
    public class Mycheck extends Action {
        
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            //先把form转换成User的实体bean
            User user = (User) form;
            //做逻辑判断,如果输入合法,那么寻找一个success的forward
            if(user.getUsername().equals("jackie") && user.getPassword().equals("111111")){
                return mapping.findForward("success");
            }
            //输入非法,寻寻找一个failuer的forward
            return mapping.findForward("failuer");
        }
    }

    其中继承了struts1中一个叫Action的类,做处理的方法名字必须是execute,四个参数中,一个是mapping,主要是处理完后跳转用的,ActionForm是struts1中帮助我们封装的实体bean,剩下的request和response和servlet中的一样。

    java代码写完了,最后得配置struts的配置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>
      <data-sources />
      <form-beans>
          <form-bean name="user" type="com.xiaoxia.form.User"></form-bean>
      </form-beans>
      <global-exceptions />
      <global-forwards />
      <action-mappings >
          <action name="user" 
                    path="/check" 
                    type="com.yourcompany.struts.Mycheck"
                   
                    scope="request" validate="false">
                <forward name="success" path="/success.jsp" />
                <forward name="failuer" path="/failuer.jsp" />
            </action>
      </action-mappings>
      <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
      
      
    </struts-config>

    其中在<form-beans>中配置相对应的实体bean,name是配置文件中实体bean的名字,type是对应的java类

    <action-mappings>中配置对应的action,可以配置多个action,一个action对应一个action的标签,这里只配置一个,<action>中,name对应的是要使用的实体bean

    path是对应的路径,在index.jsp中的form表单中的action就是“check.do”

    type是对应的做处理的类

    scope是使用的范围,validate是验证,通过验证才会调用相应的方法,但是现在前台验证一般都是js,所以这个属性估计没太大用

    下面的子标签<forward>就是跳转的页面,那么是对应的名字,在java代码中就是mapping.findForward(".....")中间就是<forward>中对应的名字

    其他的就不一一介绍了。这样一个demo的项目就可以开始跑了

    关键是问题还有一个,就是如果我想规定它跳转到某个具体方法该怎么办

    其实也很简单,但是网上例子真心没找到,这里总结下,首先,你的Mycheck.java必须集成另一个类叫DispathAction,然后你就可以改名字了

    package com.yourcompany.struts;
    
    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;
    import org.apache.struts.actions.DispatchAction;
    import org.apache.struts.actions.ForwardAction;
    
    import com.xiaoxia.form.User;
    
    public class Mycheck extends DispatchAction {
        
        public ActionForward mycheck(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            //先把form转换成User的实体bean
            User user = (User) form;
            //做逻辑判断,如果输入合法,那么寻找一个success的forward
            if(user.getUsername().equals("jackie") && user.getPassword().equals("111111")){
                return mapping.findForward("success");
            }
            //输入非法,寻寻找一个failuer的forward
            return mapping.findForward("failuer");
        }
    }

    其次,你必须在struts-config.xml的action中加一个属性:parameter

    <action name="user" 
                    path="/check" 
                    type="com.yourcompany.struts.Mycheck"
                       parameter="operate"
                    scope="request" validate="false">
                <forward name="success" path="/success.jsp" />
                <forward name="failuer" path="/failuer.jsp" />
            </action>

    parameter中随意指定,但是必须在提交过来的参数中有一个参数名为operate,相应的值对应方法名

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/11245362.html
Copyright © 2011-2022 走看看