• 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,相应的值对应方法名

  • 相关阅读:
    grep 匹配打印的上下几行
    java List<String>的初始化
    HashMap优雅的初始化方式以及引申
    protocol buffer开发指南(官方)
    20种常用的DOS命令小结
    linux xfs文件系统无法用readdir获取dirent文件类型d_type则用stat获取暨stat函数讲解
    java中jar命令打包一个文件夹下的所有文件
    C/C++中的格式化字符
    自定义标签(JspFragment类、invoke方法、开发带属性的标签)
    java中Scanner类nextLine()和next()的区别和使用方法
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/11245362.html
Copyright © 2020-2023  润新知