JavaWeb框架————Struts2(二)

1、结果跳转方式
这里写图片描述
配置文件struts.xml(src下的)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!--常量配置方式二  -->
    <!--i18n:国际化,解决post提交乱码-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 指定访问action时的后缀名为.do或空
        http://localhost:8080/struts2_1/hello/HelloAction.do
    -->
    <constant name="struts.action.extension" value="do,,"></constant>
    <!-- 指定struts2是否以开发模式运行
        1、热加载主配置文件(不需要重启即可生效)
        2、提供更多错误信息输出,方便开发时调试
     -->
    <constant name="struts.devMode" value="false"></constant>

    <!-- package:将Action配置封装,就是可以在Package中配置很多action
        name属性:给包起个名字,起到标识作用,随便起,不能与其他包名重复
        namespace属性:给action的访问路径中定义一个命名空间
        extends属性:继承一个指定包
        abstract属性:包是否为抽象的,标识属性,标识该包不能独立运行,专门呢被继承
         -->
    <package name="result" namespace="/" extends="struts-default">
        <!-- action元素:配置action类
            name属性:决定了Action访问资源名
            class属性:action的完整类名
            method属性:指定调用Action中的哪个方法来处理请求
         -->
         <!-- 转发 -->
        <action name="Demo1Action" class="cn.ctgu.result.Demo1Action" method="execute">
            <result name="success" type="dispatcher">/hello.jsp</result>
        </action>

        <!-- 重定向 -->
        <action name="Demo2Action" class="cn.ctgu.result.Demo2Action" method="execute">
            <result name="success" type="redirect">/hello.jsp</result>
        </action>
        <!--转发到action,地址栏不会变化  -->
        <action name="Demo3Action" class="cn.ctgu.result.Demo3Action" method="execute">
            <result name="success" type="chain">
            <!--action的名字  -->
            <param name="actionName">Demo1Action</param>
            <!--action所在的命名空间  -->
            <param name="namespace">/</param>
            </result>
        </action>

        <!--重定向到action  -->
        <action name="Demo4Action" class="cn.ctgu.result.Demo4Action" method="execute">
            <result name="success" type="redirectAction">
            <!--action的名字  -->
            <param name="actionName">Demo1Action</param>
            <!--action所在的命名空间  -->
            <param name="namespace">/</param>
            </result>
        </action>

    </package>

    <!-- 引入其他struts配置文件 -->
    <include file="cn/ctgu/api/struts.xml"></include>
    <include file="cn/ctgu/param/struts.xml"></include>

</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Struts2_2</display-name>
  <!-- 配置常量方法三 -->
  <!-- <context-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>utf-8</param-value>
  </context-param> -->

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

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Demo1Action.java(转发)

package cn.ctgu.result;

import com.opensymphony.xwork2.ActionSupport;

public class Demo1Action extends ActionSupport{

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("Demo1Action start");
        return SUCCESS;
    }

}

Demo2Action.java(重定向)

package cn.ctgu.result;

import com.opensymphony.xwork2.ActionSupport;

public class Demo2Action extends ActionSupport{

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }

}

Demo3Action.java(转发到action)

package cn.ctgu.result;

import com.opensymphony.xwork2.ActionSupport;

public class Demo3Action extends ActionSupport{

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("Demo3Action start");
        return SUCCESS;
    }

}

Demo4Action.java(重定向到action)

package cn.ctgu.result;

import com.opensymphony.xwork2.ActionSupport;

public class Demo4Action extends ActionSupport{

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("Demo4Action start");
        return SUCCESS;
    }

}

2、Struts2访问Servlet的API
这里写图片描述
这里写图片描述
配置文件struts.xml

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

    <package name="api" namespace="/" extends="struts-default">
        <!-- action元素:配置action类
            name属性:决定了Action访问资源名
            class属性:action的完整类名
            method属性:指定调用Action中的哪个方法来处理请求
         -->
         <!-- 转发 -->
        <action name="Demo5Action" class="cn.ctgu.api.Demo5Action" method="execute">
            <result name="success" type="dispatcher">/api.jsp</result>
        </action>

    </package>

</struts>

Demo5Action.java(访问Servlet方式一)

