1 结构
1.1 总体结构
Struts理论上由3个文件Jsp,action类,form类。其中,form类继承了ActionForm,主要是set,get等方法,还有reset及validate方法(),,form类不属于控制层,所以不进行业务逻辑的处理。他的功能就是提供一个控制层与页面对话的一个窗口,以便让控制层与视图层沟通。一个form类对应页面一个表单。
而action类(C层)继承了Action则为主要的类,必须覆盖excute方法,原类的此方法返回null.动作流程在这里编写,一般将逻辑封装在bean(M层)中,由action来调用,这样可使逻辑变得清晰。一个action对应一个(或多个)动作(比如提交,link).
1.1.1 流程:
1.1.1.1 本例jsp页为action="/HelloWorld.do"。则在web.xml中寻找<url-pattern>属性为*.do的<servlet-name>的元素。
1.1.1.2 按照<servlet-name>的名称action找到对应的<servlet>
1.1.1.3 Servlet按照用户请求action="/HelloWorld.do",在config.xml中检索path为"/HelloWorld.do"的<action>
1.1.1.4 ActionServlet根据name属性创建一个HelloForm对象,将表单数据提交给对象,并且将对象保存在scope指定的范围内。
1.1.1.5 如果<action>的validate属性为true,则执行ActionForm的validate方法。
1.1.1.6 如果验证失败,则validate方法将ActionErrors对象保存在scope范围内,根据<action>属性,页面跳转。<html:errors />负责读取ActionErrors对象,显示出来。
1.1.1.7 验证成功则返回的ActionErrors中不包含任何ActionMessage对象,然后开始创建Action对象,调用其execute()方法。
1.1.2 使用方法
1.1.2.1 调bean
在jsp中使用
<logic:present name="HelloForm" scope="request">
判断request中叫HelloForm得bean是否存在,如果存在,则
<bean:write name="HelloForm" property="userName" />
1.1.3 actionForm
属于视图组件,提交表单后,struts自动将表单数据提交给actionForm Bean中,此类的方法包括,jsp页请求的set,get和reset,validate方法。Struts首先运行reset方法来重新设置默认值,然后运行validate,进行表单验证,如果发生错误,则创建ActionErrors实例,使用add(“username”,new ActionMessage(“”))方法添加错误,在return实例。如果发生错误,<html:errors>负责将保存在request中的ActionErrors的错误表示出来。
一个画面原则上应该对应一个form,当迁移的时候,Action类中可以使用多个form,一个为本form,其他为迁移先或者迁移元,而迁移先画面则使用自己的form,这样可以避免一个画面使用多个form,但是form的判断能力(validate)可能受到了限制(还有待考察)。
1.1.4 Action类
1.1.4.1 取得属性
mapping.getInput()得到<action-mapping>中的input属性.
1.1.4.2 画面迁移
return (mapping.findForward("SayHello"))返回目标网页
1.1.4.3 改变请求,与网页进行交互
在Action类中,可以实体化ActionForm,然后设置其属性,例:
FormBasicForm fbf = (FormBasicForm) form;
fbf.setName(“dzp”);
达到改变请求的目的,而由于页面使用了struts标签,所以自动从名称相同的请求中取得数据.此外,不同控件可以使用相同的property,从而达到一个请求对应多个控件的目的。
1.2 配置文件
1.2.1 config.xml
<form-beans>
<form-bean name="RegisterForm" type="app.RegisterForm">
</form-bean>
</form-beans>
这里type指向了form类,而name则为他定义了一个名字
<action-mappings>
<action path="/test" type="app.RegisterAction"
name="RegisterForm" scope="request" input="/register.jsp">
<forward name="success" path="/success.jsp">
</forward>
<forward name="failure" path="/failure.jsp">
</forward>
</action>
</action-mappings>
这里path标示了这个action的代号,和jsp中的<html:form action="/test.do">名称相同.
type指向了action类。
name对应了form类。
scope指范围。
input指的是错误信息(ActionErrors 类)输出页面,当Form类中validate方法return的errors不为空时,将转向input所指页面,以输出错误信息。
<struts-config>
<form-beans>
<form-bean name="HelloForm" type="hello.HelloForm"/>
</form-beans>
<action-mappings>
<action path = "/HelloWorld"
type = "hello.HelloAction"
name = "HelloForm"
scope = "request"
validate = "true"
input = "/hello.jsp">
<forward name="SayHello" path="/hello.jsp" />
</action>
</action-mappings>
<message-resources parameter="hello.application"/>
<form-beans>配置了ActionForm Bean
<action-mappings>中,path为jsp页引用action类时所要调用的名称。Type为action本身。Name为ActionForm类名,与<form-beans>种对应的ActionForm名相同。scope存在范围。Validate是否执行表单验证。Input为验证失败时的转发路径。
message-resources为resource Bundle使用的消息资源文件,本例为hello包下的application.properties文件。
1.3 乱码
1.3.1 Jsp页面上的乱码问题,表现为,使用eclipse时,jsp页面上的文字,经常突然变为乱码,原因为eclipse的编译方式默认的ms932,改成Other(UTF-8),则解决。Windows - Preference - General - Workspace - Text file encoding
1.3.2 Request中日文乱码,表现为,页面中传到formAction的request为乱码,即使在formAction中处理也无效。
解决方法:加过滤器
创建Trans.java 进行过滤
package common;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class Trans extends RequestProcessor{
public Trans(){}
protected boolean processPreprocess( HttpServletRequest request,
HttpServletResponse response ){
try{
request.setCharacterEncoding("shift_jis");
}
catch(Exception ex){
ex.printStackTrace();}
return true;
}
}
然后再struts-config.xml中定义,
<controller processorClass="common.Trans" />我放在了action后面。
更改的重点为编码方式必须为“shift_jis”,“UTF-8”则不可以。
如果不是struts,在web.xml中添加过滤器也可以,但可能因为版本问题,我这里的eclipse生成的web.xml的dtd版本为2.2,不认识<filter>,有红X.但经过测试,却可以强行编译,运行,达到过滤的效果。
1.3.3 在url中拼写参数时出现的乱码
首先,在网上查了查,结果都是让我转字节码之类的方法,于是我设置了
new String(request.getParameter("a ").getBytes("ISO8859_1"),"shift_jis");
但经过百般修改,试验均无效。翌日,突然想起以前做asp时。使用了escape方法来进行转码,和unescape进行解码,终于得出正确结果。
public class EscapeUnescape
{
public static String escape (String src)
{
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length()*6);
for (i=0;i<src.length() ;i++ )
{
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else
if (j<256)
{
tmp.append( "%" );
if (j<16)
tmp.append( "0" );
tmp.append( Integer.toString(j,16) );
}
else
{
tmp.append( "%u" );
tmp.append( Integer.toString(j,16) );
}
}
return tmp.toString();
}
public static String unescape (String src)
{
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos=0,pos=0;
char ch;
while (lastPos<src.length())
{
pos = src.indexOf("%",lastPos);
if (pos == lastPos)
{
if (src.charAt(pos+1)=='u')
{
ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);
tmp.append(ch);
lastPos = pos+6;
}
else
{
ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
tmp.append(ch);
lastPos = pos+3;
}
}
else
{
if (pos == -1)
{
tmp.append(src.substring(lastPos));
lastPos=src.length();
}
else
{
tmp.append(src.substring(lastPos,pos));
lastPos=pos;
}
}
}
return tmp.toString();
}
}
转自:http://blog.csdn.net/emu/archive/2002/04/22/16337.aspx
2 标签
2.1 <html:errors property="username2"/>
Property属性对应ActionErrors.add(String,ActionMessage)中的String
2.2 <html:link>
paramId: 参数名
paramName: 对象名
paramProperty: 对象中的属性
<html:link page="/link.do" paramId="p" paramName="form" paramProperty="param">单参单值</html:link>
<html:link page="/link.do" name="dataForm" property="param">多参单值</html:link> paramId="p" paramName="dataForm" paramProperty <html:link page="/link.do" paramId="p" paramName="dataForm" paramProperty="param">单参单值</html:link><br/>
<html:link page="/link.do" name="dataForm" property="paramSingleMap">多参单值</html:link><br/>
<html:link page="/link.do" paramId="p" paramName="dataForm" paramProperty="param">单参单值</html:link><br/>
<html:link page="/link.do" name="dataForm" property="paramSingleMap">多参单值</html:link><br/>
3 其他
3.1 ActionMessage 从资源文件
<message-resources parameter=""/>中获得对应的message
New ActionMessage("hello.talk.to.monster", name1,name2,…));
将资源文件中对应的{0}换成name1中的内容,以此类推。
3.2 request
request.setAttribute("a","111")
为request中a的请求赋值。
另:response.sendRedirect("a.jsp");无法传递request
request.getRequestDispatcher("a.jsp").forward(request,response);才能共享request中数据。
3.3 ActionMapping
ActionMapping. getAttribute
得到被定义的formBean的名称,返回String类型
3.4 方法
3.4.1 isCancelled
if(isCancelled(request))判断取消时间是否发生.
4 实例
4.1 1个from对应多个action
可以在javaScript中作,但要注意指定action时要使用绝对路径
document.Form[0].action ="<%=request.getContextPath()%>/ApplyBtn.do";
这是因为struts已经为你搭好了框架,帮你写上了,而from本身是不清楚地,所以在javaScript中只好自己写。
4.2 标签中使用变量
以readonly属性为例,注意这里变量必须用布尔值
<%boolean bolReadOnly = applyForm.isReadOnly();%>
<html:text readonly="<%= bolReadOnly%>"/>
分享到:
相关推荐
Moth Vista Demo C#; vista 界面的代码。reship
基于java的校园美食交流系统设计与实现.docx
均包含代码,文章,部分项目包含ppt
基于python的酒店评论中文情感分析系统源码+设计文档+数据集.zip基于python的酒店评论中文情感分析系统源码+设计文档+数据集.zip基于python的酒店评论中文情感分析系统源码+设计文档+数据集.zip 个人大四的毕业设计、课程设计、作业、经导师指导并认可通过的高分设计项目,评审平均分达96.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 [资源说明] 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设或者课设、作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96.5分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),供学习参考。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
基于Django框架开发的协同过滤算法小说推荐系统是一种利用用户行为数据来提供个性化小说推荐的应用。该系统通过分析用户的历史阅读记录、评分和反馈,发现用户之间的相似性或小说之间的相似性,进而为用户推荐可能感兴趣的小说。以下是该系统可能包含的关键特性: 1. **用户账户管理**:允许用户创建账户、登录和编辑个人信息,同时跟踪用户的阅读历史和评分。 2. **小说数据库**:构建一个包含大量小说信息的数据库,每本小说都有详细的元数据,如作者、出版年份、流派、标签等。 3. **协同过滤引擎**:实现协同过滤算法,包括用户-用户协同过滤和项目-项目协同过滤,以发现相似用户或相似小说。 4. **推荐生成**:根据协同过滤引擎的结果,生成个性化的小说推荐列表,并提供给用户。 5. **评分系统**:允许用户对小说进行评分,这些评分数据将用于训练推荐算法,提高推荐的准确性。 6. **用户界面**:设计直观、易用的用户界面,使用户能够轻松浏览推荐的小说、查看详情和进行评分。 7. **搜索和筛选功能**:提供强大的搜索功能,允许用户根据标题、作者或流派等关键词搜索小说,并提供筛选
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
内容概要:本文是关于2020年度数字孪生技术的最新进展和发展趋势的研究报告。文中对数字孪生技术及其应用场景作出了详细的阐述,特别强调了数字孪生在智能制造、智慧城市、产品开发等多个领域内的实际应用成果,并讨论了数字孪生带来的信息安全方面的挑战和解决方案。 适用人群:面向希望深入了解和应用数字孪生技术的企业管理人员、研发工程师和学者。 使用场景及目标:适用于企业或机构寻求改进产品设计、生产制造、城市管理等领域效能的情况,助力相关人员理解和实现更加精细的管理决策和模拟预测,进而优化资源配置与提升工作效率。 其它说明:介绍了多项核心技术,包括但不限于数据收集、建模仿真、模型管理系统等,并分享了多个数字孪生的真实应用案例以展示其实效。
基于java的的德云社票务系统的设计与实现.docx
基于java的宜佰丰超市进销存管理系统设计与实现.docx
基于java的削面快餐店点餐服务系统的设计与实现.docx
用户体验分享和讨论.ppt
均包含代码,文章,部分项目包含ppt
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、3本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、本项3目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdmE.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
均包含代码,文章,部分项目包含ppt
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
志愿者招募网站,在网站首页可以查看首页,组织信息,志愿活动,新闻资讯,个人中心,后台管理等内容,并进行详细操作 用户注册,在用户注册页面通过填写账号,密码,确认密码,姓名,手机,所在学校,邮箱,验证码等信息进行注册操作 组织信息,在组织信息页面可以查看组织名称,组织编号,组织宣言,负责人,联系电话等内容,并进行评论和收藏操作 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog
全代码在里面,学完Java实训写出来的Java图书馆代码
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。