Struts2总结1

来源:互联网 发布:mac 照片 文件夹 编辑:程序博客网 时间:2024/06/05 00:19

Struts2总结(一)

Struts2框架简介

  • Struts2框架应用在web层框架
  • struts2框架在struts1和webwork框架的基础上发展的全新的框架(全新)
  • struts2解决问题:
    s

入门案例:

下载Struts2的开发包

Struts2的官网: http://struts.apache.org
apache struts2

导入jar包:

1.解压 struts-2.3.24-all.zip

打开:

这里写图片描述

可以将struts2-blank.war改名为struts2-blan-rar,再用压缩文件打开
这里写图片描述

拷取下列文件:

web.inf

创建action类

package com.heima;public class HelloAction {    //默认执行的方法.    public String execute(){        return "ok";    }}

配置action访问地址

配置action访问地址:

1.配置核心配置文件

2.配置模块配置文件,随类的位置配置.这种模式叫:分模块配置.

只需要将模块配置文件引入核心配置文件.

  • 其必须配置的核心配置文件
    • 1.名称和位置固定(位置必须在src下面,名称必须是struts.xml)
    • 类似于servlet进行配置

引入DTD约束

<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd">

其中struts为根标签,很多申明的前面都是根标签:

完整配置:

<?xml version="1.0" encoding="UTF-8"?><!-- 引入dtd约束 --><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <package name="demo1" extends="struts-default" namespace="/">        <action name="hello" class="" type="dispatcher">  <!--typle: dispatcher ,redirect(重定向),redirectAction(重定向到Action)-->            <result name="ok">/hello.jsp</result>        </action>    </package></struts>
struts2中标签的介绍:

package : 配置action访问地址,首先必须写package标签

  • name属性:
    • package标签用于区别不同的action
    • 在一个配置文件中,可以写多个package标签,但是多个package标签的name属性值不能相同.
  • extends属性:
    • extends属性的值是固定的,必须是struts-default
    • 写了这个值后,package标签里面的类具有action功能.
  • namespace属性:
    • 与action标签中的name属性值构成访问路径名称

action标签:

必须写在package标签里面,一个package标签里面可以写多个action,但属性值不能相同

  • name
    • 其他的name名字不能相同.
  • class属性
    • action类的全路径
  • method属性:让action里面的不同的方法执行
    • 默认为execute.
    • 也可以写自己在action类中定义的方法,或action访问路径.

result标签:

  • name :和action类中的方法返回值对应
  • type属性:表示如何到路径中(掌握)
    • 默认值: dispatcher ,转发
    • redirect,重定向
    • chain:不要,转发到action类
    • redirectAction:重定向到action里面.
分模块配置
<include file="全路径"></include>如:com/heima/...../xxx.xml

配置struts2过滤器

在web.xml中配置.

可以打开先前我们解压打开的文件找到web.xml
12
拷贝其中关于过滤器的配置.

 <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>

web.xml

将项目发布到tomcat中,

访问:http://localhost:8080/struts2_day01/hello.action

local

Action编写方式:

第一种:创建普通类的方式

public class HelloAction{    public String execute(){      return null;    }}

第二方式:创建类,实现接口

public class HelleAction implements Action{    public String execute() throws Exception{      return null;    }}

第三种方式:创建类,继承ActionSupport类

建议使用这种方式,常用的方式.

public class HelleAction extends ActionSupport{}//ActionSupport implements Action;

访问Action的方法:

1.使用action标签属性 method

在method属性值写 执行的action方法名称.

<action name="login" class="com.heima.FramAction">    <result name="ok">/hello.jsp</result></action>

2.使用 通配符方式访问

    <action name="User_*" class="com.heima.FramAction" method="{1}" >          <!--*可以匹配任何方法,{1}代表的是* -->            <result name="ok">/hello.jsp</result>      <!--此处的ok对应方法中的ok-->            <result name="update">/hello.jsp</result>        </action>
//在java--action类中的配置public String login(){        return "ok";    }

Struts2常量配置修改:

第一种:在struts.xml中配置

在struts.xml进行配置,其默认的字符编码集为UTF-8如: <constant name ="struts.i18n.encoding" value="UTF-8"></constant>

第二种:在src下创建struts.properties

进行配置

src

第三种: 在web.xml中配置:

webxml

Action获取表单数据

request方式:(两种)

ActionContext类获取表单数据

package com.heima;import java.util.Map;import org.apache.catalina.tribes.util.Arrays;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class FramActionDemo01 extends ActionSupport {    public String login(){      //1 获取对象,调用对象里面的方法得到表单数据        Map<String, Object> map = ActionContext.getContext().getParameters();        for(String s:map.keySet()){            //根据key得到value            Object[] obj = (Object[]) map.get(s);            System.out.println(s+"---"+Arrays.toString(obj));        }        return "ok";    }}

ServletActionContext类获取表单数据

package com.heima;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FramActionDemo01 extends ActionSupport {    public String login(){        // 1 调用方法获取request对象        HttpServletRequest request = ServletActionContext.getRequest();        //2 调用request的方法得到表单数据        String username = request.getParameter("username");        String password = request.getParameter("password");        System.out.println(username+"--"+password);        return "ok";    }}//request域        //1 得到request对象//      HttpServletRequest request = ServletActionContext.getRequest();//      request.setAttribute("req", "value");//      //      //session域//      request.getSession().setAttribute("sess", "value");//      //      //servletcontext域//      //1 获取到//      ServletActionContext.getServletContext().setAttribute("context", "value");

Struts2封装获取表单

属性封装

//1 可以在action成员变量位置定义变量,把表单提交数据封装到变量里面//2 实现步骤//(1)在action成员变量位置定义变量,变量名称规范:和表单输入项name属性值一样//(2)生成变量的set和get方法package com.heima;import com.opensymphony.xwork2.ActionSupport;public class FramActionDemo01 extends ActionSupport {    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(){        System.out.println(username+"--"+password);        return "ok";    }}

模型驱动封装

//创建实体类对象    //要求: 实体类属性名称 必须 和表单输入项name属性值一样package com.heima;import com.heima.entity.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class FramAction extends ActionSupport implements ModelDriven<User> {    private User user=new User();   //这里一定要new对象,不然是获取不到数据    public User getUser() {        return user;    }    @Override    public User getModel() {        return user;    }    public String login(){        System.out.println(user);        return "ok";    }}

表达式封装

配置表单:

form

编写action获取数据

package com.heima;import com.heima.entity.User;import com.opensymphony.xwork2.ActionSupport;public class FramActionDemo01 extends ActionSupport {  //1 声明实体类类型变量   private User user;  //2 生成变量get和set方法    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    public String login(){        System.out.println(user.getUsername()+"--"+user.getPassword());        return "ok";    }}

封装数据到list,map集合

package cn.itheima.form;import java.util.Map;import com.opensymphony.xwork2.ActionSupport;/** * 封装数据到list集合 * @author asus * */public class ListAction extends ActionSupport {    //1 定义List集合类型变量//  private List<User> list;//  //  public List<User> getList() {//      return list;//  }////  public void setList(List<User> list) {//      this.list = list;//  }    //2.封装数据到map集合    private Map<String,User> map;    public Map<String, User> getMap() {        return map;    }    public void setMap(Map<String, User> map) {        this.map = map;    }    public String execute() throws Exception {        System.out.println(map);        return "list";    }}

表单:

list集合表单

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <form action="${pageContext.request.contextPath }/list.action" method="post">        <!-- list[0]表示list中第一个user对象 -->        username: <input type="text" name="list[0].username"/>        <br/>        password: <input type="text" name="list[0].password"/>        <br/><br/>        username: <input type="text" name="list[1].username"/>        <br/>        password: <input type="text" name="list[1].password"/>        <br/>        <input type="submit" value="提交"/>    </form></body></html>

map表单

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <form action="${pageContext.request.contextPath }/list.action" method="post">        <!-- map['one']: 向map集合中设置key,key名称是one -->        username: <input type="text" name="map['one'].username"/>        <br/>        password: <input type="text" name="map['one'].password"/>        <br/><br/>        username: <input type="text" name="map['abcd'].username"/>        <br/>        password: <input type="text" name="map['abcd'].password"/>        <br/>        <input type="submit" value="提交"/>    </form></body></html>
0 0
原创粉丝点击