package cn.ctgu.api;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Demo5Action extends ActionSupport{
    @Override
    public String execute() throws Exception {
        //request域=>map(Struts2并不推荐使用原生request域)
        //不推荐
        /*Map<String,Object>requestScope=(Map<String,Object>)ActionContext.getContext().get("request");
        requestScope.put("name", "requestTom");*/
        //推荐
        ActionContext.getContext().put("name", "requestTom");
        // session域=》map
        Map<String,Object>sessionScope=ActionContext.getContext().getSession();
        sessionScope.put("name", "sessionTom");
        //application域=》map
        Map<String,Object>applicationScope=ActionContext.getContext().getApplication();
        applicationScope.put("name", "applicationTom");

        return SUCCESS;
    }
}

Demo6Action.java(访问Servlet方式二)

package cn.ctgu.api;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
//如何在action中获得原生ServletAPI,不推荐
public class Demo6Action extends ActionSupport{
    @Override
    public String execute() throws Exception {
        //原生request
        HttpServletRequest request=ServletActionContext.getRequest();
        //原生session
        HttpSession session=request.getSession();
        //原生response
        HttpServletResponse response=ServletActionContext.getResponse();
        //原生servletContext
        ServletContext servletContext=ServletActionContext.getServletContext();

        return SUCCESS;
    }
}

Demo7Action.java(获得Servlet方式三)

package cn.ctgu.api;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
//如何在action中获得原生ServletAPI
//获得request就实现ServletRequestAware接口,获得response就实现ServletResponseAware,.....
public class Demo7Action extends ActionSupport implements ServletRequestAware{
    private HttpServletRequest request;
    @Override
    public String execute() throws Exception {
        //
        System.out.println("原生request:"+request);
        return SUCCESS;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        // TODO Auto-generated method stub
        this.request=request;
    }
}

api.jsp

<%@ 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>
    request:${requestScope.name }<br/>
    session:${sessionScope.name }<br/>
    application:${applicationScope.name }<br/>
</body>
</html>

3、获得参数
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
配置文件struts.xml

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

    <package name="param" namespace="/" extends="struts-default">
        <!-- action元素:配置action类
            name属性:决定了Action访问资源名
            class属性:action的完整类名
            method属性:指定调用Action中的哪个方法来处理请求
         -->
         <!-- 转发 -->
        <action name="Demo8Action" class="cn.ctgu.param.Demo8Action" method="execute">
            <result name="success" type="dispatcher">/form1.jsp</result>
        </action>
        <action name="Demo9Action" class="cn.ctgu.param.Demo9Action" method="execute">
            <result name="success" type="dispatcher">/form2.jsp</result>
        </action>
        <action name="Demo10Action" class="cn.ctgu.param.Demo10Action" method="execute">
            <result name="success" type="dispatcher">/form3.jsp</result>
        </action>
        <action name="Demo11Action" class="cn.ctgu.param.Demo11Action" method="execute">
            <result name="success" type="dispatcher">/form4.jsp</result>
        </action>
    </package>

</struts>

Demo8Action.java(获得参数方式一)

package cn.ctgu.param;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

//Struts如何获得参数
public class Demo8Action extends ActionSupport{
    //第一种方式:只需要准备与参数键名相同的属性即可

    public Demo8Action() {
        super();
        System.out.println("demo8Action 创建了");//Action是线程安全的,每次访问都会创建一个新的实例
    }
    private String name;
    //自动类型转换 只能转换8大基本数据类型以及对应包装类
    private Integer age;
    //支持特定类型字符串转换为Date,例如yyyy-MM-dd
    private Date birthday;
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("name参数值:"+name+",age参数值是:"+age+",生日:"+birthday);
        return SUCCESS;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

form1.jsp

<%@ 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 }/Demo8Action">
        用户名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        生日:<input type="text" name="birthday"/><br/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

Demo9Action.java(获得参数方式二)

User.java

package cn.ctgu.domain;

import java.util.Date;

public class User {
    private String name;
    private Integer age;
    private Date birthday;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
    }

}
package cn.ctgu.param;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

import cn.ctgu.domain.User;

