WARN Form:308 - No configuration found for the specified action: 'loginProducer.action' in namespac

WARN Form:308 - No configuration found for the specified action: 'loginProducer.action' in namespac,第1张

警告信息

警告: No configuration found for the specified action: '/myNameSpace/login.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

struts.xml配置信息(部分)

<package name="packageName" extends="struts-default" namespace="/myNameSpace">

<action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

jsp页面配置信息(部分)

<s:form action="/myNameSpace/login.action">

思考:没有在''的namespace中发现指定的action '/myNameSpace/login.action'

答疑:因为配置的struts2标签并未指定namespace属性。所以struts2会默认从根命名空间"/"搜索action串'/myNameSpace/login.action',如果搜索不到将进入默认命名空间''搜索action请求串,在默认命名空间中是肯定找不到我们定义的action的,所以,struts2抛出一个警告信息。

但是为什么我们没有填写namespace,我们的请求也可以正常访问呢?

我们来看一下解析后的html

查看源码得到的html(部分)

<form id="login" onsubmit="return true" action="/srvclink/myNameSpace/login.action" method="post">

我们看到form提交的action串是准确的url请求,action串确实是/srvclin(应用根)/myNameSpace(命名空间)/login.action。

命名空间中找不到action定义,并不意味着这个action真的不存在,只是我们的代码有问题而已。还有一点是我们在jsp页面的action请求中手动的加入了.action后缀。事实上struts2会自动追加.action的,因为我们并没有合法的使用struts2的标签,所以struts2这里并没有给我们追加.action,解析后的代码中存在的.action,完全是我们手动在jsp页面填写的,有疑问的网友可以不手动添加查看html。

我们修改我们的程序代码

jsp页面配置信息(部分)修改后加入namespace属性,修改action属性值为/login.action

<s:form action="/login.action" namespace="/myNameSpace">

请求页面后,大家很失望吧?警告依然存在。但是我们看一下警告信息。

警告信息:

警告: No configuration found for the specified action: '/login.action' in namespace: '/myNameSpace'. Form action defaulting to 'action' attribute's literal value.

没有在'/myNameSpace'的namespace中发现指定的action '/login.action'

毫无疑问,这里的警告和第一次的警告信息截然不同。我们现在存在命名空间,'/myNameSpace'能够被struts2检索到,并不是开始的''。那问题的关键在哪里呢?

在namespace中没有发现指定的action '/login.action' ???

我们来看一下struts.xml中的配置:

struts.xml配置信息(部分)

<package name="packageName" extends="struts-default" namespace="/myNameSpace">

<action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

是的,我们'/myNameSpace'命名空间下,只有action名字为'login'的定义,并没有所谓的 '/login.action' 定义,所以struts2的警告并未错。如果大家对这个抱有怀疑,可以修改action的名字'login'为‘/longin.action’

<action name="/login.action" class="com.jato.srvclink.test.login.LoginAction" method="login">

请求页面时你会发现不在报警告信息,原因很简单。因为在命名空间为'myNameSpace'下确实存在命名为'/login.action'的action。

我们再次修改配置文件

jsp页面配置信息(部分)修改后action属性值为longin

<s:form action="login" namespace="/myNameSpace">

请求页面时,我们发现不再有警告信息了。

如果你有足够细心,我想你应该可以彻底的明白为什么struts2会报警了吧?你也应该明白了使用struts2标签action中添加/线后请求反而报错的原因了。

明代(公元1368-1644年),牡丹的栽培的中心,转移到了安徽亳州。夏之臣《评亳州牡丹》云:“吾亳州牡丹,年来浸盛,娇容三变,尤在季孟之间。等此而上,有天香一品,石榴红,胜娇容,宫红袍,琉璃贯珠,新红种种不一,杂红最后出,品种难得。又有大黄一种,轻腻可爱,不减三变。佛顶青为白色第一。大抵红花以花子红,银红、桃红为上。”又云:“草堂数武之步,种莳殆偏,率以两色并作一丛,红白异状,错综其间,又以平头紫,庆天香,先春红三色插入其花丛,间集而成文章,他时盛开灿然若锦”。此时开中国插花技术之先河。

在网站的根目录下建个search.htm,内容如下

<html>

<head>

<title>搜索表单</title>

<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">

</head>

<body bgcolor="#FFFFFF" text="#000000">

<form name="form1" method="post" action="search.php">

<table width="100%" cellspacing="0" cellpadding="0">

<tr>

<td width="36%">

<div align="center">

<input type="text" name="keyword">

</div>

</td>

<td width="64%">

<input type="submit" name="Submit" value="搜索">

