2_struts1简单入门例子---登陆

下面用一个简单的login例子来简单的演示一下struts的流程

 

1 开发form

     要接受浏览器传来的参数,就要对新建一个form类,这个类需要继承自org.apache.struts.action.ActionForm,form中的字段要和浏览器表单的字段名匹配(实际上是set/get属性名),这里假设前台表单传回username和password2个参数。

package com.element;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {
	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-config.xml中注册刚新建的form类

<?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-bean都要嵌套在form-beans标签中
		name属性是一个逻辑名,代表了这个formbean,可以随意取名,但不能和其它formbean重名
		type属性指明了formbean的类路径	
	 -->
	<form-beans>
		<form-bean name="loginForm" type="com.element.LoginForm"></form-bean>
	</form-beans>
</struts-config>
 

2 开发Action

    这个Action类要继承org.apache.struts.action.Action,在struts框架里面的作用是后端控制器。这里需要覆写execute()方法

package com.element;

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 {

       //必须覆写execute方法
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		return super.execute(mapping, form, request, response);
	}
	
}

     同时也需要在struts-config.xml中配置Action类:

<?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-bean都要嵌套在form-beans标签中
		name属性是一个逻辑名,代表了这个formbean,可以随意取名,但不能和其它formbean重名
		type属性指明了formbean的类路径	
	 -->
	<form-beans>
		<form-bean name="loginForm" type="com.element.LoginForm"></form-bean>
	</form-beans>
	<!--同理,action元素需要嵌套在action-mappings标签中
		一个Action类由一个<action>表示
		path属性表示该Action要拦截的url,path="/login"就代表了login.do,/代表的应用根目录,不是站点根目录
		type属性指明了Action类的路径
		name属性和form-bean中的name属性相匹配,指明需要填充该formbean来给Action处理
		<forward>子标签指定了Action处理完后的视图,其中需要在Action.execute中指明name属性的值,从而将请求转发到path属性指定的路径中
	  -->
	<action-mappings>
		<action path="/login" type="com.element.LoginAction" name="loginForm">
			<forward name="loginSuccess" path="/loginSuccess.jsp"></forward>
			<forward name="loginFailure" path="/loginFailure.jsp"></forward>
		</action>
	</action-mappings>
</struts-config>

 

3 开发execute方法

    在execute方法中相当于是一个控制器,需要在其中进行业务层的调用和视图层的返回

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//需要将form转型成真正的类型,这样才可以取得浏览器的参数信息
		LoginForm lf = (LoginForm)form;
		if(lf.getUsername().equals("element")){
                       //参数和在<forward>标签中的name相对应
			return mapping.findForward("loginSuccess");
		}else
			return mapping.findForward("loginFailure");
	}
 

4 建立login.jsp,loginSuccess.jsp,loginFailure.jsp

   其中login.jsp的body代码如下:

 

  <body>
       <!-- action要求以.do结尾,这样才能被ActionServlet截获 -->
   	<form action="<%=request.getContextPath()%>/login.do">
   		username:<input name="username" type="text"/><br/>
   		password:<input name="password" type="password"/><br/>
   		<input type="submit" value="登陆">
   	</form>
  </body>
 

    将项目部署,运行的时候,当在表单控件中的username=“element”的时候,页面就转发到loginSuccess.jsp,否则到loginFailure.jsp.

    注:即使不输入username控件,也会转发到loginFailure.jsp,因为struts会讲formbean中的username设置为“”空字符串,因此不会抛出null指针异常。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值