Struts2-配置文件result元素

作用:为动作指定结果视图

name属性:逻辑视图的名称,对应着动作方法的返回值。默认值是success

type属性:结果类型,指的就是用什么方式转到定义的页面,默认是dispatcher

result中type的取值有四种类型

dispatcher 默认值使用请求转发,转向一个页面
redirect 使用重定向,转向一个页面
chain 转发到另一个相同名称空间的动作,转发到不同名称空间的动作
redirectAction 重定向到另一个相同名称空间的动作,重定向到不同名称空间的动作

result元素 转发与重定向

dispatcher:是转发到一个页面(jsp)

chain:是转发到一个action

redirect:重定向一个页面

redirectAction:重定向到另一个action

自定义结果类型

上面的重定向,转发都是结果类型

结果类型就是一个类,这些类都是些com.opensymphony.xwork2.Result接口,或者继承自接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport

这些类都有一个doExecute方法,用于执行结果视图,struts的内部实现就是Servlet

自定义验证码结果类型

package com.gyf.web.result;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport; import com.opensymphony.xwork2.ActionInvocation; import cn.dsna.util.images.ValidateCode; public class CAPTCHAResult extends StrutsResultSupport{
private int width;
private int height;
@Override
protected void doExecute(String arg0, ActionInvocation arg1) throws Exception {
//生成验证码
//创建一个验证码对象
ValidateCode code = new ValidateCode(width,height,4,6);
//获取response对象,因为要返回给客户端
HttpServletResponse response = ServletActionContext.getResponse();
code.write(response.getOutputStream());//write方法可以把图片写回给客户端,但是需要一个输出流
}
public int getHeight() {
return height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public void setHeight(int height) {
this.height = height;
} }
<?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>
<!-- 配置开发模式 -->
<constant name="struts.devMode" value="true"></constant> <package name="p1" extends="struts-default" namespace="/n1">
<!--声明一个结果类型 -->
<result-types>
<result-type name="captcha" class="com.gyf.web.result.CAPTCHAResult"></result-type>
</result-types>
<!--配置action -->
<action name="checkcode">
<result type="captcha">
<param name="width">150</param>
<param name="height">60</param>
</result>
</action>
</package>
</struts>

result元素-全局视图和局部视图

Struts2-动作类中的servlet api 访问讲解

第一种方式

package com.gyf.web.action;

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.ActionSupport; public class TestAction extends ActionSupport{
public String test() {
//获取servlet 的api方式
//第一种方式:通过ServletActionContext
//response
HttpServletResponse response = ServletActionContext.getResponse();
//request
HttpServletRequest request = ServletActionContext.getRequest();
//session
HttpSession session = request.getSession();
//application[ServletContext]
ServletContext application = ServletActionContext.getServletContext(); System.out.println(request);
System.out.println(response);
System.out.println(session);
System.out.println(application); //NONE相当于不用跳转页面,也就是相当于不用找result标签,
return NONE;
}
}

第二种方式

package com.gyf.web.action;

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 org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; public class TestAction2 extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
HttpServletResponse response;
HttpServletRequest request;
ServletContext application;
public String test() {
//第二种方式,通过实现接口,让Struts自动注入
System.out.println(request);
System.out.println(response);
System.out.println(application); //NONE相当于不用跳转页面,也就是相当于不用找result标签,
return NONE;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response=response; }
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request; }
@Override
public void setServletContext(ServletContext application) {
this.application=application; }
}

Action接收请求参数

通过Servlet和Action的属性set方法注入获取参数

package com.gyf.web.action;

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.ActionSupport; public class LoginAction extends ActionSupport{
//第二种方式通过属性的set注入
private String username;
private String password; public String login() {
//第一种方式:通过ServletActionContext
//request
// HttpServletRequest request = ServletActionContext.getRequest();
// String username = request.getParameter("username");
// String password = request.getParameter("password"); System.out.println(username);
System.out.println(password);
//NONE相当于不用跳转页面,也就是相当于不用找result标签,
return NONE;
} 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;
} }

第三种方式通过Action的属性的set模型的形式注入

第四种方式通过模型驱动在action里实现一个模型驱动接口

实现步骤:

在action里实现一个模型驱动接口

提供一个模型属性,并一定要赋值

