关闭

JSP Web框架研究:Struts

发表于:2008-9-16 15:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
JAVA

  在JSP 的各种Web框架中,据我看来Struts框架最为简单。下面从Struts框架开始来研究JSP的web框架。

  1、MVC

  在研究这个框架之前,先要对MVC模式有所了解。幸好以前学习过设计模式,对MVC编程和模式了解一些,即将模型、视图、控制器分开。使三者可以各负其责,处理自己的逻辑。

  2、Struts框架的介绍:

  Struts框架也采用了MVC结构:

  Model:在Struts框架中,Model模型的实现是JavaBean.在Struts框架中,通过使用JavaBean完成信息的存储。

  Control:控制器即Java Servlet,由框架提供,负责视图和模型之间的交互。控制器的每个入口都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的Java类

  以进行相应的处理,控制器还指定下一个视图的位置。

  View:视图,当然使用JSP了。

  是不是很简单啊。

  下面的序列图反映了一个简单的Strut构架的运行过程:

  

  看到上面的序列图,如果让我们从头来写代码,来实现Struts构架,这样也太累了。Struts构架给我们提供了不少类,如果ActionServlet、Action、ActionForm等。通过继承使用他们和使用框架,我们只需写几个继承类,就可以写出基于这个框架的代码了。这就是框架的好处,他把一些细节给我们屏蔽了,我们只要实现了关键部分。OK,就可以了。结构又好,又方便。这就是框架的好处。

  通过上面的说明,或许你对框架会有些了解。框架,简单的理解,就是我们小学时做的填空题,我们把重要的空填一下。就可以了。显然,上面的描述不是很准确,但用来简单的理解框架还是可以的。

  下面需要用一个实例来说明如何使用struts框架了。

  我们用Struts实现一个简单的注册信息页面。

  需要注册的信息只由用户名和密码。下面是具体的实现。

  首先定义一个User类:

  

  1: public class User {

  2: private String userName;

  3: private String password;

  4:

  5: public String getPassword() {

  6: return password;

  7: }

  8:

  9: public void setPassword(String password) {

  10: this.password = password;

  11: }

  12:

  13: public String getUserName() {

  14: return userName;

  15: }

  16:

  17: public void setUserName(String userName) {

  18: this.userName = userName;

  19: }

  20:

  21: }

  

   User类定义了用户的信息描述。下面的UserForm继承了AcitonForm类,用于验证请求信息并对表单信息进行检查。   

  public class UserForm extends ActionForm {

  private User user;

  public User getUser() 

  {

  return user;

  }

  public void setUser(User user) { this.user = user; }

  public String getUserName() {

  return user.getUserName();

  }

  public String getPassword() {

  return user.getPassword();

  } @Override

  public void reset(ActionMapping a, HttpServletRequest r) { this.user = new User();

  }

  @Override

  public ActionErrors validate(ActionMapping a, HttpServletRequest r) {

   ActionErrors errors = new ActionErrors();

  if(user.getUserName()==null||(user.getPassword()==null)){

  errors.add("请填写用户名和密码!",new ActionMessage("error.user.password"));

  }

  return errors;

  }

  }   

   UserAction类:继承了Action,用来相应请求。看看execute函数就知道请求相关的参数包括映射(ActionMapping)、请求表单(ActionForm)、servlet请求(HttpServletRequest)和响应(HttpServletResponse)。那么就很容易的写出处理请求的函数。

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  import org.apache.struts.action.Action;

  /

  *

  * To change this template, choose Tools | Templates

  * and open the template in the editor.

  */

  import org.apache.struts.action.ActionForm;

  import org.apache.struts.action.ActionForward;

  import org.apache.struts.action.ActionMapping;

  /**

  *

  * @author WangJing

  */

  public class UserAction extends Action {

  @Override

  public ActionForward execute(ActionMapping mapping, ActionForm arg1, HttpServletRequest

  request, HttpServletResponse arg3) throws Exception {

  UserForm userForm = new UserForm();

  try{

  UserBean bean = new UserBean();

  bean.addUser(userForm.getUser());

  }catch(Exception e){

  e.printStackTrace();

  }

  request.setAttribute("user",userForm.getUser());

  return (mapping.findForward("userCreated"));

  }

  }

   UserBean:它实现了具体的业务逻辑,她被Action调用。完成数据的存储。

  class UserBean{

  void addUser(User user) {

  throw new UnsupportedOperationException("Not yet implemented");

   }

  private Connection conn;

   public UserBean() {

  this.conn = DatabaseConn.getConnection();

  }

   public void addUser(User user){

   Statement s = (Statement) conn.createStatement();

  s.executeUpdate("insert into User values("+user.getUserName()+","+user.getPassword()

  +");");

  }

  }

  所有的文件编好之后,下面就是配置和运行了。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号