怎样在linux环境下使用struts2环境搭建

struts2环境配置_Linux编程_Linux公社-Linux系统门户网站
你好,游客
struts2环境配置
来源:Linux社区&
作者:jiangzaifu
Struts2框架,大多数框架都在使用。由于工作需要,开始做Java项目。先学个struts2。
一、下载struts2
有好多版本,我下载的是struts-2.2.1.1。
二、创建web项目,导入使用struts2所必须的jar包。
我使用的是MyEclipse 7.5。建立web项目,给项目添加外部引用包(project-properties-Java Build Path-Add External Jars...)。添加的包有:commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,commons-logging-api-1.1.jar,freemarker-2.3.16.jar,javassist-3.7.ga.jar,ognl-3.0.jar,struts2-core-2.2.1.1.jar,xwork-core-2.2.1.1.jar。注意:由于struts2版本的差异性,上面提到的包不一定满足所有版本的需求。配置完struts2后,请部署运行一下。根据运行时的错误提示来添加jar包解决问题。比如,配置struts-2.2.1.1时需要commons-io-1.3.2.jar包和javassist-3.7.ga.jar包,但是2.1版本就不需要这两个包。
三、编写struts.xml文件
在MyEclipse项目中的src根目录下建立一个struts.xml文件。(可以打开下载的struts2安装包里的apps目录下的任意一个jar包,在里面的WEB_INFR/src目录下,寻找struts.xml文件,将该文件复制进项目的src根目录下,将里面的内容清空(只留下&struts&标签和头部标签即可))
四、在web.xml中加入struts2 MVC框架启动配置
和struts.xml文件的生成类似,在struts2安装包里找到web.xml文件,将里面的&filter&和&filter-mapping&标签及其内容拷贝进项目中的web.config文件即可。
五、struts2实例--简单的登录例子
5.1 编写login.jsp页面。代码如下:
&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&&%@ taglib uri="/struts-tags" prefix="s" %&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&&html&& &head&&&& &&& &title&Login&/title&&&& &&meta http-equiv="pragma" content="no-cache"&&&meta http-equiv="cache-control" content="no-cache"&&&meta http-equiv="expires" content="0"&&&& &&meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&&&meta http-equiv="description" content="This is my page"&
& &/head&& & &body&&& && &s:form action="/login" method="post"&&&& &s:label value="系统登陆"&&/s:label&&&& &s:textfield name="username" label="账号" /&&&& &s:password name="password" label="密码" /&&&& &s:submit value="登录" /&&& &/s:form&& & &/body&&/html&
相关资讯 & & &
& (12/16/:13)
& (12/19/:01)
& (12/06/:34)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款polaris1119 的BLOG
用户名:polaris1119
文章数:53
评论数:316
访问量:714874
注册日期:
阅读量:24883
阅读量:261950
阅读量:999496
阅读量:149476
51CTO推荐博文
好久没有写Blog了,最近似乎变懒了。今天上班没有很多事,于是把之前遇到的一个问题记录下来。Web开发会涉及到很多类型转换的情况。我们知道,页面中的一切值都是字符串类型,而到后台,我们需要的可能是其他各种类型;同时,页面显示也是字符串类型。这就涉及到Web中基本的类型转换问题:从String转换为各种类型与从各种类型转换为String类型。在Java Web开发中,进行上述转换一般有以下几种:1、在Servlet中,这一切的转换我们得自己写代码完成;2、在Struts1.x中,我们通过apache commons-beanutils中的converters来帮助完成这些事情;3、在Struts2中,使用的则是基于ongl的类型转换;……由于类型转换的通用性,因而Web框架都会实现大多数类型的转换功能,而不需要程序员编码实现。然而,对于java.util.Date这种类型的转换,各大框架似乎做得都不尽如人意。如:在Struts1.x中,该类型的转换就会有问题,很多人建议使用java.sql.Date这种类型来解决日期转换的问题(实际上可以自定义一个类型转换器来解决该问题)。在Struts2中,这个问题似乎依然存在,也许你从来没有遇到过。的确,一般人确实不会遇到,会觉得没有这个问题。下面就是我遇到的问题与解决方法。日期类型的转换,Web开发中几乎都会遇到,我现在做得项目也不例外。在开发的过程中,也许就像你一样,我没有对日期类型的转换做任何特殊的处理,而且Struts2也很好的帮我完成了转换。然而同事测试的时候却出现了一个“莫名其妙”的问题:输入一个常用格式的日期类型yyyy-MM-dd,到后台却报错:找不到对应的set方法――setEffDate(Ljava.lang.String)。的确,程序中只有setEffDate(java.util.Date)这个方法,没有setEffDate(Ljava.lang.String)这个方法。从Ljava.lang.String可以看出,传到后台的String类型并没有转换成Date类型,因而报错。一开始,我以为是我UT没做好,于是在自己的电脑上模拟同事的测试,结果一点问题也没有。这就奇怪了。经过自己分析,觉得可能是IE浏览器的原因,因为同事测试用的是IE,而我用的是FireFox。于是在自己的机子上用IE测试,同时在同事机子上用FireFox测试,结果这两次测试都没有出现上面的问题。虽然没有找到问题所在,但可以初步肯定:IE的问题,但似乎又不完全是IE的问题,因为在我的电脑上的IE(版本与同事一样,都是IE6)没有上述问题。这就奇怪了,是什么问题呢,真是百思不得其解。这个时候,我想起了之前遇到的一个不解得情况:从后台获得的日期类型在页面上显示时,跟上面情况一样,在同事的IE中,日期显示的格式竟然是:yyyy-MM-ddTHH:mm:ss。多了一个T,真是莫名其妙,而且只在同事的IE浏览器中出现(当时解决方法是在JS中将'T'替换为空格,没有去深究,但现在必须的深究了)。yyyy-MM-ddTHH:mm:ss这种日期格式有吗?于是查询JDK:在SimpleDateFormat类中找到了该日期格式,这种格式是“美国语言环境中日期和时间的模式之一”。原来还真有这种格式。竟然这是美国语言中使用的日期格式,而Struts2是美国人开发的,也许跟这个有点关系。于是查看Struts2中关于Date类型转换的源码。在XWorkBasicConverter类中private Object doConvertToDate(Map&String, Object& context, Object value, Class toType) {&&&&&&&&&&&&&&&&Date result = null;&&&&&&&&&&&&&&&&if (value instanceof String && value != null && ((String) value).length() & 0) {&&&&&&&&&&&&&&&&&&&&&&&&String sa = (String)&&&&&&&&&&&&&&&&&&&&&&&&Locale locale = getLocale(context);&&&&&&&&&&&&&&&&&&&&&&&&DateFormat df = null;&&&&&&&&&&&&&&&&&&&&&&&&if (java.sql.Time.class == toType) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&df = DateFormat.getTimeInstance(DateFormat.MEDIUM, locale);&&&&&&&&&&&&&&&&&&&&&&&&} else if (java.sql.Timestamp.class == toType) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Date check = null;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SimpleDateFormat dtfmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DateFormat.MEDIUM,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&locale);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SimpleDateFormat fullfmt = new SimpleDateFormat(dtfmt.toPattern() + MILLISECOND_FORMAT,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&locale);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SimpleDateFormat dfmt = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&locale);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SimpleDateFormat[] fmts = {fullfmt, dtfmt, dfmt};&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for (SimpleDateFormat fmt : fmts) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&try {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&check = fmt.parse(sa);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&df =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (check != null) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} catch (ParseException ignore) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&} else if (java.util.Date.class == toType) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Date check = null;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DateFormat[] dfs = getDateFormats(locale);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for (DateFormat df1 : dfs) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&try {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&check = df1.parse(sa);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&df = df1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (check != null) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&catch (ParseException ignore) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&//final fallback for dates without time&&&&&&&&&&&&&&&&&&&&&&&&if (df == null) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&df = DateFormat.getDateInstance(DateFormat.SHORT, locale);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&try {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&df.setLenient(false); // let's use strict parsing (XW-341)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&result = df.parse(sa);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if (!(Date.class == toType)) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&try {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Constructor constructor = toType.getConstructor(new Class[]{long.class});&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return constructor.newInstance(new Object[]{Long.valueOf(result.getTime())});&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} catch (Exception e) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&throw new XWorkException("Couldn't create class " + toType + " using default (long) constructor", e);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&} catch (ParseException e) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&throw new XWorkException("Could not parse date", e);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&} else if (Date.class.isAssignableFrom(value.getClass())) {&&&&&&&&&&&&&&&&&&&&&&&&result = (Date)&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&return&&&&&&&&}&&&&&&&&private DateFormat[] getDateFormats(Locale locale) {&&&&&&&&&&&&&&&&DateFormat dt1 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale);&&&&&&&&&&&&&&&&DateFormat dt2 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale);&&&&&&&&&&&&&&&&DateFormat dt3 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);&&&&&&&&&&&&&&&&DateFormat d1 = DateFormat.getDateInstance(DateFormat.SHORT, locale);&&&&&&&&&&&&&&&&DateFormat d2 = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);&&&&&&&&&&&&&&&&DateFormat d3 = DateFormat.getDateInstance(DateFormat.LONG, locale);&&&&&&&&&&&&&&&&DateFormat rfc3399 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");&&&&&&&&&&&&&&&&DateFormat[] dfs = {dt1, dt2, dt3, rfc3399, d1, d2, d3}; //added RFC 3339 date format (XW-473)&&&&&&&&&&&&&&&&return&&&&&&&&}其中SHORT、MEDIUM、LONG在JDK中的DateFormat类中有说明。从这句DateFormat rfc3399 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");可以看出,Struts2硬编码使用了这样一种格式。然而,Struts2中这种格式是放在最后的,为啥只有同事的IE浏览器测试时使用的是这种格式呢?(在调试时,用同时IE,日期输入中按这种格式输入,还真的没有问题了)这说明,同时的电脑中,前面六种DateFormat都没有匹配,查看DateFormat中关于SHORT、MEDIUM、LONG的说明,可以知道,对于yyyy-MM-dd这种日期类型,在英语语言中是没法匹配的,由于Struts2匹配日期时,使用了Locale,可见,同事的IE浏览器默认的语言环境是英语。一经查看,果然如此,把中文设置为默认语言环境,再测试,没问题了。终于知道了原因。个人觉得,Struts2中,最后一种日期模式写死成美国标准,不是很好。针对这个问题,我们没法要求客户一定设置中文为默认浏览器的语言环境。因而对于Date类型的转换,可以自己定义一个转换器。以下来自/wiki/struts2/1365-passing-parameters-in-struts2 中的一个类型转换器定义(不适合国际化的环境),如需要,你可以定义自己的转换器:public class DateConverter extends DefaultTypeConverter {&&&&&&&&private static final Logger logger = Logger.getLogger(DateConverter.class);&&&&&&&&private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";&&&&&&&&private static final String DATE_PATTERN = "yyyy-MM-dd";&&&&&&&&&&&&&&&&private static final String MONTH_PATTERN = "yyyy-MM";&&&&&&&&/**&&&&&&&& * Convert value between types&&&&&&&& */&&&&&&&&@SuppressWarnings("unchecked")&&&&&&&&public Object convertValue(Map ognlContext, Object value, Class toType) {&&&&&&&&&&&&&&&&Object result = null;&&&&&&&&&&&&&&&&if (toType == Date.class) {&&&&&&&&&&&&&&&&&&&&&&&&result = doConvertToDate(value);&&&&&&&&&&&&&&&&} else if (toType == String.class) {&&&&&&&&&&&&&&&&&&&&&&&&result = doConvertToString(value);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&return&&&&&&&&}&&&&&&&&/**&&&&&&&& * Convert String to Date&&&&&&&& *&&&&&&&& * @param value&&&&&&&& * @return&&&&&&&& */&&&&&&&&private Date doConvertToDate(Object value) {&&&&&&&&&&&&&&&&Date result = null;&&&&&&&&&&&&&&&&if (value instanceof String) {&&&&&&&&&&&&&&&&&&&&&&&&result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });&&&&&&&&&&&&&&&&&&&&&&&&// all patterns failed, try a milliseconds constructor&&&&&&&&&&&&&&&&&&&&&&&&if (result == null && StringUtils.isNotEmpty((String)value)) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&try {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&result = new Date(new Long((String) value).longValue());&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} catch (Exception e) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&logger.error("Converting from milliseconds to Date fails!");&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&} else if (value instanceof Object[]) {&&&&&&&&&&&&&&&&&&&&&&&&// let's try to convert the first element only&&&&&&&&&&&&&&&&&&&&&&&&Object[] array = (Object[])&&&&&&&&&&&&&&&&&&&&&&&&if ((array != null) && (array.length &= 1)) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&value = array[0];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&result = doConvertToDate(value);&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&} else if (Date.class.isAssignableFrom(value.getClass())) {&&&&&&&&&&&&&&&&&&&&&&&&result = (Date)&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&return&&&&&&&&}&&&&&&&&/**&&&&&&&& * Convert Date to String&&&&&&&& *&&&&&&&& * @param value&&&&&&&& * @return&&&&&&&& */&&&&&&&&private String doConvertToString(Object value) {&&&&&&&&&&&&&&&&SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);&&&&&&&&&&&&&&&&String result = null;&&&&&&&&&&&&&&&&if (value instanceof Date) {&&&&&&&&&&&&&&&&&&&&&&&&result = simpleDateFormat.format(value);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&return&&&&&&&&}}可以将该转换器注册为全局的:在classpath下建立xwork-conversion.properties文件,内容为:java.util.Date=你的类型转换器的完整限定类名自此,该问题圆满解决。 本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》
18:11:33 19:58:14 12:43:46 16:45:35 15:51:28 18:18:19您现在的位置:&&>>&电脑频道&>>&&>>&Struts2上传文件问题,在linux下出错 - Java / Web 开发
Struts2上传文件问题,在linux下出错 - Java / Web 开发
作者:佚名&&&&来源:网友投稿&&&&点击数:&&&&更新时间:
我采用struts2,上传在windows下是没有问题的,但是在linux下上传,我在服务器上的项目路径找不到上传的文件,是不是我代码写的有问题?
private File myF// 实际上传文件private String myFilecontentT// 文件的内容类型private String myFileFileN// 上传文件名private String optionVprivate static int BUFFER_SIZE = 16 * 1024; */public String importCustomer(){System.out.println(&:::::::::导入数据::::::::&);System.out.println(&uploadFileName::&+this.myFileFileName);System.out.println(optionValue);//页面下拉框传进的值String myFileFileNameNew = new Date().getTime() + &_& + myFileFileN// 毫秒数+文件姓名
String targetPath = ServletActionContext.getServletContext().getRealPath(&/&)+&uploadtelnumber&+File.separator+myFileFileNameN System.out.println(targetPath);File targetFile = new File(targetPath);copyFile(this.myFile, targetFile);String importResult = customerService.importnumber(targetFile,this.optionValue);System.out.println(importResult);if(null == importResult || importResult.equals(&&)){return &false&;}if(importResult.equals(&1&)){return &false&;}else{return &importResult&;}}public void copyFile(File src, File target) {InputStream is =OutputStream os =byte[] number = new byte[BUFFER_SIZE];try {is = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);os = new BufferedOutputStream(new FileOutputStream(target),BUFFER_SIZE);while (is.read(number) & 0) {os.write(number);}os.close();is.close();} catch (Exception ex) {}}请大家帮忙,在线等结果,谢谢答案1------其他回答(10分)---------报错了吗?把异常打印出来吧catch (Exception ex) { //打印} ------其他回答(10分)---------报什么错呢?或者log文件里有什么信息么?System.out.println(targetPath); 这个打出来是什么?------其他回答(10分)---------在linux下,运行,并把log打出来,看程序走到哪里停下来了。------其他回答(70分)---------可能是文件夹访问权限的问题,你看看权限是否设置好。查看和“java”有关的所有文章
上一篇文章:
下一篇文章:struts2 ajax访问Action linux和windows下的路径问题 - 阳光总在风雨后001 - 博客园
struts2 ajax访问Action linux和windows下的路径问题:
&& 如果路径*.action路径虽然是对了,也输对了,struts2路径访问的package的namespase空间名是空的,可是在访问的时候路径上*.action前面多加了空间名
虽然在windows下运行时不会报错,因为已经拦截到.action前面的所有路径并根据路径调用action对应的方法,可是在linux下就不行了,因为linux比较严谨,无缘无故出现了
多加空间名就给你报错,这个问题出现在我做的可编辑表格的路径出现过:如
很明显是多加了struts.xml里action的namespase空间名task
文章 - 200

我要回帖

更多关于 linux struts2 的文章

 

随机推荐