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. Wiki with Herbal Medicine

    Problem H. Wiki with Herbal MedicineInput file: standard input Time limit: 1 secondOutput file: stan ...

  2. for循环计算

    计算0-100之间所有偶数的和: var a = 0 ; //声明一个变量 for (var i = 0; i<100 ; i++){ //起始条件 判断条件 结束条件 if (i%2===0) ...

  3. P5589 【小猪佩奇玩游戏】

    这题还是比较妙妙套路的,复杂度为\(O(log^2N)\),可以卡掉\(\sqrt n\)的做法 首先我们可以把原数列分成很多个集合,集合之间肯定是两两独立的,考虑分别计算答案 我们定义\(f_i\) ...

  4. 洛谷P1799 数列[NOI导刊]

    题目 dp状态定义的好题,初看这个题其实并不好想到他的状态,但是可以根据状态的定义,需要满足最优子结构.还有比较重要的一点就是方便转移方程. 首先我们定义dp[i]表示前i个数所能得到的最多个数,发现 ...

  5. java学习笔记(4)运算符

    java中的运算符分为以下几种: 算数运算符 +.-.*./.++.--.% 关系运算符 <.<=.>.>=.==.!= 布尔运算符 &&.||.&.| ...

  6. docker不能正常使用cron任务

    基于centos7的docker不能正常使用cron任务问题 修改docker centos7镜像对应的容器的/etc/pam.d/crond文件 把required 修改成sufficient,如下 ...

  7. 搭建Portainer可视化界面

    1.下载Portainer镜像 docker pull portainer/portainer 2.安装分为单机版及集群版 2.1单机版安装 docker run -d -p 9000:9000 \- ...

  8. 通过Zabbix监控Tomcat单机多实例

    前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...

  9. Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!

    之前栈长分享过 Java 8 一系列新特性的文章,其中重点介绍了 Stream. 获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:j ...

  10. python unittest套件加载用例时,出现No tests were found,Empty test suite

    错误信息: 之前运行好好的脚本,突然报No tests were found,Empty test suite,详情错误信息如下所示: Launching pytest with arguments ...