Struts学习之day01


struts2的概念
  struts2是轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表示层。
  轻量级:低侵入性,与业务代码的耦合度低。即业务代码中不需要import它的包。
  MVC框架:struts实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。


  什么是MVC?
    MVC是一种设计模式,是一种代码的分层思想。将代码分为三层:模型、视图、控制器,作用是将代码解耦,便于团队开发。
    模型(Model)的职责是负责业务逻辑。包含两层:业务数据和业务处理逻辑。比 如实体类、DAO、service都属于模型层。
    视图(view)是负责显示界面和用户交互。属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
    控制器(Controller)是模型层M与视图层V之间的桥梁,用于控制流程,比如:在在Servlet项目中的单一控制器ActionServlet。



  struts2的缺点:
    1.效率偏低,struts2中的action是非单例的,每次请求都需要new对象。
    2.有安全漏洞,容易被注入式攻击。


  struts1和struts2的区别:
    struts2是struts的下一代产品,是在struts1和WebWork的技术基础上进行了合并
  的全新的MVC框架。
    struts2和struts1差别巨大,不能理解为struts1的升级版。
    struts2是以Xwork为核心,可以理解为WebWork的升级版。



struts:
  -->filter-->struts.xml-->Action-->DAO--->Entity


spring:
  -->DispactherServlet-->applicationContext.xml-->Controller-->DAO-->Entity


开发顺序:
  -->DAO-->业务控制器(Controller,Action)-->配置(applicationContext.xml,struts.xml)-->JSP

s truts如何实现MVC?
  struts实现MVC的方式基本上与Spring一致,主要是实现方式上有一些差异,struts采用filter+Action来充当控制器(Controller)。其中filter是前端控制器,负责处理请求的分发,它会根据配置文件struts.xml中的预置内容,把每一类请求分发给特定的Action类,而每一个Action类负责处理一类请求。这样不同的请求,通过filter分发给不同的Action类来处理,从而将请求的处理自然的拆开,,大大降低控制器(Controller)处理请求代码的耦合度,提升了代码的可维护性。




 

struts的使用步骤:

  大致步骤:
针对struts实现MVC的图示,我们来分析一下struts开发所涉及的组件及大致步骤,具体步骤请见后面的详细步骤说明。
  1.struts框架下,请求需要提交给filter,而这个filter需要在web.xml中进行配置。对于filter这个组件不需要我们自己实现,struts提供了一个默认的filter供我们
          使用,该filter名为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
  2.filter的目的是将请求分发给业务控制器Action,而找到每类请求对应的Action需要提前预置在struts.xml中,即我们需要在struts.xml中预置请求与Action的关系。
  3.filter依赖struts.xml找到Action类之后,会自动实例化Action,并调用Action的业务方法,因此我们需要针对每类请求创建Action,并在业务方法中实现当前业务
     的逻辑代码。
  4.Action在实现业务逻辑时,往往需要调用访问数据库、调用业务组件等,因此我们需要提前实现DAO、业务组件。
  5.Action在处理完业务逻辑之后,filter需要再将请求转发给JSP,由JSP负责显示处理的结果。因此,我们需要在struts.xml中配置每类Action转发的JSP,并创建
    JSP实现显示代码。


   
具体步骤:
第一步:创建WEB项目

第二步:导入struts核心包(5个)

第三步 :配置前端控制器
        struts使用filter来充当前端控制器,因此在web.xml中配置一个filter即可。struts预置;了该filter的实现类,来自于struts的jar包,名为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
                        引入struts框架后,希望所有的请求都由它的filter来处理,因此使用"/"来指定该filter处理所有请求。



第四步:在src下,创建名为struts.xml的配置文件
1.struts配置文件默认要放在src下。
2.struts配置文件默认名称为struts.xml。





第五步:编写业务控制器Action
创建业务控制器组件,通常命名为XxxAction,该组件是一个满足JavaBean规范的类。
在Action中定义业务方法,要满足下列条件:
   1.方法是public的
   2.返回值为String类型的
   3.参数列表为空

编写业务方法:
  1.方法内编写业务逻辑代码
  2.返回字符串与struts.xml中的action标签下的result标签的name属性匹配,即根据此返回值找到对应的        result。

package org.tarena.action;

import org.tarena.entity.User;
/**
  * Action是Struts2的业务控制器,等价于SpringMVC中Controller,在这里写业务代码。

*/
public class HelloAction {

//基本属性
private String realName;

//域模型
private User user;

public HelloAction(){
System.out.println("实例化Action");
}


/**
* Action的业务方法,用于处理请求中的业务,有三点要求:
* 1.必须是public 
* 2.返回值为String
* 3.参数列表为空
*/
public String sayHello(){
//模拟业务逻辑
System.out.println("Hello Action");

//输出基本属性值
System.out.println("姓名:"+realName);
//输出域模型值
System.out.println("用户名:"+user.getUserName());
System.out.println("密码:"+user.getPassword());

/*
*返回的字符串用于匹配一个result标签,然后请求转发给result标签中定义的页面。

*/
return "OK";
}

public User getUser() {
return user;
}


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


public String getRealName() {
return realName;
}


public void setRealName(String realName) {
this.realName = realName;
System.out.println("注入realName");
}

}


package org.tarena.entity;


public class User {
private String userName;
private String password;

public User(){
System.out.println("实例化User");
}

public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
System.out.println("设置userName");
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


第六步:在WebRoot下创建hello.jsp页面,在上面编写显示部分的代码。




第七步:在struts.xml中配置请求与Action的关系,并在action下,通过result设置转发的页面。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">


<struts>
  <!-- 该配置需要体现两点内容:1.请求对应哪个Action类及方法 2.请求转发到哪个页面 -->
  <!-- 
    name:是package的名称,用于引用package
    namespace:是package的命名空间,用于访问一个package,以"/"开头。
    extends:是指继承于某个package,继承这个package相当于把这个package下所配置的内容复制到当前package下。
          一般情况下,一个模块用一个package来配置。
   -->
  <package name="day01" namespace="/demo" extends="struts-default">
    <!-- 访问http://localhost:8888/struts_day01/demo/hello.action -->
    <!-- 
      name:声明的组件名,用于找到Action类。一个package下可以配置多个action标记,他们之间不能重名(name)。
      class:Action类名。
      method:要调用Action类中的方法。
     -->
    <action name="hello" class="org.tarena.action.HelloAction" method="sayHello">
 <!-- 
   result:用于转发的页面。
   name:是result标签的名称,用于匹配Action方法的返回值。每个action下可以匹配多个result,但他们之间不能重名。
  -->
      <result name="OK">/hello.jsp</result>
    </action> 
  </package>
</struts>




























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值