1.*号通配符优化struts.xml代码

创建一个UserAction的动作类

package action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    //添加用户
public String add(){
return SUCCESS;
}
//删除用户
public String delete(){
return SUCCESS;
}
//更新用户
public String update(){
return SUCCESS;
} //查找用户
public String find(){
return SUCCESS;
} }

Struts.xml文件配置

<!--第一种配置方式-->
<!--<package name="p2" extends="struts-default">
<action name="add" class="action.UserAction" method="add">
<result name="success">/add.jsp</result>
</action> <action name="delete" class="action.UserAction" method="delete">
<result name="success">/delete.jsp</result>
</action> <action name="find" class="action.UserAction" method="find">
<result name="success">/find.jsp</result>
</action> <action name="update" class="action.UserAction" method="update">
<result name="success">/update.jsp</result>
</action>
</package>--> <!--采用通配符的方式-->
<!-- 动作访问之通配符
* :这里是一个*-->
<package name="p2" extends="struts-default">
<action name="*" class="action.UserAction" method="{1}">
<result name="success">/{1}.jsp</result>
</action>
</package>

2.Struts.xml配置文件中的result元素的type取值的四种类型

chain的配置实例:

<1>利用chain转发到同一个包下的不同action

<package name="p3" extends="struts-default">
<action name="hello1" class="action.HelloAction" method="sayHello">
<result name="success" type="chain">hello2</result>
</action> <action name="hello2" class="action.HelloAction2" method="sayHello2">
<result name="success">/hello2.jsp</result>
</action>
</package>

效果图:

<2>利用chain转发到不同包下的不同action

<package name="p3" extends="struts-default">
<action name="hello1" class="action.HelloAction" method="sayHello">
<result name="success" type="chain">hello3</result>
</action> <action name="hello2" class="action.HelloAction2" method="sayHello2">
<result name="success">/hello2.jsp</result>
</action>
</package> <package name="p4" extends="struts-default"> <action name="hello3" class="action.HelloAction3" method="sayHello3">
<result name="success">/hello3.jsp</result>
</action>
</package>

注意:若加上namespace属性,则struts.xml文件的配置应修改为:

<package name="p3" extends="struts-default" namespace="/n3">
<action name="hello1" class="action.HelloAction" method="sayHello">
<result name="success" type="chain">
<param name="namespace">/n4</param>
<param name="actionName">hello3</param>
</result>
</action> <action name="hello2" class="action.HelloAction2" method="sayHello2">
<result name="success">/hello2.jsp</result>
</action>
</package> <package name="p4" extends="struts-default" namespace="/n4"> <action name="hello3" class="action.HelloAction3" method="sayHello3">
<result name="success">/hello3.jsp</result>
</action>
</package>

效果图:

3.动作类中的servlet api访问

通过ServletActionContext获取获取servlet 的api

package 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
//1.response
HttpServletResponse response = ServletActionContext.getResponse(); //2.request
HttpServletRequest request = ServletActionContext.getRequest(); //3.session
HttpSession session = request.getSession(); //4.application【ServletContext】
ServletContext application = ServletActionContext.getServletContext(); //NONE不跳转,也就是不用找result标签
return NONE;
}
}

4.Action接收请求参数的方式

(1)通过request对象

     //获取请求参数
//第一种方法:通过request对象
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
String password = request.getParameter("password"); System.out.println(username);
System.out.println(password);

(2)第2种方式:通过属性的set注入

package action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.RequestWrapper; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username;
private String password; public void setUsername(String username) {
System.out.println("setUsername");
this.username = username;
} public void setPassword(String password) {
System.out.println("setPassword");
this.password = password;
} public String login(){ //获取请求参数
/*//第一种方法:通过request对象
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
String password = request.getParameter("password");*/ System.out.println(username);
System.out.println(password); //第二种方式:通过属性的set注入 //NONE不跳转,也就是不用找result标签
return NONE;
}
}

(3)第3种方式:通过模型驱动(最常用)

创建一个model---->User

package 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 + "]";
} }

动作类代码:

package action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.RequestWrapper; import com.opensymphony.xwork2.ModelDriven;
import model.User;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport implements ModelDriven<User> { private User user = new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
} public String login(){ //获取请求参数
/**
* 第三种方式: 通过模型驱动【最常用】
* 实现步骤:
* 1.在action里实现一个模型驱动接口
* 2.提供一个模型属性,并一定要赋值
* 通过这种方式,在jsp页面中就不用写user.
*
* 这是模型驱动的原理是因为有个模型驱动的拦截器在处理
* 这个类就com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
*/
System.out.println(user); //NONE不跳转,也就是不用找result标签
return NONE;
}
}