//Struts如何获得参数
public class Demo9Action extends ActionSupport{
    //第二种方式:准备对象
    //准备User对象
    private User user;
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println(user);
        return SUCCESS;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

}

form2.jsp

<%@ 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 }/Demo9Action">
        用户名:<input type="text" name="user.name"/><br/>
        年龄:<input type="text" name="user.age"/><br/>
        生日:<input type="text" name="user.birthday"/><br/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

Demo10Action.java(获得参数方式三)

package cn.ctgu.param;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.ctgu.domain.User;

//Struts如何获得参数
public class Demo10Action extends ActionSupport implements ModelDriven<User>{
    //第三种方式:模型驱动
    //准备User对象
    private User user=new User();
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println(user);
        return SUCCESS;
    }
    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }

}

form3.jsp

<%@ 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 }/Demo10Action">
        用户名:<input type="text" name="name"/><br/>
        年龄:<input type="text" name="age"/><br/>
        生日:<input type="text" name="birthday"/><br/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

4、集合类型参数封装
这里写图片描述
Demo11Action.java

package cn.ctgu.param;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.ctgu.domain.User;

//Struts2封装集合类型参数
public class Demo11Action extends ActionSupport{

    //list
    private List<String>list;
    //map
    private Map<String,String>map;
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("list:"+list);
        System.out.println("map:"+map);
        return SUCCESS;
    }
    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public Map<String, String> getMap() {
        return map;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }

}

form4.jsp

<%@ 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 }/Demo11Action" method="post">
        list:<input type="text" name="list"/><br/>
        list:<input type="text" name="list[3]"/><br/><!-- 指定存储在集合的位置 -->

        map:<input type="text" name="map['haha']"/><br/><!--将haha作为关键字,填写的内容作为值  -->
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

struts.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!--常量配置方式二  -->
    <!--i18n:国际化,解决post提交乱码-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 指定访问action时的后缀名为.do或空
        http://localhost:8080/struts2_1/hello/HelloAction.do
    -->
    <constant name="struts.action.extension" value="do,,"></constant>
    <!-- 指定struts2是否以开发模式运行
        1、热加载主配置文件(不需要重启即可生效)
        2、提供更多错误信息输出,方便开发时调试
     -->
    <constant name="struts.devMode" value="false"></constant>

    <!-- package:将Action配置封装,就是可以在Package中配置很多action
        name属性:给包起个名字,起到标识作用,随便起,不能与其他包名重复
        namespace属性:给action的访问路径中定义一个命名空间
        extends属性:继承一个指定包
        abstract属性:包是否为抽象的,标识属性,标识该包不能独立运行,专门呢被继承
         -->
    <package name="result" namespace="/" extends="struts-default">
        <!-- action元素:配置action类
            name属性:决定了Action访问资源名
            class属性:action的完整类名
            method属性:指定调用Action中的哪个方法来处理请求
         -->
         <!-- 转发 -->
        <action name="Demo1Action" class="cn.ctgu.result.Demo1Action" method="execute">
            <result name="success" type="dispatcher">/hello.jsp</result>
        </action>

        <!-- 重定向 -->
        <action name="Demo2Action" class="cn.ctgu.result.Demo2Action" method="execute">
            <result name="success" type="redirect">/hello.jsp</result>
        </action>
        <!--转发到action,地址栏不会变化  -->
        <action name="Demo3Action" class="cn.ctgu.result.Demo3Action" method="execute">
            <result name="success" type="chain">
            <!--action的名字  -->
            <param name="actionName">Demo1Action</param>
            <!--action所在的命名空间  -->
            <param name="namespace">/</param>
            </result>
        </action>

        <!--重定向到action  -->
        <action name="Demo4Action" class="cn.ctgu.result.Demo4Action" method="execute">
            <result name="success" type="redirectAction">
            <!--action的名字  -->
            <param name="actionName">Demo1Action</param>
            <!--action所在的命名空间  -->
            <param name="namespace">/</param>
            </result>
        </action>

    </package>

    <!-- 引入其他struts配置文件 -->
    <include file="cn/ctgu/api/struts.xml"></include>
    <include file="cn/ctgu/param/struts.xml"></include>

</struts>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值