</td>

</tr>

</table>

</form>

</body>

</html>

二,搜索程序

再在根目录下建个search.php 的文件,用来处理search.htm表单传过来的数据.内容如下

<?php

//获取搜索关键字

?$keyword=trim(?$_POST[“keyword”])

//检查是否为空

if(?$keyword==””){

echo”您要搜索的关键字不能为空”

exit//结束程序

}

?>

这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。

我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP Directory的类。我们现在用前者.

<?php

//遍历所有文件的函数

function listFiles(?$dir){

?$handle=opendir(?$dir)

while(false!==(?$file=readdir(?$handle))){

if(?$file!="."&&?$file!=".."){

//如果是目录就继续搜索

if(is_dir("?$dir/?$file")){

listFiles("?$dir/?$file")

}

else{

//在这里进行处理

}

}

}

}

?>

在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字?$keyword,如果含有就把文件地址赋给一个数组。

<?php

//?$dir是搜索的目录,?$keyword是搜索的关键字 ,?$array是存放的数组

function listFiles(?$dir,?$keyword,&?$array){

?$handle=opendir(?$dir)

while(false!==(?$file=readdir(?$handle))){

if(?$file!="."&&?$file!=".."){

if(is_dir("?$dir/?$file")){

listFiles("?$dir/?$file",?$keyword,?$array)

}

else{

//读取文件内容

?$data=fread(fopen("?$dir/?$file","r"),filesize("?$dir/?$file"))

//不搜索自身

if(?$file!=”search.php”){

//是否匹配

if(eregi("?$keyword",?$data)){

?$array[]="?$dir/?$file"

}

}

}

}

}

}

//定义数组?$array

?$array=array()

//执行函数

listFiles(".","php",?$array)

//打印搜索结果

foreach(?$array as ?$value){

echo "?$value"."<br>"

}

?>

现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。

1,列出内容的标题

if(eregi("?$keyword",?$data)){

?$array[]="?$dir/?$file"

}

改成

if(eregi("?$keyword",?$data)){

if(eregi("<title>(.+)</title>",?$data,?$m)){

?$title=?$m["1"]

}

else{

?$title="没有标题"

}

?$array[]="?$dir/?$file ?$title"

}

原理就是,如果在文件内容中找到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.

2,只搜索网页的内容的主题部分。

做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表达式和strip_tags的配合,并不能把所有的都去掉。

?$data=fread(fopen("?$dir/?$file","r"),filesize("?$dir/?$file"))

//不搜索自身

