Struts2学习笔记

来源:互联网 发布:360全景效果图软件 编辑:程序博客网 时间:2024/06/04 01:28

1. Struts2概念

struts:支柱、枝干,来源于建筑和旧式飞机使用的金属支架。
Struts在软件开发中,是一个非常优秀的框架。
这里写图片描述
Struts是流行和成熟的基于MVC设计模式的Web应用程序框架。
使用Struts的目的是减少我们在运用MVC设计模型来开发Web应用的时间。

2. MVC模式

2.1 Model1:代码可维护性差

JSP+JavaBean=Model1

2.2 Model2:最典型的MVC

JSP+Servlet+JavaBean=Model2
这里写图片描述
这里写图片描述

3. 第一个Struts2例子

3.1 Struts2历史

这里写图片描述

3.2 搭建Struts2环境

3.2.1下载相关jar包

下载地址:
Apache Struts官方网站 http://struts.apache.org/
Struts历史包 http://people.apache.org/builds/sturts/

3.2.2 目录分析:

apps参考war包(5个)
docs文档包,包含struts核心API,插件API和xwork的API
lib是驱动包,比较多,根据自己选择进行匹配
src是源码包,可以之间看到java文件源码

3.2.3 具体步骤

/** * 第一个Struts2程序 * A:用eclipse实现 *  1.上Struts官网下载完整Struts包(导入lib下的9个包) *  2.创建web项目,配置web.xml文件 *  3.配置struts.xml文件 *  4.创建action类, *  5.在struts.xml中配置action *  6.启动测试 *B:用MyEclipse实现 *  1.创建web项目->选中项目右键->myeclipse->add struts capabilities(不要太简单) *  2.创建action类,并且启动测试 *//* * Struts2工作原理 *  web.xml写配置一个过滤器(struts),所以用户请求都会经过该过滤器,但struts只过滤自己相关的请求(.action),其他请求就会放行 *  过滤器名称:StrutsPrepareAndExecuteFilter */public class HelloWorldAction extends ActionSupport {    @Override    public String execute() throws Exception {        System.out.println("执行Action");        //就是一个(视图)路径        return SUCCESS;    }}

web.xml

<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>*.action</url-pattern>  </filter-mapping>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>    <package name="default" namespace="/" extends="struts-default">        <action name="helloworld" class="com.imooc.action.HelloWorldAction">            <result>/result.jsp</result>        </action>    </package></struts>    

4. Struts2的工作原理及文件结构

4.1 工作原理(面试问的很多喔)

这里写图片描述

4.2 核心文件

4.2.1 web.xml

这里写图片描述

4.2.2 struts.xml

这里写图片描述
这里写图片描述

4.2.3 struts.properties

这里写图片描述

4.3 文件讲解

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

5. 深入讲解Struts2的用法

5.1 访问Servlet API

在Servelt中doGet()方法和doPost()的参数中包含了request、response,这就是servlet API。
但是,struts2中的action的execute方法中并没有servlet API,所以struts2怎么去访问Servlet API呢?
有三种方法:
1. ActionContext
2. 实现…Aware接口
3. ServletActionContext

5.2 Action搜索顺序

一级一级往上找
这里写图片描述

5.3 动态方法调用

动态方法调用是为了一个action类仅仅对应一个方法。
所以当一个action类里面有多个方法时,怎么调用特定的方法呢?可以用动态方法调用。
这里写图片描述
1. 为一个action类对应的配置文件设置多个action,每个action设置method属性(与action里的方法对应),从而实现调用特定的方法

<struts>    <package name="default" namespace="/" extends="struts-default">        <action name="helloworld" class="com.imooc.action.HelloWorldAction">            <result>/result.jsp</result>        </action>        <action name="addAction" method="add" class="com.imooc.action.HelloWorldAction">            <result>/add.jsp</result>        </action>        <action name="updateAction" method="update" class="com.imooc.action.HelloWorldAction">            <result>/update.jsp</result>        </action>    </package></struts>    

2 感叹号方式(不推荐使用)
这里写图片描述
3. 通配符方式(官方推荐)
花括号里的1解析第一个心号,2解析第二个心号
这里写图片描述

5.4 指定多个配置文件

使用include标签包含进去即可(防止主配置文件过于臃肿)
这里写图片描述
配置字符集

<constant name="strtus.i18n.encoding" values="utf-8"></constant>

5.5 默认Action

使用户体验更好
这里写图片描述

5.6 Struts2后缀

三个位置可以配置:struts.xml,struts.properties,web.xml
这里写图片描述

5.7 接收参数

5.7.1 使用action的属性接收参数

login.jsp(表单提交参数)

<body>    <!-- 使用action的属性接受参数值 -->    <form action="LoginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    <input type="submit" value="提交">    </form></body>

LoginAction.action接收并输出来自表单的参数

public class LoginAction extends ActionSupport{     private String username ;    private String password;    public String login() {        System.out.println(username);        System.out.println(password);        //...        return SUCCESS;        }    //属性的get和set方法}

helloworld.xml配置action

<action name="LoginAction" method="login" class="com.imooc.action.LoginAction">            <result>/success.jsp</result>        </action>

新建success.jsp

<body><h1>This is success.jsp.</h1></body>

5.7.2 DomainModel方法(把属性封装在对象里)

新建User.java

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

login.jsp(表单提交参数)

<body>    <!-- 使用action的属性接受参数值 -->    <form action="LoginAction.action" method="post">    用户名:<input type="text" name="user.username">    密码:<input type="password" name="user.password">    <input type="submit" value="提交">    </form></body>

LoginAction.action接收并输出来自表单的参数

public class LoginAction extends ActionSupport{     User user ;    public String login() {        System.out.println(user.getUsername());        System.out.println(user.getPassword());        //...        return SUCCESS;        }    pubilc void setUser(User user){        this.user=user;    }    public User getUser(){        return user;    }}

5.7.3 使用ModelDriven方式接收参数(推荐使用)

login.jsp(表单提交参数),无需使用user.username了

<body>    <!-- 使用action的属性接受参数值 -->    <form action="LoginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    <input type="submit" value="提交">    </form></body>

LoginAction.action接收并输出来自表单的参数,无需user的get和set方法了,但user必须实例化;action类必须实现ModelDriven接口

public class LoginAction extends ActionSupport implement ModelDriven<User>{     User user = new User();    public String login() {        System.out.println(user.getUsername());        System.out.println(user.getPassword());        //...        return SUCCESS;        }    @Override    public User getModle(){        return user;    }}

5.7.4 用传参数的方法给list赋值

login.jsp(表单提交参数),无需使用user.username了

<body>    <!-- 使用action的属性接受参数值 -->    <form action="LoginAction.action" method="post">    用户名:<input type="text" name="username">    密码:<input type="password" name="password">    <!-- 书籍1和2怎么给list赋值呢? -->    书籍1:<input type="text" name="bookList[0]">    书籍2:<input type="text" name="bookList[1]">    <input type="submit" value="提交">    </form></body>
public class LoginAction extends ActionSupport implement ModelDriven<User>{     User user = new User();    public String login() {        System.out.println(user.getUsername());        System.out.println(user.getPassword());        //为集合赋值        System.out.println(user.getBookList.get(0));        System.out.println(user.getBookList.get(1));        //...        return SUCCESS;        }    @Override    public User getModle(){        return user;    }}

5.7.5 当list集合里面放的是对象时

书籍1:<input type="text" name="bookList[0].username">书籍2:<input type="text" name="bookList[1].username">
System.out.println(user.getBookList().get(0).getUsername());        System.out.println(user.getBookList().get(1).getUsername());

5.8 处理结果类型

这里写图片描述
这里写图片描述
这里写图片描述

5.8.1 input结果

这里写图片描述
这里写图片描述
这里写图片描述

5.8.2 局部结果与全局结果

这里写图片描述
这里写图片描述
这里写图片描述

5.8.3 type属性

这里写图片描述
这里写图片描述
这里写图片描述

0 0
原创粉丝点击