struts2学习(3)struts2核心知识II

一、struts.xml配置:                                                  

1.分模块配置方法:

比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们:

工程结构:

struts.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><include file="cheliang.xml"></include><include file="zichan.xml"></include>
</struts>

cheliang.xml:

<struts><package name="cheliang" namespace="/cheliang" extends="struts-default"><action name="cheliang" class="com.cy.action.CheLiangAction"><result name="success">${pageContext.request.contextPath}/success.jsp</result></action></package></struts>
View Code

zichan.xml:

<struts><package name="zichan" namespace="/zichan" extends="struts-default"><action name="zichan" class="com.cy.action.ZiChanAction"><result name="success">${pageContext.request.contextPath}/success.jsp</result></action></package></struts>
View Code

CheLiangAction.java:

public class CheLiangAction extends ActionSupport{private static final long serialVersionUID = 1L;public String execute() throws Exception {System.out.println("执行了CheLiangAction Action的默认方法");return SUCCESS;}
}
View Code

ZiChanAction.java:

public class ZiChanAction extends ActionSupport{private static final long serialVersionUID = 1L;public String execute() throws Exception {System.out.println("执行了CheLiangAction Action的默认方法");return SUCCESS;}
}
View Code

测试:

 

2.使用通配符:

 struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="manage" namespace="/" extends="struts-default"><!-- method={1} 取到第一个通配符--><action name="student_*" class="com.cy.action.StudentAction" method="{1}"><result name="success">success.jsp</result></action><action name="grade_*" class="com.cy.action.GradeAction" method="{1}"><result name="success">success.jsp</result></action></package>
</struts>

com.cy.action.GradeAction.java:

package com.cy.action;import com.opensymphony.xwork2.ActionSupport;public class GradeAction extends ActionSupport{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String list()throws Exception{System.out.println("班级查找");name="班级查找";return SUCCESS;}public String add()throws Exception{System.out.println("班级添加");name="班级添加";return SUCCESS;}public String update()throws Exception{System.out.println("班级修改");name="班级修改";return SUCCESS;}public String delete()throws Exception{System.out.println("班级删除");name="班级删除";return SUCCESS;}}
View Code

com.cy.action.StudentAction.java:

package com.cy.action;import com.opensymphony.xwork2.ActionSupport;public class StudentAction extends ActionSupport{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String list()throws Exception{System.out.println("学生查找");name="学生查找";return SUCCESS;}public String add()throws Exception{System.out.println("学生添加");name="学生添加";return SUCCESS;}public String update()throws Exception{System.out.println("学生修改");name="学生修改";return SUCCESS;}public String delete()throws Exception{System.out.println("学生删除");name="学生删除";return SUCCESS;}}
View Code

success.jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>OK! ${name}
</body>
</html>
View Code

index.jsp:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h1>通配符</h1><a href="student_list" target="_blank">学生信息查询</a>&nbsp;<a href="student_add" target="_blank">学生信息添加</a>&nbsp;<a href="student_update" target="_blank">学生信息修改</a>&nbsp;<a href="student_delete" target="_blank">学生信息删除</a>&nbsp;<br/><br/><a href="grade_list" target="_blank">班级信息查询</a>&nbsp;<a href="grade_add" target="_blank">班级信息添加</a>&nbsp;<a href="grade_update" target="_blank">班级信息修改</a>&nbsp;<a href="grade_delete" target="_blank">班级信息删除</a>&nbsp;<br/></body>
</html>
View Code

测试:

 

3.上面的通配符配置方式还可以简化:

struts.xml:

<struts><package name="manage" namespace="/" extends="struts-default"><action name="*_*" class="com.cy.action.{1}Action" method="{2}"><result name="success">success.jsp</result></action></package>
</struts>

因为{1}Action获取到student/grade是小写,index.jsp中改为大写的:

index.jsp:

<body><h1>通配符</h1><a href="Student_list" target="_blank">学生信息查询</a>&nbsp;<a href="Student_add" target="_blank">学生信息添加</a>&nbsp;<a href="Student_update" target="_blank">学生信息修改</a>&nbsp;<a href="Student_delete" target="_blank">学生信息删除</a>&nbsp;<br/><br/><a href="Grade_list" target="_blank">班级信息查询</a>&nbsp;<a href="Grade_add" target="_blank">班级信息添加</a>&nbsp;<a href="Grade_update" target="_blank">班级信息修改</a>&nbsp;<a href="Grade_delete" target="_blank">班级信息删除</a>&nbsp;<br/></body>

测试结果ok

 

 

二、动态方法调用:                                                  

struts.enable.DynamicMethodInvocation,开启动态方法调用,默认是false;