if(?$file!=”search.php”){

//是否匹配

if(eregi("?$keyword",?$data)){

改为

?$data=fread(fopen("?$dir/?$file","r"),filesize("?$dir/?$file"))

if(eregi("<body([^>]+)>(.+)</body>",?$data,?$b)){

?$body=strip_tags(?$b["2"])

}

else{

?$body=strip_tags(?$data)

}

if(?$file!="search.php"){

if(eregi("?$keyword",?$body)){

3,标题上加链接

foreach(?$array as ?$value){

echo "?$value"."<br>"

}

改成

foreach(?$array as ?$value){

//拆开

list(?$filedir,?$title)=split(“[ ]”,?$value,”2”)

//输出

echo "<a href=?$filedir>?$value</a>"."<br>"

}

4防止超时

如果文件比较多,那么防止PHP执行时间超时是必要的。可以在文件头加上

set_time_limit(“600”)

以秒为单位,所以上面是设10分钟为限。

所以完整的程序就是

<?php

set_time_limit("600")

//获取搜索关键字

?$keyword=trim(?$_POST["keyword"])

//检查是否为空

if(?$keyword==""){

echo"您要搜索的关键字不能为空"

exit//结束程序

}

function listFiles(?$dir,?$keyword,&?$array){

?$handle=opendir(?$dir)

while(false!==(?$file=readdir(?$handle))){

if(?$file!="."&&?$file!=".."){

if(is_dir("?$dir/?$file")){

listFiles("?$dir/?$file",?$keyword,?$array)

}

else{

?$data=fread(fopen("?$dir/?$file","r"),filesize("?$dir/?$file"))

if(eregi("<body([^>]+)>(.+)</body>",?$data,?$b)){

?$body=strip_tags(?$b["2"])

}

else{

?$body=strip_tags(?$data)

}

if(?$file!="search.php"){

if(eregi("?$keyword",?$body)){

if(eregi("<title>(.+)</title>",?$data,?$m)){

?$title=?$m["1"]

}

else{

?$title="没有标题"

}

?$array[]="?$dir/?$file ?$title"

}

}

}

}

}

}

?$array=array()

listFiles(".","?$keyword",?$array)

foreach(?$array as ?$value){

//拆开

list(?$filedir,?$title)=split("[ ]",?$value,"2")

//输出

echo "<a href=?$filedir target=_blank>?$title </a>"."<br>"

}

?>

到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些都留给你自己吧。

这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.


欢迎分享,转载请注明来源:优选云

原文地址:https://54852.com/hy/747613.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-04
下一篇2023-06-04

随机推荐

  • 玫琳凯属于什么档次

    玫琳凯属于中高端档次。玫琳凯这个公司其实是非常大的,在全球都非常知名,他有超过5000名员工和300余万名的销售人员,而且他们家的客户服务是比较不错的,创办于1963年,品牌历史也是有的,而且价钱也是非常的贵,所以说玫琳凯跟迪奥之类的一样,

    2023-12-14
    37900
  • dodo散粉和悦诗风吟散粉哪个好dodo红色恋人散粉和悦诗风吟对比

    dodo红色恋人散粉是韩国非常热销的一款散粉,包装是面具的样子,散粉非常细腻,控油能力很强,经常卖到断货的一款产品,那么,和大热的悦诗风吟散粉究竟该怎么选择呢?dodo散粉和悦诗风吟散粉哪个好以下是网友的观点dodo散粉~这款散粉相

    2023-12-14
    19900
  • 白金水耀肌什么档次

    中低档次。白金水耀肌是卓沿品牌的一个系列,卓沿主打中低档次的产品,白金水耀肌是其中之一,因此该护肤品为中低档次。卓沿是屈臣氏自产的,卓沿国产品牌隶属于屈臣氏旗下,档次定位于中低端,以满足更多消费者的需求。目前主打四大系列,舒缓保湿系列、控油

    2023-12-14
    25200
  • 孕婴店加盟哪一家公司最好啊

    我在网上还找到了这样一篇文章,大家有耐心的不妨仔细看完,里面的情况发人深省: 在当今的中国,各形各色的骗局可以说是五花八门,数不胜数!抛开一些小的街头骗局,大型的骗术就有传销骗局,短信中奖骗局,信用卡中奖骗局,连锁加盟骗局等等! 如果我要是

    2023-12-14
    22700
  • 婷美小屋的绿豆泥面膜和粉泥有什么区别

    绿豆泥面膜和粉泥都是婷美小屋面膜中的泥膜。区别在于:婷美小屋的绿豆泥主要成分是绿豆精萃,能够改善多余油脂分泌,长效控油,嫩滑肌肤,建议多用在T区。婷美小屋的粉泥含有玫瑰精萃,提亮匀亮肤色,粉嫩肌肤,可以多用在脸颊。扩展资料:婷美小屋的绿豆泥

    2023-12-14
    23500
  • 巴黎欧莱雅的护肤品怎么样

    巴黎欧莱雅,巴黎欧莱雅是欧莱雅集团旗下知名度最高、历史最为悠久的三大大众化妆品品牌之一,那么巴黎欧莱雅的护肤品怎么样呢,下面是我分享给大家的巴黎欧莱雅的护肤品怎么样的资料,希望大家喜欢!

    2023-12-14
    16900
  • 买的化妆品送的套盒小样的使用顺序是怎么样的

    雪花秀套件样品的使用顺序护肤品除了清洁之外,使用顺序基本是乳液、精华液、凝胶、乳液、面霜、油类产品的顺序。雪秀套装样品中有五款产品,分别是保湿精华、滋养水、滋养乳液、人参霜、眼霜。它的样品不含洗面奶,所以在使用样品前,需要搭配其他洁面产品。

    2023-12-13
    16000
  • 什么牌子的化妆品好没有激素酒精的。

    不含激素,酒精的护肤品,符合此类标准的只有敏感肌肤专用护肤品,敏感肌专用护肤品一般都是无酒精,无添加,无刺激,配方是所有护肤品中相对来说最安全的一个,ph值都是弱酸性的,对皮肤比较好,而且过敏率相当低,敏感肌专用的牌子主要有理肤泉,雅漾,薇

    2023-12-13
    16800
  • 用了佐丹兰护肤品,眼睛疲劳。犯困

    不要用了,这个品牌是小品牌,最好选择公认的大品牌。每个人的肌肤肤质不同,不同人的肌肤对化妆品的适应不同,使用效果也会不同。在不过敏的前提下,可以试用一个月左右,便可以感知这种化妆品适不适合自己。为了经济起见,过敏测试及前期试用,可以到专柜索

    2023-12-13
    15100

发表评论

登录后才能评论
保存