一口一口吃掉Struts(三)——一个简单Struts实例

60 篇文章 0 订阅
15 篇文章 2 订阅

了解了Struts的基本流程,那么我们利用Struts来实现一个简单的登陆功能:

 

先用时序图来描述一下登录功能的处理流程:

 

核心操作:

1、配置struts
* 拷贝struts相关的jar到WEB-INF/lib下
* 在web.xml文件中配置ActionServlet
* 提供struts-config.xml文件,需要放到WEB-INF下

2、实现 
*建立login.jsp/loginSuccess.jsp/loginFail.jsp
*建立了LoginAction.java/userActionForm.java
*将LoginAction/LoginActionForm/相关jsp配置到struts-config.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>2</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>2</param-value>
		</init-param>
		<load-on-startup>2</load-on-startup>
	</servlet>


	<!-- Standard Action Servlet Mapping -->
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

 

JSP(View)

	<form action="login.do" method="post">
			<input type="text" name="name" />
			<br />
			<input type="password" name="password" />

			<input type="submit" value="登录"/>
		</form>

LoginSuccess.jsp

<body>
  登录成功》》》》》》》》》》》》
 </body>

LoginFail.jsp

<body>
  登录失败》》》》》》》》》》》》
 </body>


LoginAction

 

package com.jialin;

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;

/**
 * 登录action
 * @author jialin
 *作用:取得表单数据,调用model层业务逻辑,返回转向信息
 */
public class LoginAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		 UserActionForm  userForm=(UserActionForm)form;
		 String userName=userForm.getName();
		 int password=userForm.getPassword();  //这里不用我们手动强转类型了。
		
		 UserManage userManage=new UserManage();//后面我们再改进
		 User user=new User();
 		 user.setName(userName);
 		 user.setPassword(password);
  
 		 try {
		     userManage.ValidateUser(user);
		     return mapping.findForward("success");
		  } catch (UserNotFoundException e) {
		     e.printStackTrace();
		     request.setAttribute("message", e.getMessage());
		  }catch(PasswordErrorException e){
		     e.printStackTrace();
		     request.setAttribute("message", e.getMessage());
		  }
  
		  return mapping.findForward("fail");	}

}

struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
     <!-- set ActionForm info-->
	<form-beans>
		<form-bean name="userForm" type="com.jialin.UserActionForm" />
	</form-beans>
        
	<action-mappings>
	  <!-- Set path,action,actionform,scope,forward info -->
		<action path="/login" type="com.jialin.LoginAction" name="userForm"
			scope="request">
			<forward name="success" path="/LoginSuccess.jsp" />
			<forward name="fail" path="/LoginFail.jsp" />
		</action>
	</action-mappings>

</struts-config>

 

UserActionForm

package com.jialin;

import org.apache.struts.action.ActionForm;

/**
 * 用户ActionForm ,负责收集表单数据
 * @author jialin
 *注:get和set后的字符串首字母变小写后,必须和表单中属性的名字一致
 */
public class UserActionForm extends ActionForm {
	private String name;
	private int password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPassword() {
		return password;
	}
	public void setPassword(int password) {
		this.password = password;
	}
	
}


UserManage(Model)

package com.jialin;

/**
 * MODEL层业务逻辑
 * @author jialin
 *判断用户是否合法
 */
public class UserManage {
	
	 public void ValidateUser(User user) {
  	// 判断用户名密码是否正确
  	if (!"jialin".equals(user.getName())) {
  	    throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());
  	} else if (user.getPassword() != 123456) {
   	    throw new PasswordErrorException("密码错误");
  	}
 }}

用户实体和异常类省略。
 

上述实现过程,其中ActionServlet的功能,被Struts封装了,所以我们的代码部分,并没有涉及到ActionServlet的部分。

分析代码可知道,Action不再需要我们手动创建,读取配置文件等基础服务已被Struts封装了,表单中数据类型也不需要我们手动转换了,页面转向可以进行配置,也不需要我们手动去配置文件中取了。

可以说,Struts把公共的服务为封装好了,我们只需要做很少的事,就可以获得很大的灵活性。

 

下篇继续!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值