上面的struts.xml修改为如下:

<struts><constant name="struts.enable.DynamicMethodInvocation" value="true" /><package name="manage" namespace="/" extends="struts-default"><action name="student" class="com.cy.action.StudentAction"><result name="success">success.jsp</result></action><action name="grade" class="com.cy.action.GradeAction"><result name="success">success.jsp</result></action></package>
</struts>

index.jsp:

<body><h1>动态方法调用</h1><a href="student!list" target="_blank">学生信息查询</a>&nbsp;<a href="student!add" target="_blank">学生信息添加</a>&nbsp;<a href="student!update" target="_blank">学生信息修改</a>&nbsp;<a href="student!delete" target="_blank">学生信息删除</a>&nbsp;<br/><br/><a href="grade!list" target="_blank">班级信息查询</a>&nbsp;<a href="grade!add" target="_blank">班级信息添加</a>&nbsp;<a href="grade!update" target="_blank">班级信息修改</a>&nbsp;<a href="grade!delete" target="_blank">班级信息删除</a>&nbsp;<br/></body>
View Code

测试:

三、Action生命周期                                                          

例子:

com.cy.action.HelloAction.java:

package com.cy.action;import com.opensymphony.xwork2.ActionSupport;public class HelloAction extends ActionSupport{/*** */private static final long serialVersionUID = 1L;public HelloAction() {System.out.println(this);}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubreturn SUCCESS;}}
View Code

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="manage" namespace="/" extends="struts-default"><action name="hello" class="com.cy.action.HelloAction"><result name="success">success.jsp</result></action></package>
</struts>
View Code

我们在每次请求hello链接的时候,产生HelloAction实例,实例的构造方法中打印了当前类对象;

测试结果:

多次访问:http://localhost:8080/Struts2Chap01/hello

console:

证明了:

每次请求hello,都会产生一个新的HelloAction实例;
每次产生新的,保证安全点,但是每次都产生新的,感觉有点浪费,当并发量很大的时候,内存可能有问题;
等到以后spring管理struts的Action都是单例;HelloAction始终只有1个;(当然也可以多例)

 

 

----------------------

转载于:https://www.cnblogs.com/tenWood/p/7092246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】逻辑斯蒂回归概率计算和手动计算对比

二分类&#xff0c;逻辑斯蒂回归概率计算 import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_splitX,y datasets.load_iris(True)cond y!2X X[cond] y y[cond]resul…

WPF快速指导2:模板

WPF快速指导2&#xff1a;模板 本文摘要&#xff1a; 1&#xff1a;模板作用&#xff1b; 2&#xff1a;样式模板&#xff1b; 3&#xff1a;数据模板&#xff1b; 4&#xff1a;如何使用ControlTemplate&#xff1b; 5&#xff1a;如何使用DataTempla…

五个最佳媒体格式转换器

我们经常会遇到下载的视频文件格式不对&#xff0c;无法在其他播放设备&#xff08;如手机、DVD&#xff09;中使用的问题&#xff0c;现在&#xff0c;我们介绍五个功能强大且易于使用的媒体转换器&#xff0c;用于转换不同类型的视频文件。   Super (Windows) Super是一个免…

【机器学习】六种算法在人脸补全中的应用比较(K紧邻,线性,决策树,岭回归,套索回归,ElasticNet)

需求&#xff1a; 根据人的上半边脸预测下半边脸&#xff0c;用各种算法取得的结果与原图比较 思考&#xff1a; 这是一个回归问题&#xff0c;不是分类问题&#xff08;人脸数据不固定&#xff09; 数据集一共包含40个人&#xff0c;每一个人10张照片&#xff0c;分布规律 每…

性能优化之NSDateFormatter

为什么要优化NSDateFormatter&#xff1f;首先&#xff0c;过度的创建NSDateFormatter用于NSDate与NSString之间转换&#xff0c;会导致App卡顿&#xff0c;打开Profile工具查一下性能&#xff0c;你会发现这种操作占CPU比例是非常高的。据官方说法&#xff0c;创建NSDateForma…

QuickTime文件格式解析

QuickTime文件格式解析Peter Lee 2008-06-14 一、简介 QuickTime是Apple公司开发的一套完整的多媒体平台架构&#xff0c;可以用来进行多种媒体的创建&#xff0c;生产&#xff0c;和分发&#xff0c;并为这一过程提供端到端的支持&#xff1a;包括媒体的实时捕捉&#xff0c;…

python的数据类型转换

数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换。数据类型转换分为两类&#xff0c;分别是自动数据类型转换 和 强制数据类型转换。 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换&#xff0c;不许要人工干预。 1.自动类型转换不需要人工干…

