struts1的一些基本用法和操作

入职两周了,项目是用struts1+ibatis框架搭建的,数据库是oracle,其他还行,关键是struts1之前没用用过,所以只好在网上狂查文档,最后大致整理了一些struts1的基本使用方法。

首先struts1需要引入的jar包:

因为我的IED是Myeclipse8.5直接引入的,实在是不想在struts的网站找jar了

struts1和2的第一个区别就是xml配置的位置不一样,struts1的配置文件是放在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页面

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

首先,既然是框架,无论是否是古老的struts1,那么我最关心的就是他可不可以帮我封装一个bean,

我们先自己写一个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;
    }

}

struts1中的bean与2不同,必须继承一个叫ActionForm的类,其他的和2一样,属性私有,提供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,相应的值对应方法名

2015-05-10 17:44:42

				
时间: 2024-08-05 19:05:17

struts1的一些基本用法和操作的相关文章

JQuery 相关用法和操作

01-JQuery 基础语法: 1.使用JQuery必须先导入JQuery.x.x.xjs文件. 2.JQuery中的选择器: $(选择器).函数() ① $是JQuery的缩写,既可以使用JQuery("选择器").函数(): ② 选择器,可以是任何的css支持的选择符: 3.文档就绪函数:防止在文档未完全加载完成之前,运行JQuery代码: $(document).ready(function(){ // JQuery代码 }); 简写形式:$(function(){ }); [文

PHP中常用数组的一些基本用法

PHP中常用数组的一些基本用法和操作: 索引数组$arr=array("aa","ss","dd","ff");echo $arr[0].', '.$arr[1].' ,' .$arr[2].' ,' .$arr[3]; 获取数组的长度echo count($arr); 遍历索引数组for($i=0;$i<count($arr);$i++){ echo $arr[$i]; echo "\n";} fo

java面试题001

hibernate中离线查询去除重复项怎么加条件?? dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); http协议及端口,smtp协议及端口 http:超文本传输协议    端口 80 smtp:简单邮件传输协议 端口25 编写程序,完成文件复制功能 Servlet创建过程及生命周期Servlet 在容器中运行时,其实例的创建及销毁等是由容器进行控制. Servlet 的创建有两种方法. 客户端请求对应的 Servlet 时,创建

==和equals区别

java中的数据类型,可分为两类:  1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比较,应用双等号(==),比较的是他们的值.  2.复合数据类型(类)    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定

新手开车必须知道的五十个小知识

万事开头难,开车当然也不例外.相信每一位驾驶员都经历过初次上路的忐忑不安,眼盯前方,双手紧握转向盘,身体僵直前倾,远离前车,缓慢前行,起步停车或遇到坡路和堵车时经常熄火等等,这些都是新手的写照,只要稍加留意很容易辨认.客观地讲,新手的确影响了车流速度,也造成了一些事故隐患,很多人给新手冠以"马路杀手"的称谓.于是一些很有"自知之明"的新手为了取得他人谅解,经常在自己车的后挡风玻璃上贴上"新手请多关照"."新手磨合"等字样.其实

miniUI input设置默认值,js获取年月注意事项,数据库nvl函数使用

2017-6-5周一 今天碰到的一个需求是:两税附征模块进入页面筛选时间默认值为当前月的上一个月,并根据筛选结果显示数据,我们用的框架为miniUI. 坑1: 默认值设置,刚刚接触miniUI,对里面的用法和操作不太熟悉,所以我直接用jquery找到时间输入的input框,设置它的val属性,发现不生效,后来查了资料才发现涉及miniUI的标签要用miniUI提供的方法.设置默认值代码如下: //设置id为month2的input框的默认值 mini.get('month2').setValue

《王者荣耀》手游产品分析报告:崛起的王者荣耀,胜负就是这么简单!

在保证了游戏本身质量过关的前提之下,只要你能够深刻的洞察到手游用户最根本的特点,同时结合自身无论是技术还是平台的优势,你就能够生产出一款受欢迎的游戏. 一.文档概览和分析目的 体验机型:小米MIX 系统版本:6.0.1MXB48T App版本:1.17.1.23 体验时间:2017.3.25 分析目的: 了解<王者荣耀>的产品战略.产品功能和产品表现等产品特性: 了解手游市场内的竞争态势和发展方向: 分析<王者荣耀>成功的原因及其对应的策略. 二.产品简介 产品名称:王者荣耀 产品

java单例模式案例

</pre>单例模式是一种常见的设计模式,一般有三种方式,单例模式具有如下特点:<p></p><p><span style="white-space:pre">1.在类的属性中,自己初始化一个静态的私有的类实例<span style="white-space:pre"></span>2.将自己的构造方法写成private的方式,拒绝其他类或者操作再次使用构造函数将单例类再次实例化&l

AngularJS数据建模(转载)

出处不明 我们知道,AngularJS并没有自带立等可用的数据建模方案.而是以相当抽象的方式,让我们在controller中使用JSON数据作为模 型.但是随着时间的推移和项目的成长,我意识到这种建模的方式不再能满足我们项目的需求.在这篇文章中我会介绍在我的AngularJS应用中处理数据建 模的方式. 为Controller定义模型 让我们从一个简单的例子开始.我想要显示一个书本(book)的页面.下面是控制器(Controller): BookController app.controlle