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…

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

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

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");

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

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

AVI文件规范

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

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; 从原始样本集中抽取训…

线性判别结合源码分析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可以看成一种…

【机器学习】feature_importances_ 参数源码解析

在用sklearn的时候经常用到feature_importances_ 来做特征筛选&#xff0c;那这个属性到底是啥呢。 分析源码发现来源于每个base_estimator的决策树的 feature_importances_ 由此发现计算逻辑来源于cython文件&#xff0c;这个文件可以在其github上查看源代码 而在DecisionTree…

【机器学习】 关联规则Apriori和mlxtend——推荐算法

引入&#xff1a; 啤酒与尿布的故事 关联规律挖掘&#xff1a;从交易数据中发现&#xff1a;买了X 还会买Y 的规则 关联规律挖掘‘购物篮分析’Market Basket Analysis&#xff08;MBA&#xff09; 关联规律->应用于推荐系统 1. 关联规则代码演示 使用的是mlxtend.frequent…

python中的内部函数和闭包函数

内部函数 在函数内部声明的函数就是内部函数。 格式&#xff1a; def 函数名():局部变量...def 内部函数名():Python功能代码...示例&#xff1a; def funName():name dragon#定义一个内部函数def inner():print(我是内部函数)‘’‘注释&#xff1a; 1.内部函数的本质就是局…

【机器学习】K-Means(非监督学习)学习及实例使用其将图片压缩

非监督学习之k-means K-means通常被称为劳埃德算法&#xff0c;这在数据聚类中是最经典的&#xff0c;也是相对容易理解的模型。算法执行的过程分为4个阶段。 1、从数据中选择k个对象作为初始聚类中心; 2、计算每个聚类对象到聚类中心的距离来划分&#xff1b; 3、再次计算…

CloudCC CRM:物联网必将成为CRM的推动力

CRM热门话题背后的主要推动力包括云、社交、移动和大数据&#xff0c;CloudCC CRM认为物联网必将成为CRM的推动力&#xff0c;也就是传感器将事物连接到互联网&#xff0c;创建之前我们从未想到的新型服务。 社交&#xff1a;在销售、市场和客户服务部门&#xff0c;营销人员正…

【tensorflow】tensorflow -gpu安装及jupyter环境更改

tensorflow -gpu安装 首先&#xff0c;安装Anoconda 1. 官网下载点我&#xff1a;2.安装 点击 python 3.6 version自动下载x64版&#xff0c;下载好之后&#xff0c;然后安装。 如图&#xff0c;打上勾之后&#xff0c;一路next3.打开终端 1&#xff09;输入conda –-version …

【机器学习】朴素贝叶斯介绍及实例--对短信进行二分类 使用多项式分布

贝叶斯 首先什么是贝叶斯&#xff1f; 一个例子&#xff0c;现分别有 A、B 两个容器&#xff0c;在容器 A 里分别有 7 个红球和 3 个白球&#xff0c;在容器 B 里有 1 个红球和 9 个白球&#xff0c;现已知从这两个容器里任意抽出了一个球&#xff0c;且是红球&#xff0c;问这…

Gartner分享物联网和智慧城市最新数据

主题为“移我所想 Mobile is me”的2016世界移动大会上海展正在上海如火如荼的举行&#xff0c;Gartner也在第一时间分享了最新的市场数据&#xff0c;包括企业级用户最为关注的物联网和智慧城市的调查预测报告&#xff0c;下面就一起来看看吧&#xff01; 智慧城市与物联网 物…