Struts2框架-基础知识

Struts2框架是mvc思想的具体实现,那么mvc是什么?

1.MVC

Model 模型 团队
View 视图
Controller 控制 前端控制器
什么是mvc设计模式?
这里写图片描述
MVC把应用程序分成3个核心模块:模型(Model)、视图(View)和控制器(Controller),它们分别担当不同的任务
首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理
然后模型根据用户请求进行相应的业务逻辑处理,并返回数据
最后控制器调用相应的视图格式化模型返回的数据,并通过视图呈现给用户。

Mvc优点:
1.把业务处理和流程控制等代码混杂在一起进行分离,降低了程序模块之间的耦合度,利于系统的维护。

2.由于一个模型可以为多个视图公用,导致客户需要不同视图展现的时候不需要重复写逻辑代码,可以重复利用现有的模型。提高了代码的复用。

2。Struts2—mvc的优秀代表

一些基本概念

包的概念

使用package可以管理Action和Interceptor等。
package的属性
name:这是一个必填属性,该属性指定该包的名字,该名字是该包被其它包引用的 key。
名字随便起一个逻辑名称,名称原则上应该和功能有关。

extends:可选属性。指定该包继承其它包。继承其它包,可以继承其它包中的 Action 定义。一般继承struts-default包
abstract:可选属性。指定该包是不是一个抽象包。抽象包中不能包含 Action 定义。

namespace:可选属性。指定包的命名空间。影响访问该包下的Action的路径。 名字最好和包名一致。但是注意以斜杠开始。

访问一个action,具体路径:http://localhost:8081/项目名+namespace+”/”+login

Login:action标签的name属性值。

Action的配置

Action是struts2的基础的“工作单元”。
配置一个基本的Action只需要两个信息:
name : Action类的映射名称
class : Action类
默认调用Action类的execute()方法
可以使用method属性来告诉struts2调用Action类的哪个方法

<action name=“userLogin” class=“action.UserLogin” >
        <result name="ok">/ok.jsp</result>
        <result name="error">/error.jsp</result>
         <result name="doAdd">/hello.jsp</result> 
    </action>

请求方式有三种:
1. action加上method属性

2.官方不推荐
/hello.jsp
/success.jsp
/login.jsp
/test.jsp

URL写法:namespace名称+/+action的名字+!+method=hello
3. 用通配符

/hello.jsp
/success.jsp
/login.jsp
/test.jsp

Result配置

Result标签告诉struts2在Action调用完成后一下步做什么
结果以“key-value”的形式映射到结果类型
在struts.xml文件中定义 ,嵌套在标签中
Result标签常用属性
name : Result名称,默认 “success”
type : Result类型,表示跳转方式,默认值 “dispatcher”
dispatcher:表示服务器转发的方式
redirect:表示客户端重定向的方式
json
xml
默认是通过请求转发器实现的,相当于request.getRequestDispatcher()

一个struts2的开发步骤

1创建web项目,导入struts2的jar包

Jar包:
struts2-core-2.2.1.jar:Struts2框架的核心类库。
xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。
ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
freemarker-2.3.16.jar:Struts 2的UI标签的模板使用FreeMarker编写。
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件。
commons-io-1.3.2.jar:IO输入输出流组件,主要完成文件的读写功能。
javassist-3.7.ga.jar:Javassist是一个开源的分析、编辑和创建Java字节码的类库。(在struts-2.2.1\apps\struts2-blank-2.2.1.war下的lib中找)
commons-logging-1.0.4.jar:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK 1.4版本之上的日志记录。

2 配置struts2的过滤器

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3 编写Action类

package action;

public class LoginAction {
    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;
    }

    /**
     * 登录
     */
    public String login(){
        if(username.equals("admin")&&password.equals("ok"))
        {
            return "success";
        }
        else{
            return "fail";
        }


    }

}

4 创建struts.xml文件,注册Action类

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

<struts>
    <package name="user" namespace="/" extends="struts-default">
        <action name="login" class="action.LoginAction" method="login" >
           <result name="success">/success.jsp</result>
           <result name="fail"  type="dispatcher">/fail.jsp</result> <!-- 默认转发 dispatcher   重定向redirect-->
        </action>

    </package>

    <!-- Add packages here -->

</struts>

5 创建JSP文件。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login.action">
    用户名:<input type="text" name="username"/><br>
    密码:<input type="password" name="password"/><br>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

6 测试

测试

有3种访问方式:一种根据action配置的name name.action如果没有配置method属性默认会走execute方法。

另一种可以根据具体的method指定。动态方法调用:user!login.action
如果想要禁止这种动态调用,在xml文件设置:struts.enable.DynamicMethodInvocation = false

第三种通配符 *

/success.jsp
/fail.jsp

访问方式同第一种。Namespace/student_login.action

Action开发规范(顺嘴提一句,哪有那么多规范,我就不规范)

Action可以是一个单纯的类,默认调用execute()方法
为了让用户开发的Action类更规范,Struts2提供了一个Action接口,定义了Action类应该实现的规范

public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
} 

但是我们一般会继承下面这个类:

public class ActionSupport implements Action,   Validateable, ValidationAware, TextProvider,    LocaleProvider, Serializable {
} 

怎么拿到session和request等对象呢?(用来携带数据倒前端)

与Servlet解耦的方式

ActionContext context=ActionContext.getContext();
        Map session=context.getSession();
        Map request=(Map)context.get("request");
        Map application=context.getApplication();
        request.put("message", "chenggong zhuce");
        request.put("user", user);
        return "registerSuccess";

与Servlet 耦合的方式

HttpServletRequest request=ServletActionContext.getRequest();
        HttpServletResponse response=ServletActionContext.getResponse();
        request.setAttribute("message", "chenggong zhuce");
        request.setAttribute("user", user);
        HttpSession session=request.getSession();
        ServletContext application=request.getServletContext();

耦合是什么意思不需要解释吧?所以推荐大家使用解耦方式

那么怎么获取前段传递来的数据呢?

获取页面传过来的参数方式是在action类配置私属性。也可以配置实体类属性

举个例子

Action代码:   private User user;

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
Login.jsp:
用户名:<input type="text" name="user.username"/><br>
密码:<input type="password" name="user.password"/><br>

上面例子是在action里写了个实体对象,还可以写一个私有属性,

比如action里是private的String username,那么form表单name=“username”就拿到了呀,哈哈哈哈哈。。。。。。


Struts2就这么简单?难的看下一篇( ̄▽ ̄)”

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值