Struts学习笔记--(一)Struts基础

本文为how2java Struts教程的学习笔记,原教程链接如下:http://how2j.cn/k/struts/struts-jsp/55.html

Hello Struts

Struts2 是基于MVC的WEB框架。

用到的jar包

将下面jar包复制到WEB-INF/lib目录下。

这里写图片描述

新建web.xml

新建项目后,在WEB-INF目录下新建web.xml,其中配置了一个 Filter, 所有的请求都被过滤给了这个 Filter:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

<web-app>
    <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>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>        
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

配置struts.xml

src目录下创建一个struts.xml文件,这是最简单的struts.xml配置。其效果是当访问index路径的时候,服务端跳转到index.jsp。

<?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="basicstruts" extends="struts-default">

    <action name="index">
      <result>index.jsp</result>
    </action>    

  </package>
</struts>

创建index.jsp

web目录下创建index.jsp:

Hello Struts2 World

部署Tomcat

部署在Tomcat中,重启tomcat,然后访问http://localhost:8080/index,观察效果

这里写图片描述

原理图

这里写图片描述

  • 所有的访问都会被web.xml中配置的Struts 的 Filter所拦截。
  • 拦截之后,就进入struts的工作流程。
  • 访问的地址是/index,按照 struts.xml中的配置,服务端跳转到index.jsp。
  • 显示index.jsp的内容。

显示数据到JSP

创建Product POJO用于存放数据

Model层使用一个简单的Product用于存放数据:

package com.how2java.bean;

public class Product {

    int id;
    String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

创建ProductAction控制类

package com.how2java.action;

public class ProductAction {
    private Product product;

    public String show() {
        product = new Product();
        product.setName("iphone7");
        return "show";
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }
}

在struts.xml中配置跳转

该配置表示访问路径/showProduct時会调用 ProductAction 类的 show 方法,服务端跳转到show.jsp

<?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="basicstruts" extends="struts-default">

    <action name="showProduct" class="com.how2java.action.ProductAction" method="show">
      <result name="show">show.jsp</result>
    </action>    

  </package>  
</struts>

action标签内的<result name="show">对应ProductAction内show()方法的返回值”show”。一个方法可以根据情况返回不同的返回值,从而转向不同的页面(见补充的例子)。

show.jsp

在web目录下创建show.jsp文件。通过EL表达式,取出product的name。

<%@page isELIgnored="false"%>
${product.name}
  • ${product}会访问对应的Action的 getProduct()方法。
  • 严格地说,是Struts通过getProudct()方法返回product对象,然后再把product对象通过request.setAttribute(“product”,product) 放在”product” 这个key上,这样就方便EL表达式去取出来了。

测试

重启tomcat 访问http://localhost:8080/showProduct观察效果:

这里写图片描述

原理图

这里写图片描述

  1. 访问路径 /showProduct
  2. 所有访问都被struts的filter所拦截,并进入struts的工作流程
  3. 根据配置文件struts.xml, 会执行ProductAction的show方法
  4. 在show方法中,将实例属性product指向一个新的对象,并设置名称为iphone7
  5. 服务端跳转到show.jsp
  6. 在show.jsp中,访问ProductAction.getProduct() 获取实例属性product,并显示其名称iphone7

补充:实现一个访问路径转向多个页面

ProductAction内新增方法:

public String randomReturn(){
    if(Math.random()<0.5){
        return "1";
    }else{
        return "2";
    }
}

修改struts.xml:

<action name="testRandom" class="com.how2java.action.ProductAction" method="randomReturn">
    <result name="1">1.jsp</result>
    <result name="2">2.jsp</result>
</action>

新增1.jsp和2.jsp,重启Tomcat,输入http://localhost:8080/testRandom,不断刷新可以发现有时跳转到1.jsp有时跳转到2.jsp。

提交数据到ACTION

上一节讲述如何将数据从Action传到JSP,这一节讲述如何将数据从JSP提交到Action。

创建addProduct.jsp提交表单

最简单的提交数据的form(先用英文,中文问题之后讲解)

<html>
<form action="addProduct">
  <input type="text" name="product.name">
    <br/>
  <input type="submit" value="submit">
</form>
</html>

配置struts.xml

为addProduct路径配置对应的action和方法以及返回

  ...
  <action name="addProduct" class="com.how2java.action.ProductAction" method="add">
    <result name="show">show.jsp</result>
  </action> 
  ...

ProductAction增加add方法

public String add(){
    System.out.println("product.name:"+product.getName());
    return "show";
}

在addProduct.jsp中提交数据的field是product.name,Struts会自动调用对应的Action的setProduct(Product product)方法进行数据的注入。所以ProductAction必须提供setProduct(Product product)方法。在执行到add()方法的时候,jsp传过来的name已经被注入进了product的name中了。

测试

重启tomcat 访问http://localhost:8080/addProduct.jsp

这里写图片描述

点击submit:
这里写图片描述

原理图

这里写图片描述

  1. 访问路径 /addProduct
  2. 所有访问都被struts的filter所拦截,并进入struts的工作流程
  3. 根据配置文件struts.xml, 会执行ProductAction的add方法
  4. 在add方法执行之前,Struts生成一个新的product对象,并把页面传递过来的name设置在该对象上,接着把该对象通过setProduct()方法,注入ProductAction
  5. 服务端跳转到show.jsp
  6. 在show.jsp中,访问ProductAction.getProduct() 获取注入的product,并显示其名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值