邪恶小代码

导航

Struts2学习第一天——struts2基本流程与配置

struts2框架

  • 什么是框架,框架有什么用?

    • 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率。
    • 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实现 ?
  • 什么是struts2框架,它有什么用?

    • Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
    • 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心
    • struts2=struts1+webwork;
    • struts2框架是apache产品。
    • struts2是一个标准的mvc框架。
    • javaweb中的model2模式就是一个mvc模式。 model2=servlet+jsp+javaBean
    • struts2框架只能在javaweb开发中使用的。
    • 使用struts2框架,可以简化我们的web开发,并且降低程序的耦合度。
  • XWork—它是webwork核心,提供了很多核心功能:

    • 前端拦截机(interceptor)
    • 运行时表单属性验证
    • 类型转换
    • 强大的表达式语言(OGNL – the Object Graph Navigation Language)
    • IoC(Inversion of Control反转控制)容器等
  • 类似于struts2框架的产品 :

    • struts1 webwork jsf springmvc
    • ssh—struts2 spring hibernate
    • ssi—springmvc spring ibatis
  • Strust2 核心功能

    • 允许POJO(Plain Old Java Objects)对象 作为Action
    • Action的execute 方法不再与Servlet API耦合,更易测试
    • 支持更多视图技术(JSP、FreeMarker、Velocity)
    • 基于Spring AOP思想的拦截器机制,更易扩展
    • 更强大、更易用输入校验功能
    • 整合Ajax支持

