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. lambda表达式格式以及应用场景?

    lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. add = lambda x, y : x+y print(add(1,2)) # 结果为3 应 ...

  2. 雅克比(Jacobi)方法

    可以用来求解协方差矩阵的特征值和特征向量. 雅可比方法(Jacobian method)求全积分的一种方法,把拉格朗阶查皮特方法推广到求n个自变量一阶非线性方程的全积分的方法称为雅可比方法. 雅克比迭 ...

  3. 使用rbenv 进行ruby 多版本的管理

    今天需要安装一个ruby 包,但是ruby 版本过低,以前使用过rvm,但是在安装rvm 的时候发现系统有异常 错误信息,发现还有另外一个不错的可选工具 rbenv 安装 我是mac 系统 使用bre ...

  4. 洛谷 P1522 牛的旅行 Cow Tours 题解

    P1522 牛的旅行 Cow Tours 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不 ...

  5. 【JZOJ6227】【20190621】ichi

    题目 $n , m ,d,x\le 10^5 , $强制在线 题解 对原树做dfs,得到原树的dfs序 对kruksal重构树做dfs,得到重构树的dfs序 那么就是一个三维数点问题 强制在线并且卡空 ...

  6. #C++初学记录(动态规划 被3整除的子序列)

    原题:牛客网 动态规划dynamic programming 的入门级题目 题目描述 : 给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模 输入描述: 输入一 ...

  7. tensorflow到底难不难写

    发信人: xhsoldier01 (风大人), 信区: ITExpress 标 题: Re: 没有GPU,tensorflow,AI公司都得死掉 发信站: 水木社区 (Thu Oct 10 20:25 ...

  8. 如何在真实串口驱动还未加载的情况下调试uboot?

    1. 先找出真实串口是什么型号 1.1 怎么找?笔者提供两种方案: 方案一: 若当前的板子支持dm,从uboot的dts找串口节点对应的compatible属性 方案二: 从linux内核的dts找串 ...

  9. 如何连接到远程windows服务器

    在学习和工作中,有些时候我们需要连接到远程服务器,这里,我来演示如何连接到windows服务器. 1. 首先利用快捷键win+r打开运行,或者在搜索框搜索“运行”,然后在运行框输入mstsc,点击确定 ...

  10. servlet的session的生命周期

    谈到javaweb首先想到的就是servlet,说道servlet就会想到servlet的生命周期 说道servlet的生命周期 就绕不过servlet的三个方法init service destro ...