ssh程序执行完action转到jsp 提示404 ssh整合找不到actionsturts那个jsp

基于验证框架的输入校验
一、创建一个struts2项目testValidators。Struts2 初体验:
1.jsp页面:
注册页,register.jsp:
使用&%@ taglib uri=&/struts-tags& prefix=&s&%&加载struts2标签库。
使用&s:fielderror/&标签输出相应的字段错误信息,fieldName属性为出错字段的名字。
&%@ page language=&java& contentType=&text/ charset=UTF-8&
pageEncoding=&UTF-8&%&
&!-- 加载struts2标签库 --&
&%@ taglib uri=&/struts-tags& prefix=&s&%&
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
&title&注册&/title&
&form action=&register.action& method=&post&&
&td&邮箱:&/td&
&td&&input type=&text& name=&email&/&&/td&
&!-- 使用&s:fielderror/&标签输入相应的字段错误信息 --&
&td&&s:fielderror fieldName=&email&/&&/td&
&td&密码:&/td&
&td&&input type=&password& name=&password&/&&/td&
&td&&s:fielderror fieldName=&password&/&&/td&
&td&重复密码:&/td&&td&
&input type=&password& name=&repassword&/&&/td&
&td&&s:fielderror fieldName=&repassword&/&&/td&
&td&电话:&/td&
&td&&input type=&text& name=&phone&/&&/td&
&td&&s:fielderror fieldName=&phone&/&&/td&
&td&&input type=&submit& value=&提交&/&&/td&
注册成功页,success.jsp
&%@ page language=&java& contentType=&text/ charset=UTF-8&
pageEncoding=&UTF-8&%&
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
&title&注册成功&/title&
欢迎你 ${email }
2.RegisterAction类。
需要校验的字段必需在类中提供相应的字段和相应的get,set方法。
import com.opensymphony.xwork2.ActionS
public class RegisterAction extends ActionSupport{
//需要校验的字段必需在类中提供相应的字段和相应的get,set方法
public String execute() throws Exception {
return SUCCESS;
public String getEmail() {
public void setEmail(String email) {
this.email =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getRepassword() {
public void setRepassword(String repassword) {
this.repassword =
public String getPhone() {
public void setPhone(String phone) {
this.phone =
3.strruts2配置文件 ,struts.xml:
添加name为input的result标签,校验失败时struts2会自动把页面转到名为&input&的页面中
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE struts PUBLIC
&-//Apache Software Foundation//DTD Struts Configuration 2.3//EN&
&http://struts.apache.org/dtds/struts-2.3.dtd&&
&constant name=&struts.i18n.encoding& value=&UTF-8& /&
&package name=&default& namespace=&/& extends=&struts-default&&
&action name=&register& class=&RegisterAction&&
&result name=&success&&success.jsp&/result&
&!-- 校验失败后,struts2会把页面转到名为&input&的页面中 --&
&result name=&input&&register.jsp&/result&
&/package&
二、编写校验器配置文件
1. 命名规则:action类名-validation.xml.& 2. 一个action对应多个逻辑处理方法:指定校验某个特定方法的方式: action类名-name属性值-validation.xml.(name属性名:在strtus配置文件中对应的 action 标签的 name 属性值)& 3. 配置文件存放位置:放在与Action相同的文件夹内。& 4. 验证规则:先加载action类名-validation.xml,然后加载action类名-name属性名-validation.xml文件。
校验器配置文件,RegisterAction-register-validation.xml:
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE validators PUBLIC
&-//Apache Struts//XWork Validator 1.0.2//EN&
&http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd&&
&validators&
&!-- name值为需要被校验的字段,这里对email字段进行校验 --&
&field name=&email&&
&!-- type值为校验器名,requiredstring:非空字符串校验器 --&
&field-validator type=&requiredstring&&
&message&邮箱不能为空&/message&
&/field-validator&
&!-- 一个字段可以配置多个校验器,email:校验邮箱格式 --&
&field-validator type=&email&&
&message&邮箱格式不正确&/message&
&/field-validator&
&field name=&password&&
&field-validator type=&requiredstring&&
&message&密码不能为空&/message&
&/field-validator&
&!-- stringlength:字符串长度校验 --&
&field-validator type=&stringlength&&
&!-- 为校验器指定参数实现不同的校验规则,minlength:最少长度 --&
&param name=&minLength&&6&/param&
&message&密码长度不能少于6位&/message&
&/field-validator&
&!-- 校验两次密码是否一致,使用 fieldexpression 校验器。expression参数指定判断用的表达式--&
&field name=&repassword&&
&field-validator type=&fieldexpression&&
&!-- 表达式要写在
&![CDATA[]]&
&param name=&expression&&&![CDATA[repassword==password]]&&/param&
&message&两次密码不一至&/message&
&/field-validator&
&!-- 校验电话格式,使用regex正则表达示校验,regexExpression参数指定正则表达式 --&
&field name=&phone&&
&field-validator type=&regex&&
&!-- 注意!2.3.15前的版本使用 expression 参数 --&
&param name=&regexExpression&&&![CDATA[\d{11}]]&&/param&
&message&电话号码格式不正确&/message&
&/field-validator&
&/validators&
上面写法为字段校验风格:先指定校验的属性:我来校验谁,由谁来校验!
下面是非字段校验风格:先指定校验器:由谁来校验,来校验谁!
&validator type=&校验器名&&
&param name=&fieldName&&需要被校验的字段&/param&
&!--此处需要为不同校验器指定数量不等的校验规则 --&
&param name=&参数名&&参数值&/param&
&!--校验失败后的提示信息 --&
&message&校验失败后的提示信息&/message&
&/validator&
struts2提供了大量的内置校验器:你可以在xwork-core-2.1.6.jar的com.opensymphony.xwork2.validator.validators下找到如下配置文件:default.xml。里面列出了所有的内置校验器。
required:必填校验器,要求field的值不能为null。
requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0
  属性——trim:指定在校验之前是否去除字段串前后的空格。
stringlength:字段长度校验器,要求fidle的值必须在指定的范围内,否则校验失败。
  属性——minLength:指定最小长度。 & maxLength:指定量大长度。 & trim:指定在校验之前是否去除字段串前后的空格。&
regex:正则表达式校验器,检查衩校验的field是否匹配一个正则表达式。
  属性——expression:指定正则表达式(2.3.15版用regexExpression)。 & & caseSensitive:指定进行正则表达式匹配时是否区分大小写。
int:整数校验器,要求field的整数值 必须在指定范围内。
  属性——min:指定最小值。 & max指定最大值。
double:双精度浮点数校验器,要求field的双精度浮点数值必须在指定范围内。
  属性——min:指定最小值。 & max指定最大值。
fieldexpression:字段OGNL表达式校验器。要求field满足一个ognl表达式。
  属性——expression:指定ognl表达式(表达式要写在 &![CDATA[]]& 内)。
email:邮件地址校验器。要求如果field的值非空,则必需是合法的邮件地址。
url:网址校验器。要求如果field的值非空,则必需是合法的 url 地址。
date:日期校验器,要求field的日期值必须在指定范围内
  属性——min:指定最小值。 & max指定最大值。
conversion:转换校验器,指定在类型转换失败时,提示错误信息。
visitor:用于校验action中的复合属性。它拽定一个校验文件用于校验复合属性中的属性。
expression:OGNL表达式校验器。要求field满足一个ognl表达式。该逻辑表达式基于ValueStack进行求值。该校验器不可用在字段校验器风格的配置中!
  属性——expression:指定ognl表达式(表达式要写在 &![CDATA[]]& 内)。
三、现在Visitor校验器就起作用了,查看结果:
输入错误的信息,校验不通过。跳转到名用input的视图里,即register,jsp:
输入正确的信息,校验通过:
上编:下编:
本月热门的内容
1 2 3 4 5 6 7 8 9 10
最近更新的内容当前位置: →
→ 在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称解决办法
在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称解决办法
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称??各文件的相应代码:helpRight.ftl文...
"在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称解决办法"::
在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称??各文件的相应代码:helpright.ftl文件:&div class=&title&&&a href=&/noticeandtopiclist.do&&更多&&&/a&公告&/div&struts-web.xml文件:&package name=&web& extends=&struts-tourhb& namespace=&/&& &
&action name=&noticeandtopiclist& class=&web.emptyaction&& &
&result name=&success& type=&freemarker&&/web-inf/template${theme}/web/noticeandtopiclist.ftl&/result& &
&/action&&/package&spring-action.xml文件:&bean id=&web.emptyaction& class=&com.tourhb.action.web.emptyaction& singleton=&false&/&这个bean标签本来就存在的,而且可以被调用成功,但是为什么新建了一个action以后再调用这个bean就报错了?错误如下:there is no action mapped for namespace / and action name noticeandtopiclist. - [unknown location]------解决方案--------------------是不是那个helpright.ftl里的href那儿多了个“/” ,改成&div class=&title&&&a href=&noticeandtopiclist.do&&更多&&&/a&公告&/div&看看
------解决方案--------------------清下tomcat的缓存,重部署试试 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
在原来ssh框架搭建的项目基础上新建struts的action启动后却提示找不到action的映射名称解决办法_JavaWeb相关文章
JavaWeb_总排行榜
JavaWeb_最新
JavaWeb_月排行榜
JavaWeb_周排行榜
JavaWeb_日排行榜下次自动登录
现在的位置:
& 综合 & 正文
【SSH2(实践篇)】–Struts2文件上传下载实例
上篇文章又一次回顾了Struts2的运行机制,对它的运行步骤做了一步步的解析,这个解析不但再一次理清了Struts2的使用方法,而且对它的映射机制进行了深入的解析,并在最后通过一个实例来介绍了Struts2的一种使用方法,这里将做一个有关文件上传下载的实例。
一、文件上传
Struts2并没有提供文件上传的组件,所以想要实现上传的功能就必须通过第三方组件来实现,在Struts2引用的jar中包含了文件上传的组件,它是通过commons-fileupload.jar和commons-io.jar来实现的。这其中的处理细节不需要太懂,在使用中慢慢思考就可以做到灵活运用。
1、首先编写Action类
该类名称为downloadAction.java,必须在该类中引入java.io,文件上传的核心实现使用的还是java的数据流io操作。
package com.
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import org.apache.struts2.ServletActionC
import com.opensymphony.xwork2.ActionS
public class uploadAction extends ActionSupport {
public File getFile() {
public void setFile(File file) {
this.file =
public String getFileFileName() {
return fileFileN
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileN
public String getFileContentType() {
return fileContentT
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentT
//文件名称
private String fileFileN
//文件类型
private String fileContentT
//注意:文件名称和文件类型的名称前缀必须相同,
public String execute() throws Exception{
//获取需要上传文件的文件路径
File uploadFile=new File(ServletActionContext.getServletContext().getRealPath("uploadFile"));
//判断文件是否上传,如果上传的话将会创建该目录
if(!uploadFile.exists()){
uploadFile.mkdir(); //创建该目录
//第一种文件上传的方法
//声明文件输入流,为输入流指定文件路径
FileInputStream input=new FileInputStream(file);
//获取输出流,获取文件的文件地址及名称
FileOutputStream out=new FileOutputStream(uploadFile + "\\" +fileFileName);
byte[] b=new byte[1024];//每次写入的大小
while((i=input.read(b))&0){
out.write(b,0,i);
}catch(Exception e){
e.printStackTrace();
input.close();
out.close();
//第二种文件上传的方法
//FileUtils.copyFile(upload,new File(uploadFile+"\\"+uploadFileName));
//FileUtils.copyFile(upload,new File(uploadFile,uploadFileName));
//第三种方法
BufferedReader bReader=new BufferedReader(new InputStreamReader(new FileInputStream(upload)));
BufferedWriter bWriter=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(uploadFile+"\\"+uploadFileName)));
char[] str=new char[1024];
while((i=bReader.read(str))&0){
bWriter.write(str,0,i);
}catch(Exception e){
e.printStackTrace();
bReader.close();
bWriter.close();
uploadFile.delete();
return "success";
Action类中需要注意的是文件名和文件类型的命名都是有要求的,文件名和文件类型的前缀必须是文件变量,并且要和jsp页面中添加的文件名称一致,如上例中的jsp标签为:&input type='File' name='file'&,在Action类中的文件名称和文件类型必须相应为fileXXX和fileXXX。另外也可以在该Action类中配置其它上传属性,如:可以通过maximumSize指定上传文件的大小,allowedTypes执行上传文件的类型。
上面的Action类指定了三种上传方法,它们操作的核心还是java.io,通过数据流的读入和写出来实现文件的上传。其中第一种和第三种采用的是java.io流操作,而第二种采用的是common.io流操作。
2、struts2.xml相应的action配置
action类编写完成后,接下来要把它配置到相应的action标签中,这样在执行action时会根据注册类执行内部的方法。具体配置方法如下实例。
&package name="upload" namespace="/file" extends="struts-default"&
&action name="upload" class="uploadAction"&
&result name="success"&/success.jsp&/result&
&result name="error"&/error.jsp&/result&
&result name="input"&/index.jsp&/result&
&param name="savePath"&/upload&/param&
&/package&
3、最后配置相应的jsp页面
在配置时需要注意的是文件的编码格式,需要改成multipart/form-data类型,是指把文件及文件的内容都提交,另外enctype还有两个属性值分别是text/plain,指定了表单是以文本的方式进行提交;application/x-www-form-urlencoded这是默认的编码方式,提交时,只提交表单域的value属性值。
&form action="file/upload" method="post" enctype="multipart/form-data"&
&input type="file" name="upload"&
&input type="submit" name="btnUpload" value="上传"&
最后提交,查看提交结果,提交后的文件默认存放在.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\项目名称\uploadFile下,所以在编写action类时需要获取文件上传的路径使用的是getRealPath("uploadFile")。
二、文件下载
相较上传,文件的下载编写起来相交就简单多了,首先也需要添加下载的action类,然后配置struts.xml中的action,最后在jsp中添加链接标签。
1、添加下载action类
添加的action类指定要注意获取文件的输出路径,通过获取输出流来获取文件的路径。
package com.
import java.io.InputS
import org.apache.struts2.ServletActionC
import com.opensymphony.xwork2.ActionS
public class downloadAction extends ActionSupport {
private InputStream fileI
private String fileN
public String getFileName() {
return fileN
public void setFileName(String fileName) {
this.fileName = fileN
public InputStream getFileInput() {
return ServletActionContext.getServletContext().getResourceAsStream("upload\\"+fileName);
public void setFileInput(InputStream fileInput) {
this.fileInput = fileI
public String execute() throws Exception{
fileInput=ServletActionContext.getServletContext().getResourceAsStream("upload\\"+fileName);
return "success";
2、配置struts.xml标签
在配置时结果类型要指定type类型,将它赋值为stream,并添加属性下面的属性,该属性同样可以配置到拦截器中,在拦截器中指定配置的文件。
&action name="download" class="com.action.downloadAction"&
&result name="success" type="stream"&
&param name="inputName"&fileInput&/param&
&param name="contentDispostion"&filename="$(fileName)"&/param&
3、jsp页面代码
jsp代码就很简单了,不多说看代码。
&a href="file/download"&123.txt&/a&
通过使用文件的上传下载功能来熟悉Struts2的使用方法,并了解Servlet请求的基本用法,为以后深入学习Servlet打下基础。struts的文件上传和下载使用的是io流操作完成的,可以使用java.io流,同样可以使用第三方的common.io流实现,有关多文件上传的问题将会在下篇文章中讨论。
&&&&推荐文章:
【上篇】【下篇】温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
只需要简单的配置下,就行 1、在web.xml中加入如下代码:&error-page& &error-code&404&/error-code& &location&/404.jsp&/location&&/error-page&在struts.xml中加入:&global-results&
&result name="notFound"&/404.jsp&/result& &/global-results&如果已经自定义并配置好了action的登录拦截器,上面的那段struts.xml中代码,也可以不配置。最后再创建一个404.jsp页面,代码如下:&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&&%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%&&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&&html&&head&&base href="&%=basePath %&" /&&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&&title&太极侠岚---山鬼谣&/title&&script type="text/javascript"&
var t = 5;
function countDown(){
var time = document.getElementById("time");
//time.value=t; time.innerHTML = if (t&=0) {
location.href="";
clearInterval(inter);
var inter = setInterval("countDown()",1000);
//window.onload=countD &/script& &/head&&body onload="countDown()"& &div align="center"&
访问的页面找不到,&span id="time"&5&/span&秒后回到 主页面&br&
若5秒后,没有跳转&a href="/DocStore"&点击这里&/a& &/div& &!-- &input type="text" value="5" id="time"/& --&&/body&&/html&这样,就可以把不想被直接访问的页面放入到 /WEB-INF/ 中,如有人想要直接访问,就会被跳转到404.jsp页面,过了5秒后,又会跳转到你指定的页面。转载请说明出处------谢谢
阅读(3277)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'【原创】Struts2 访问页面出现404的解决方案',
blogAbstract:'& &Struts2虽然有强大的拦截器的功能,但是,相信大家都遇到过,直接访问jsp页面时,配置的拦截器(比如自定义的登录拦截器),就无用武之地了,可能有人会说把jsp放到/WEB-INF/中不就行了,这样做,确实是访问不了,但是会出现404错误页面,这种界面是不能让用户看见的,这种情况,应该跳回主页面,让用户重新登录。\t只需要简单的配置下,就行\t1、在web.xml中加入如下代码:&error-page&\t&error-code&404&/error-code&',
blogTag:'404,struts2',
blogUrl:'blog/static/1',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:7,
permalink:'blog/static/1',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 ssh jsp向action传值 的文章

 

随机推荐