Linux文件属性及如何修改文件属性

ls -al:显示文件的文件名与相关属性并列出所有文件详细的权限与属性 dr-xr-x---. 7 root root 4096 Apr3 12:31 . 权限 连接 所有者 用户组 文件容量 修改日期 文件名 第一个字符代表这个文件是“目录&#xff0c;文件&#x…

SyntaxError:identifier starts immediately after numeric literal

1、错误描写叙述2、错误原因因为在改动方法传參的过程&#xff0c;须要传个id&#xff0c;可是这个id是字符串类型&#xff0c;传入的是数值型3、解决的方法在传參时&#xff0c;须要加入“”&#xff0c;变成字符串类型User.modify("id");

python中的运算和运算符

运算和运算符 运算&#xff1a; 由一个以上的值经过变化得到新值得过程&#xff0c;就是运算。 运算符&#xff1a; 用于运算的符号&#xff0c;就是运算符 运算的分类&#xff1a; 1.算数运算 2.比较运算/关系运算 3.赋值运算 4.逻辑运算 5.位运算 6.成员运算 7.身份运算算术…

【数据分析】reshape(-1,1)和numpy的广播机制

在创建DataFrame的时候常常使用reshape来更改数据的列数和行数。 reshape可以用于numpy库里的ndarray和array结构以及pandas库里面的DataFrame和Series结构。 源数据 reshape函数 reshape&#xff08;行&#xff0c;列&#xff09;可以根据指定的数值将数据转换为特定的行数和…

蓝桥杯-组素数-java

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称&#xff1a; 蓝桥杯赛题 * 作 者&#xff1a; 彭俊豪 * 完成日期&#xf…

AVI文件规范

AVI文件规范PeterLee 2007-10-14 一、AVI文件简介 AVI的英文全称为Audio Video Interleaved&#xff0c;即音频视频交错格式&#xff0c;是将语音和影像同步组合在一起的文件格式。AVI于1992年被Microsoft公司推出&#xff0c;随Windows3.1一起被人们所认识和熟知。AVI文件格式…

python中的流程控制

流程控制 流程&#xff1a; 计算机执行代码的顺序&#xff0c;就是流程。 流程控制&#xff1a; 对计算机代码执行顺序的控制&#xff0c;就是流程控制。 流程分类&#xff1a; 流程控制一共分为三类&#xff0c;分别是 顺序结构、分支(选择)结构、循环结构。 顺序结构 顺序…

tomcat jdbc SlowQueryReport的实现解读

为什么80%的码农都做不了架构师&#xff1f;>>> ##序 tomcat提供了JdbcInterceptor可以用来监控jdbc的执行情况&#xff0c;默认提供了好几个现成的interceptor可以用&#xff0c;SlowQueryReport以及SlowQueryReportJmx就是其中的两个。 ##JdbcInterceptor的基本原…

【机器学习】Bagging和Boosting的区别(面试准备)

Baggging 和Boosting都是模型融合的方法&#xff0c;可以将弱分类器融合之后形成一个强分类器&#xff0c;而且融合之后的效果会比最好的弱分类器更好。 Bagging: 先介绍Bagging方法&#xff1a; Bagging即套袋法&#xff0c;其算法过程如下&#xff1a; 从原始样本集中抽取训…

python中的循环结构

循环结构 循环结构可以减少源程序重复书写的工作量(代码量)&#xff0c;用来描述重复执行某段算法的问题&#xff0c;这是程序设计中最能发挥计算机特长的程序结构。 Python中循环结构分为两类&#xff0c;分别是 while 和 for .. in while 格式1&#xff1a; num1,num2 3…

线性判别结合源码分析LDA原理

1. LDA的思想 LDA线性判别分析也是一种经典的降维方法&#xff0c;LDA是一种监督学习的降维技术&#xff0c;也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括&#xff0c;就是“投影后类内方…

RIFF文件规范

RIFF文件规范Peter Lee 2007-10-02 摘要&#xff1a;RIFF全称为资源互换文件格式&#xff08;Resources Interchange File Format&#xff09;&#xff0c;RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构&#xff0c;常见的如WAV文件、AVI文件等。RIFF可以看成一种…

FB宣布将回购60亿美元股票 首席会计官将离职

11月19日消息&#xff0c;据美国媒体报道&#xff0c;Facebook宣布将回购60亿美元股票&#xff0c;回购计划将在明年第一季度开始实施。另外&#xff0c;该公司还宣布首席会计官贾斯艾特瓦尔将离职。 短期回购股票可使Facebook赢得时间&#xff0c;缓解投资长期项目如Instagram…