02 Struts2框架----学习笔记2(了解一下,已过时)
2024-10-21 16:13:27
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;
}
}
控制台输出:
最新文章
- Java学习之反射机制及应用场景
- 升级python
- AngularJS + Java---前台网页与后台数据库传递数据 基本结构
- Android数据存储-文件操作
- CentOS_PHP_NGINX_FastCGI
- 2015年11月25 Java基础系列(二)Thread Runnable线程初级讲解
- [codeforces 260]B. Ancient Prophesy
- LogHelper拾遗
- JSP Scripting Element
- WWDC2015
- 关于Java Collections API您不知道的5件事,第2部分
- Hashtable和HashMap类
- hibernate环境配置和使用
- (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹
- Android自动化框架介绍
- 一键安装Cloud Torrent
- stylus含有的特性
- (map,c_str())水果 hdu1263
- WeexSDK之注册Modules
- GUI常用对话框3
热门文章
- 修改Tomcat启动窗口的名称(Title)
- 2019-8-26 LinkedHashMap 转 List [java.util.LinkedHashMap cannot be cast to com.zq.dataservice.bean.Index]
- [RN] React Native 使用 react-native-vector-icons 图标显示问号
- 机器学习---三种线性算法的比较(线性回归,感知机,逻辑回归)(Machine Learning Linear Regression Perceptron Logistic Regression Comparison)
- 51、Spark Streaming之输入DStream和Receiver详解
- Android入门教程(五)
- [USACO5.1]二维凸包模板
- 面试问我 Java 逃逸分析,瞬间被秒杀了。。
- 集成了SSM框架的系统怎么做测试?
- Python17个常用内置模块总结