struts2快速入门

    • index.jsp——>HelloServlet——–>hello.jsp web开发流程.
    • index.jsp——>HelloAction———>hello.jsp struts2流程

    • Struts2的下载和安装

    • struts2的目录结构:

      • apps: 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的;例子程序war后缀表示web压缩文件
      • docs : 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等
      • lib : 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库
        • 开发时没必要将lib目录下jar文件全部复制到项目中
      • src : 该文件夹下包含了Struts2框架的全部源代码
        • core 它是struts2的源代码
        • xwork-core struts2底层使用了xwork,xwork的源代码
    • 1.导入jar包

      • 下载struts2的jar包 struts-2.3.15.1-all 版本.
    • Struts运行必要jar包
      • struts2-core-2.3.1.1.jar:Struts 2框架的核心类库
      • xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xwork
      • ognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
      • freemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写
      • commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志,包来支持Log4J和JDK 1.4+的日志记录。
      • commons-fileupload-1.2.2.jar: 文件上传组件,2.1.6版本后需要加入此文件
      • commons-io-2.0.1.jar:传文件依赖的jar包
      • commons-lang-2.5.jar:对java.lang包的增强
      • asm-*.jar :类似javassits
      • log4j-1.2.17:日志类库
      • 开发中为了方便导入,可以使用app/struts2-blank.war 携带jar包
    • 注意:在struts2开发,一般情况下最少导入的jar包,去apps下的struts2-blank示例程序中copy。将war后缀改为rar后解压。

      • 2.创建index.jsp,hello.jsp页面

        • 在index.jsp (发起请求页面)
          • <a href="${pageContext.request.contextPath}/hello">第一次使用struts2</a>
        • hello.jsp (结果页面)
          • <h1>你好,Struts2<h1>
        • 结果页面显示 struts2框架访问成功
      • 3.对struts2框架进行配置

        • 1.web.xml文件中配置前端控制器(核心控制器)—–就是一个Filter
          • 目的:是为了让struts2框架可以运行。
          • 过滤器配置/* , 但是struts2 默认处理.action结尾请求,分发到相应Action类
              <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>
    • * 2.创建一个struts.xml配置文件 ,这个是struts2框架配置文件。
          * 目的:是为了struts2框架流程可以执行。
          * 名称:struts.xml
          * 位置:src下(classes下)
      • 自动配置  struts-2.3.30--->Apps--->struts2-blank---->tomcat--->webapps根目录下

        启动tomcat将自动配置

        webapps--->struts2-blank-->web

      • 4.创建一个HelloAction类
        • 要求,在HelloAction类中创建一个返回值是String类型的方法,注意,无参数。
      public class HelloAction {
          public String say(){
              System.out.println("hello world");
              return "good"; // 结果页面命名
          }
      }
      • struts2 的Action类似以前编写的Servlet程序,可以处理用户提交请求,但是Struts2的Action可以POJO对象

      • 5.在struts.xml文件中配置HelloAction

          <package name="default" namespace="/" extends="struts-default">
              <action name="hello" class="cn.itcast.action.HelloAction"
                  method="say">
                  <result name="good">/hello.jsp</result>
              </action>
          </package>
      • 6.在index.jsp中添加连接,测试
        • <a href="${pageContext.request.contextPath}/hello">第一次使用struts2</a>
        • 在地址栏中输入:http://localhost/struts2_day01/index.jsp 访问连接,就可以看到
        • HelloAction类中的say方法执行了,也跳转到了hello.jsp.

      Struts2 处理流程

      • 对入门程序进行流程分析

       方法的返回字符串和result结果对应关系:

      Action类的result和方法中return结果对应,如果有一个返回结果,对应配置一个result标签,如果有两个返回结果,需要配置两个标签。result标签的name值要和方法中返回的字符串一致。

   Action接收用户上传参数的方式有三种

      1.属性方式接收参数

      2.JavaBean方式接收参数

      3.ModelDriven方式接收参数

    其中属性方式接收参数的方法是在Action中定义私有的成员变量来接受客户端上传的参数。注意上传页面参数名必须与Action中定义的属性名一致,且需为成员变量定义

    getter和setter方法

    1.属性方式接收

    • 代码演示
    • reg.jsp和 show.jsp
  <form method="post" action="UserAction.action">
        姓名:<input type="text" name="uname"/><br/>
        密码:<input type="password" name="upwd"/><br/>
        <select name="sex">
            <option value="1"></option>
            <option value="0"></option>
        </select>
        <input type="submit" value="登陆">
    </form>

 

 

<h1>用户填写信息</h1>
    <h4>用户名:${uname}</h4>
    <h4>密码:${upwd}</h4>
    <h4>性别:${sexName}</h4>

 

 UserAction     

 1 public class UserAction implements Action {
 2     //Action的属性,1.封装参数信息(属性名与参数名相同)
 3     private String uname;
 4     private String upwd;
 5     private int sex;
 6     
 7     //2.保存业务执行的数据,Action的属性自动存储在request范围内
 8     private  String sexName;
 9     
10     @Override
11     public String execute() throws Exception {
12         // TODO Auto-generated method stub
13         System.out.println(uname+"  "+upwd+"  "+sex);
14         //调用业务逻辑
15         sexName=(sex==1?"男":"女");
16         //保存数据,业务数据保存到Action
17         
18         //返回结果字符串
19         return "show";
20     }
21     public String getUname() {
22         return uname;
23     }
24     public void setUname(String uname) {
25         this.uname = uname;
26     }
27     public String getUpwd() {
28         return upwd;
29     }
30     public void setUpwd(String upwd) {
31         this.upwd = upwd;
32     }
33     public int getSex() {
34         return sex;
35     }
36     public void setSex(int sex) {
37         this.sex = sex;
38     }
39     public String getSexName() {
40         return sexName;
41     }
42     public void setSexName(String sexName) {
43         this.sexName = sexName;
44     }

 

 

2.JavaBean方式接收参数的Action代码

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

提交参数的页面代码

    <TD class=field>用 户 名:</TD>
    <TD>
    <INPUT id="user_name" class="text" type="text" name="user.uname"> </TD></TR>
  <TR>
    <TD class=field>密  码:</TD>
    <TD><INPUT id="user_password" class="text" type="password" name="user.upwd"> </TD></TR>

 

 这段代码中name="user.uname"代表文本框的内容由Action中user对象的uname属性接收。

在JSP页面中,可以使用<s:property value="user.uname"/>输出Action中user对象的uname属性的值,其他属性输出同理。

 

3.ModelDriven方式接收参数

在Action中实现ModelDriven接口来接收客户端上传的参数。这种方法仍然需要实体类User,它的运行过程是:Struts2调用ModelDriven接口中的getModel()方法,取得Action中的user对象,再把上传的用户名,密码存入user对象

public class UserAction implements ModelDriven{
    private User user=new user();
    @Override
    public User getModel(){
          return user;
   }  
   public String execute(){
         return "success";      
   }        
}

UserAction类中的User对象user用来接收用户名、密码。getModel()是ModelDriven接口中定义的方法,它提供了类外部对user对象的访问。

提交参数的页面代码:

<form action="login" method="post">
      用户名:<input type="text" name="userName"><br/>
      密码:<input type="password" name="password"><br/>
      <input type="submit" value="登陆">
  </form>

ModelDriven方式接收参数的页面代码中。提交参数名不需要加对象名,如name="userName"。

ModelDriven方式接收参数使用不多,但它使用了一种先进的编程思想:控制反转(Inversion of Control,IoC)或依赖注入。在登陆的例子中UserAction的成员user是由其他类来初始化的,这种方式分离了初始化对象和使用对象的代码,使得类的职责更加单一明确,降低了耦合度。

posted on 2017-02-25 22:22  邪恶小代码  阅读(262)  评论(0编辑  收藏  举报