02 Struts2框架----学习笔记2(了解一下,已过时)
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(了解一下,已过时)的更多相关文章
- j2ee开发之struts2框架学习笔记
Struts2框架技术重点笔记 1.Struts2 是在webwork基础上发展而来. 2.Struts2 不依赖struts API和 servlet API 3.Struts2提供了拦截器,表现层 ...
- Struts2框架学习笔记--strtus2初识
struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...
- struts2框架学习笔记7:struts2标签
三大标签: 1.JSP:脚本,为了替代servlet,已过时 2.JSTL:标准标签库(core.format.sql.xml),还未淘汰的只有core库 3.Struts2标签库:由Struts2开 ...
- struts2框架学习笔记1:搭建测试
Servlet是线程不安全的,Struts1是基于Servlet的框架 而Struts2是基于Filter的框架,解决了线程安全问题 因此Struts1和Struts2基本没有关系,只是创造者取名问题 ...
- Struts2框架学习笔记1
1,框架概述 1.1,什么是框架(了解) 将一些重复性的代码进行封装,简化程序员的编程操作,可以使得程序员在编码中把更多的精力放到业务需求的分析和理解上面,相当于一个半成品软件. 1.2,三大框架(掌 ...
- struts2框架学习笔记6:拦截器
拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocati ...
- struts2框架学习笔记5:OGNL表达式
OGNL取值范围分两部分,root.Context两部分 可以放置任何对象作为ROOT,CONTEXT中必须是Map键值对 示例: 准备工作: public void fun1() throws Ex ...
- struts2框架学习笔记4:获取参数
第一种参数获取方式: 编写一个前端页面,提交表单,做示例: <form action="${pageContext.request.contextPath}/Demo1Action&q ...
- struts2框架学习笔记3:获取servletAPI
Struts2存在一个对象ActionContext(本质是Map),可以获得原生的request,response,ServletContext 还可以获得四大域对象(Map),以及param参数( ...
随机推荐
- Dubbo源码分析:Serialization
背景 顺序化逻缉处理! 类图 获取Serialization对象时序图 序列化
- Oracle 分区默认segment大小变化(64k—>8M)
原文链接:http://www.cnblogs.com/wcwen1990/p/6656545.html _partition_large_extents和_index_partition_large ...
- springboot的HTTPS配置
- Nodejs中的路径问题
一.path核心模块 ①path.basename(path[,ext])获取一个路径中的文件名 var path=require('path'); console.log(path.basename ...
- 括号匹配(POJ2955)题解
原题地址:http://poj.org/problem?id=2955 题目大意:给出一串括号,求其中的最大匹配数. 我这么一说题目大意估计很多人就蒙了,其实我看到最开始的时候也是很蒙的.这里就来解释 ...
- 干货 | 10分钟掌握branch and cut(分支剪界)算法原理附带C++求解TSP问题代码
00 前言 branch and cut其实还是和branch and bound脱离不了干系的.所以,在开始本节的学习之前,请大家还是要务必掌握branch and bound算法的原理. 01 应 ...
- GWAS Catalog数据库简介
GWAS Catalog The NHGRI-EBI Catalog of published genome-wide association studies EBI负责维护的一个收集已发表的GWAS ...
- Dictionary导致IIS CPU 100%案例分析 学会使用WinDbg工具
.NET 开发注意 线程安全性问题.弄不好可能会导致CPU满载 特别主要 Dictionary作为静态变量使用的情况. 解决方法: Dictionary 换成 ConcurrentDictiona ...
- oracle 19c jdbc之Reactive Streams Ingestion (RSI) Library
19c jdbc新特性 https://blogs.oracle.com/dev2dev/whats-new-in-193-and-183-jdbc-and-ucp jdbc实现直接路径加载 http ...
- [转]JS - Promise使用详解2(ES6中的Promise)
原文地址:https://www.hangge.com/blog/cache/detail_1638.html 2015年6月, ES2015(即 ECMAScript 6.ES6) 正式发布.其中 ...