控制台输出:

02 Struts2框架----学习笔记2(了解一下,已过时)的更多相关文章

  1. j2ee开发之struts2框架学习笔记

    Struts2框架技术重点笔记 1.Struts2 是在webwork基础上发展而来. 2.Struts2 不依赖struts API和 servlet API 3.Struts2提供了拦截器,表现层 ...

  2. Struts2框架学习笔记--strtus2初识

    struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...

  3. struts2框架学习笔记7:struts2标签

    三大标签: 1.JSP:脚本,为了替代servlet,已过时 2.JSTL:标准标签库(core.format.sql.xml),还未淘汰的只有core库 3.Struts2标签库:由Struts2开 ...

  4. struts2框架学习笔记1:搭建测试

    Servlet是线程不安全的,Struts1是基于Servlet的框架 而Struts2是基于Filter的框架,解决了线程安全问题 因此Struts1和Struts2基本没有关系,只是创造者取名问题 ...

  5. Struts2框架学习笔记1

    1,框架概述 1.1,什么是框架(了解) 将一些重复性的代码进行封装,简化程序员的编程操作,可以使得程序员在编码中把更多的精力放到业务需求的分析和理解上面,相当于一个半成品软件. 1.2,三大框架(掌 ...

  6. struts2框架学习笔记6:拦截器

    拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocati ...

  7. struts2框架学习笔记5:OGNL表达式

    OGNL取值范围分两部分,root.Context两部分 可以放置任何对象作为ROOT,CONTEXT中必须是Map键值对 示例: 准备工作: public void fun1() throws Ex ...

  8. struts2框架学习笔记4:获取参数

    第一种参数获取方式: 编写一个前端页面,提交表单,做示例: <form action="${pageContext.request.contextPath}/Demo1Action&q ...

  9. struts2框架学习笔记3:获取servletAPI

    Struts2存在一个对象ActionContext(本质是Map),可以获得原生的request,response,ServletContext 还可以获得四大域对象(Map),以及param参数( ...

随机推荐

  1. 14-Flutter移动电商实战-ADBanner组件的编写

    拨打电话的功能在app里也很常见,比如一般的外卖app都会有这个才做.其实Flutter本身是没给我们提供拨打电话的能力的,那我们如何来拨打电话那? 1.编写店长电话模块 这个小伙伴们一定轻车熟路了, ...

  2. 13-Flutter移动电商实战-ADBanner组件的编写

    1.AdBanner组件的编写 我们还是把这部分单独出来,需要说明的是,这个Class你也是可以完全独立成一个dart文件的.代码如下: 广告图片class AdBanner extends Stat ...

  3. Java 用Jackson进行json和object之间的转换(并解决json中存在新增多余字段的问题)

    1.添加jackson库 如果是maven工程,需要在pom.xml中添加jackson的依赖: <dependency>      <groupId>com.fasterxm ...

  4. 【POJ1068】Parencodings

    题目传送门 本题知识点:模拟 这是一道恐怖的括号题.题意稍微理解以下还是可以的. 我们针对样例来理解一下 S.P.W 到底是什么意思: S:( ( ( ( ) ( ) ( ) ) ) ) P: \(P ...

  5. Java获取两个指定日期之间的所有月份

    String y1 = "2016-02";// 开始时间 String y2 = "2019-12";// 结束时间 try { Date startDate ...

  6. 牛顿插值法(c++)【转载】

    摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...

  7. SSM项目实战 之 Maven

    目录 Maven 简介 Maven是什么 Maven下载安装 Maven使用 Maven规定了一套默认的项目格式 创建第一个Maven项目 Maven仓库 Maven常用命令 Maven作用范围(sc ...

  8. 第06组 Alpha冲刺(1/4)

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11863075.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  9. 范仁义html+css课程---6、表格

    范仁义html+css课程---6.表格 一.总结 一句话总结: 表格中最常用的元素就是table.tr.td.th,还有语义化的thead.tbody.tfoot标签 1.表格构成三个基本要素? t ...

  10. 监控指标 TP99 TP999 含义

    TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中位数都是一类. TP50.TP90和TP99等指标常用于系统性能监控场景,指高于50%.90%.99%等百分线的情况 ...