实现原理:是因为有个模型驱动的拦截器在处理,ModelDrivenIngetrceptor,处理过程中给User赋予值

package com.gyf.web.model;

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;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
} }
<%@ 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}/login.action">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" name="登录">
</form> <!-- 第三种方式 -->
<!--
<form action="${pageContext.request.contextPath}/login.action">
用户名<input type="text" name="user.username"><br>
密码<input type="password" name="user.password"><br>
<input type="submit" name="登录">
</form>
-->
</body>
</html>
package com.gyf.web.action;

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.gyf.web.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class LoginAction extends ActionSupport implements ModelDriven<User>{ public String login() { System.out.println(user); return NONE;
}
private User user = new User();
@Override
public User getModel() { return user;
} }

Struts笔记2的更多相关文章

  1. struts笔记

    Struts视频笔记: Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由 为什么会有struts: 因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统 ...

  2. Struts 笔记 内部资料 请勿转载 谢谢合作

    Struts 概述 随着MVC 模式的广泛使用,催生了MVC 框架的产生.在所有的MVC 框架中,出现最早,应用最广的就是Struts 框架. Struts 的起源 Struts 是Apache 软件 ...

  3. Struts笔记5

    文件下载 1.写action类 package com.gyf.web.action; import java.io.File; import java.io.FileInputStream; imp ...

  4. Struts笔记4

    Struts2-拦截器-单个拦截器 自定义拦截器 1.创建一个继承AbstractInterceptor的类 package com.gyf.web.interceptor; import com.o ...

  5. Struts笔记3

    struts标签 form表单标签 Action:请求地址.直接写动作名称,不用写contextPath <s:form action="/user/register.action&q ...

  6. struts笔记1

    框架:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的精力放到业务需求的分析和理解上面 SHH:strust spring hibernate; SSM:springmvc sp ...

  7. Struts笔记二:栈值的内存区域及标签和拦截器

    值栈和ognl表达式 1.只要是一个MVC框架,必须解决数据的存和取的问题 2.struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构 1.  ValueStack是一个接口,在struts ...

  8. Struts笔记一

    Struts 概念: 是一个MVC框架: Servlet的缺点 1.在web.xml中文件中需要配置很多行代码,维护起来很不方便呢,不利于团队合作. 2.一个servlet的入口只有一个doPost或 ...

  9. Struts中的OGNL和EL表达式笔记

    Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1 ...

随机推荐

  1. Xshell远程连接服务器

    Xshell远程连接服务器 打开xshell后找到左上角第一个“文件”点击,弹出来一个下拉框,选择“新建”点击(或者直接按下快捷键“Alt+n”).         点击“新建”之后就会出现下面这样一 ...

  2. vue的ref试用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  3. 小福bbs-冲刺日志(第三天)

    [小福bbs-冲刺日志(第三天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 前端交付部分页面给后端 ,后端开始完成部分功能 作业的正文 ...

  4. PostgreSQL: Rename a User

    Syntax The syntax to rename a user using the ALTER USER statement in PostgreSQL is: ALTER USER user_ ...

  5. graph embedding 之 struc2vec

    在现实的网络中,构成网络的每个节点可能在网络中担任着某种角色.比如社交网络中,经常可以看见一些关注量很高的大V.两个大V在网络中的角色可能相同,因为他们都有很高的关注量:而大V与普通人(仅有几个关注) ...

  6. android: Android水波纹点击效果

    Android API 21及以上新增了ripple标签用来实现水波纹的效果.我们可以通过设置ripple背景来实现一些View点击效果. 该水波纹效果有两种:一种是有界的(点击后类似于一个矩形向四周 ...

  7. for(auto i : v)遍历容器元素

    c++11的新特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素. for(auto i:v) for(auto &i:v) 代码1:#inclu ...

  8. python接入微博第三方API之2接入用户登录和微博发布

    python接入微博第三方API之2接入用户登录和微博发布 # coding=utf-8 import requests import json import MySQLdb from datetim ...

  9. gfs下载文件较大,可以分区域分变量下载

       一.下载 所有字段的GFS预报(大致有325个字段),1度的文件有1G多,0.5度的3.5G左右. 若每天下载0.6.12.18四个发布点的数据,那是很费时费力的.而且经常会被IDS/IPS设备 ...

  10. C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性

    C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性 上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发 ...