struts2怎么解决(struts2解决了什么问题)

2024-06-10 21:57:22 2

struts2怎么解决(struts2解决了什么问题)

本文目录

struts2解决了什么问题

Struts框架主要解决的问题是对MVC设计模式进行了封装。使其可以方便的使用。 Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。 Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。浏览器发送一个请求。核心控制器FilterDispatcher根据请求决定调用合适的Action。WebWork的拦截器链自动对请求应用通用功能,如验证等。回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作。Action的execute方法处理结果信息将被输出到浏览器中,支持多种形式的视图。 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph Notation Language)。绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的声明周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的声明周期。 从某种程度上看,Struts2是从WebWork2上升级得到的。甚至Apache的官方文档也讲:WebWork2到Struts2是平滑的过渡。我们甚至也可以说Struts2就是WebWork2.3而已。在很多方面Struts仅仅是改变了WebWork下的名称。

Struts2中action的方法被执行两次,该怎么处理

  Struts2中action的方法被执行两次;  解决办法:  1、点提交按钮的时候太快了导致提交出现两次重复的;   (1)提交按钮至灰;  (2)请求路径加上加上标志;  2、程序中出现两次调用这个action,检查调用方法;

struts 2问题,如下图,怎么解决啊

你这result返回type是dispatcher有点相当于forword方式跳转,因为url相对址址改变了,所以只有显示html但找不到相应的css文件。要想返回原来的index页面的话可以这样:《result name="success" type="redirect"》index.html《/result》或者其他几种type也可以试试,默认共有以下几种《result-types》 《result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/》 《result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/》 《result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/》***隐藏网址*** 《result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/》 《result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/》 《result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/》 《result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/》 《result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/》 《result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /》 《/result-types》

java struts2.json.JSONException怎么解决

Servlet的不写了,也就是how to use HttpRequest和HttpResponse。主要是在Struts2身上。以文章所描述的方法似乎总是差了那么点东西:可以不使用那么多配置吗?于是研究了些时间,可以这么玩:1)Eclipse引用Struts2的JSON plug-in和Convertion plug-in。2)struts.xml这么写:《?xml version="1.0" encoding="UTF-8"?》《!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"***隐藏网址***《struts》 《!-- 把它设置为开发模式,发布时要设置为false --》 《constant name="struts.devMode" value="true" /》 《!-- 设置在class被修改时是否热加载,发布时要设置为false --》 《constant name="struts.convention.classes.reload" value="true"/》 《!-- 自动动态方法的调用,使用这个设置后可以这样调用:action!method --》 《constant name="struts.enable.DynamicMethodInvocation" value="true" /》 《!-- 指定jsp文件所在的目录地址 --》 《constant name="struts.convention.result.path" value="/WEB-INF/content/" /》 《!-- 用于配置包名后缀。默认为action、actions、struts--》 《!-- 《constant name="struts.convention.package.locators" value="controller" /》 --》 《constant name="struts.convention.action.packages" value="com.my.controller"》《/constant》 《!-- 用于配置类名后缀,默认为Action,设置后,Struts2只会去找这种后缀名的类做映射 --》 《constant name="struts.convention.action.suffix" value="Controller"/》 《!-- 设置即使没有@Action注释,依然创建Action映射。默认值是false。因为Convention-Plugin是约定优于配置的风格, 可以不通过注解根据预先的定义就能访问相应Action中的方法 --》 《constant name="struts.convention.action.mapAllMatches" value="true"/》 《!-- 自定义jsp文件命名的分隔符 --》 《constant name="struts.convention.action.name.separator" value="-" /》 《!-- 国际化资源文件名称 --》 《constant name="struts.custom.i18n.resources" value="i18n" /》 《!-- 是否自动加载国际化资源文件 --》 《constant name="struts.i18n.reload" value="true" /》 《!-- 浏览器是否缓存静态内容 --》 《constant name="struts.serve.static.browserCache" value="false" /》 《!-- 上传文件大小限制设置 --》 《constant name="struts.multipart.maxSize" value="-1" /》 《!-- 主题,将值设置为simple,即不使用UI模板。这将不会生成额外的html标签 --》 《constant name="struts.ui.theme" value="simple" /》 《!-- 编码格式 --》 《constant name="struts.i18n.encoding" value="UTF-8" /》 《!-- 设置默认package --》 《constant name="struts.convention.default.parent.package" value="default"》《/constant》 《package name="default" namespace="/" extends="json-default"》 《interceptors》 《interceptor name="cacheInterceptor" class="com.my.interceptor.CacheInterceptor" /》 《interceptor-stack name="cacheStack"》 《interceptor-ref name="defaultStack"》《/interceptor-ref》 《interceptor-ref name="paramsPrepareParamsStack"》《/interceptor-ref》 《interceptor-ref name="cacheInterceptor"》《/interceptor-ref》 《/interceptor-stack》 《/interceptors》 《default-interceptor-ref name="cacheStack"》《/default-interceptor-ref》 《default-action-ref name="index" /》 《global-results》 《!-- 《result name="error"》/error.jsp《/result》 --》 《result name="json" type="json"》 《!-- 是否包括父类的属性输出,默认true. --》 《!-- 《param name="ignoreHierarchy"》false《/param》 --》 《!-- 是否输出null值的属性,默认false --》 《!-- 《param name="excludeNullProperties"》true《/param》 --》 《/result》 《/global-results》 《global-exception-mappings》 《exception-mapping exception="java.lang.Exception" result="error"/》 《/global-exception-mappings》 《/package》《/struts》上面有两个《param/》注释了,使用方法已经有写在里头,如果需要,可以加上或在类中加入@Results。关键点在于把《package /》中的 extends设置为json-default,以及在global-results中的这个json result。 3)加入一个UserControl.javapackage com.my.controller;import java.io.IOException;import java.util.ArrayList;import java.util.List;import net.sf.json.JSONObject;import com.my.beans.User;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UserController extends ActionSupport { private User user = new User(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } private String json; public String getJson() { return json; } public void setJson(String json) { this.json = json; } private List《User》 users = new ArrayList《User》(); public List《User》 getUsers() { return users; } public void setUsers(List《User》 users) { this.users = users; } @Override public String execute() throws Exception { return SUCCESS; } public String loadModel() throws IOException { System.out.println("json=" + getJson()); System.out.println("user=" + getUser().getUsername()); System.out.println("users=" + getUsers().size()); User userBean = new User(); userBean.setUsername("robin"); users.add(userBean); this.setJson(JSONObject.fromObject(userBean).toString()); return "json"; } }这里没有什么特别的东西,就是一些getter/setter,以及一个loadModel() action 4)JS对JSON的提交:var url = "user!loadModel";var params = { "json": "json string", "user.username" : "zhang", "users.username" : "zhang1", "users.password" : "1", "users.username" : "zhang2", "users.password" : "2",};$.post(url, params, function callback(data) { console.log(data)});这里是重点。可以看到这段JS里的params有:json/user.username/users.username其中:a) json对应的就是上页java中的getJson/setJson,这个东东列出来是可以用于在页面与服务器之间传递JSON字符串用的。如果你需要在action中输出或提交json的字符串,它有很大作用,直接到位。但是缺点是要自己去将对象转化为json string以及json string转化为对象。 b) user.username这样的写法可以在后台java中直接转化成了对象。user.username中的user就是java中的user object。 c) users.username这可以直接转化成后台java中的List《user》对象users。 可以看出,Struts2是可以完成将json直接转化成java object的。不过这样的写法,不是好的。因为这个JS的JSON只能称作是一个字符串拼接,不是一个JSON object还有一种方法,使用ModelDriven:package com.my.controller;import com.my.beans.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;@SuppressWarnings("serial")public class UserModelController extends ActionSupport implements ModelDriven《Object》 { private User user = new User(); @Override public Object getModel() { return user; } @Override public String execute() throws Exception { return SUCCESS; } public String load() { return "json"; }}使用ModelDriven,可以JS直接提交JSON了:var url = "user-model!load";var params = { "username": "zhang1", "password": "123456"};$.post(url, params, function callback(data) { console.log(data)});这个params才是真正的JSON object,它会被ModelDriven直接转成user model。但是:它似乎不能提交List object。至今写文时也没有找到在ModelDriven中可以提交JSON array to List的方法。如果需要提交复杂的JSON到服务器,如果你用的是Struts,使用第一种方法的json的getter/setter吧。

您好,struts2中页面抛出异常时后台控制台无法显示错误堆栈,你是怎么解决的啊

你 save了一个瞬态实例。也就是说,A和B有关联的话,其中A引用B.如果你持久化A对象的话,应该先将其关联的B对象先持久化才可以。否则就会出现transientObject Exception这个异常。一种解决办法是配置文件中加入cascade级联属性。会在你持久化A对象的时候自动将其关联对象持久化。

Struts2 报这样的错误,怎么解决

这个不是包冲突造成的,包冲突会报classnotfoundexception这个错误是由于没有导入struts核心包造成的,把包结构图给我看下。

struts2怎么解决(struts2解决了什么问题)

本文编辑:admin

本文相关文章:


struts2怎么解决(struts 2问题,如下图,怎么解决啊)

struts2怎么解决(struts 2问题,如下图,怎么解决啊)

本文目录struts 2问题,如下图,怎么解决啊Struts2中action的方法被执行两次,该怎么处理java struts2.json.JSONException怎么解决struts2解决了什么问题您好,struts2中页面抛出异常时后

2024年7月9日 09:14

更多文章:


comexception异常类型(“System.Runtime.InteropServices.COMException”类型的未经处理的异常出现在 SendEmail.exe 中)

comexception异常类型(“System.Runtime.InteropServices.COMException”类型的未经处理的异常出现在 SendEmail.exe 中)

本文目录“System.Runtime.InteropServices.COMException”类型的未经处理的异常出现在 SendEmail.exe 中未处理的“System.Runtime.InteropServices.COMExc

2024年7月18日 02:33

access翻译成中文(access翻译为“进入“和别的同意思的单词的区别)

access翻译成中文(access翻译为“进入“和别的同意思的单词的区别)

大家好,access翻译成中文相信很多的网友都不是很明白,包括access翻译为“进入“和别的同意思的单词的区别也是一样,不过没有关系,接下来就来为大家分享关于access翻译成中文和access翻译为“进入“和别的同意思的单词的区别的一些

2024年7月22日 10:25

sql语句查询5到10的数据(VB 查询SQL数据库指定范围(5到10行)的数据)

sql语句查询5到10的数据(VB 查询SQL数据库指定范围(5到10行)的数据)

大家好,关于sql语句查询5到10的数据很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于VB 查询SQL数据库指定范围(5到10行)的数据的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本

2024年7月15日 15:55

asp源代码js统计(怎样用asp写代码来实现统计在线人数)

asp源代码js统计(怎样用asp写代码来实现统计在线人数)

“asp源代码js统计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看asp源代码js统计(怎样用asp写代码来实现统计在线人数)!本文目录怎样用asp写代码来实现统计在线人数统计数据库记录总数的具体asp代码怎么写ASP统

2024年7月28日 00:27

个人主页不显示朋友圈是怎么回事(微信里别人看不到自己的朋友圈是什么原因)

个人主页不显示朋友圈是怎么回事(微信里别人看不到自己的朋友圈是什么原因)

本文目录微信里别人看不到自己的朋友圈是什么原因为什么个人资料上没有朋友圈入口为什么别人点开我的主页朋友圈不显示了点开朋友的微信个人资料里不显示朋友圈是怎么回事微信没有朋友圈那一栏是怎么回事微信里别人看不到自己的朋友圈是什么原因这可能是因为你

2024年7月8日 05:53

代码转化为流程图(大家大家,请问这个python代码怎么转换成流程图啊需要比较规范的!)

代码转化为流程图(大家大家,请问这个python代码怎么转换成流程图啊需要比较规范的!)

大家好,今天小编来为大家解答以下的问题,关于代码转化为流程图,大家大家,请问这个python代码怎么转换成流程图啊需要比较规范的!这个很多人还不知道,现在让我们一起来看看吧!本文目录大家大家,请问这个python代码怎么转换成流程图啊需要比

2024年8月6日 17:30

华为进程设置(华为meta40后台进程限制变来变去)

华为进程设置(华为meta40后台进程限制变来变去)

大家好,今天小编来为大家解答以下的问题,关于华为进程设置,华为meta40后台进程限制变来变去这个很多人还不知道,现在让我们一起来看看吧!本文目录华为meta40后台进程限制变来变去华为手机怎么设置进程数华为的后台进程设置为什么一关机就恢复

2024年8月3日 14:30

11位数字有固定的数字不变生成器(11位条码怎么生成)

11位数字有固定的数字不变生成器(11位条码怎么生成)

各位老铁们,大家好,今天由我来为大家分享11位数字有固定的数字不变生成器,以及11位条码怎么生成的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录11

2024年9月4日 20:05

日期如何写,怎么写?日期的表示方法有几种

日期如何写,怎么写?日期的表示方法有几种

本文目录日期如何写,怎么写日期的表示方法有几种日期怎么写才是正确的格式日期的正确写法日历上的日期怎么表示日期的格式怎么写日期写法是什么呢什么叫日期什么是日期 日期是什么意思日期格式写法有几种日期如何写,怎么写日期的书写分为英式与美式两种:1

2024年4月8日 04:00

tower block(20号楼B座怎么翻译用block还是tower)

tower block(20号楼B座怎么翻译用block还是tower)

本文目录20号楼B座怎么翻译用block还是tower1E Kent Ridge Road NUHS Tower Block, Level 6 Singapore 119228这个地址的中文翻译是什么啊tower怎么读20号楼B座怎么翻译用

2023年9月13日 22:20

weui使用(如何利用weui作为前端来开发)

weui使用(如何利用weui作为前端来开发)

各位老铁们好,相信很多人对weui使用都不是特别的了解,因此呢,今天就来为大家分享下关于weui使用以及如何利用weui作为前端来开发的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录如何利用weui作为前端来开发

2024年9月10日 07:35

linux用户环境变量(linux怎么设置环境变)

linux用户环境变量(linux怎么设置环境变)

本文目录linux怎么设置环境变linux环境变量的设置linux怎么设置环境变1.系统级:(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/

2024年7月15日 17:04

spring怎么读英文语音(在英语真的有化浊音吗 比如学生 student 本该读s tui den t 但是都是读s diu)

spring怎么读英文语音(在英语真的有化浊音吗 比如学生 student 本该读s tui den t 但是都是读s diu)

本文目录在英语真的有化浊音吗 比如学生 student 本该读s tui den t 但是都是读s diu简单又有效的英语单词记忆法草莓英文怎么读语音樱桃的英语怎么读语音 如何英语表达樱桃在英语真的有化浊音吗 比如学生 student 本该

2024年7月12日 16:42

ulike蓝宝石冰点脱毛仪靠谱吗(整理关于Ulike,慕金,OSD这几款脱毛仪的测评)

ulike蓝宝石冰点脱毛仪靠谱吗(整理关于Ulike,慕金,OSD这几款脱毛仪的测评)

本文目录整理关于Ulike,慕金,OSD这几款脱毛仪的测评家用脱毛仪那个牌子好性价比高Ulike新出的蓝宝石冰点脱毛仪怎么样有人用过吗韩国ulike激光脱毛仪怎么样ulike脱毛仪外贸版是真的吗有人用过Ulike蓝宝石Air冰感脱毛仪吗好不

2024年5月18日 17:14

静态网页是什么?静态网页和动态网页的区别

静态网页是什么?静态网页和动态网页的区别

本文目录静态网页是什么静态网页和动态网页的区别什么是静态网页哪些网页是静态网页静态页面是什么意思求简单的HTML静态页面代码如何把静态页面改成CMS模板求html静态页面的代码,简单点的怎么把下载的网页模板编辑和发布如何将静态网页 css

2024年5月15日 21:50

dubbo monitor(多个不同应用注册了相同服务,请检查demo-provider和dubbo-monitor-x中是否有误暴)

dubbo monitor(多个不同应用注册了相同服务,请检查demo-provider和dubbo-monitor-x中是否有误暴)

大家好,如果您还对dubbo monitor不太了解,没有关系,今天就由本站为大家分享dubbo monitor的知识,包括多个不同应用注册了相同服务,请检查demo-provider和dubbo-monitor-x中是否有误暴的问题都会给

2024年9月1日 07:10

phpcmsx(phpcms论坛怎样安装)

phpcmsx(phpcms论坛怎样安装)

本文目录phpcms论坛怎样安装请问phpcms怎么能在内容页下生成参数 图片 等等页面phpcms在本地修改好的模板,上传到服务器就更新不了了phpcms后台登陆验证码显示异常phpcms请问能不能支持批量上传图片还有就是PCv9的编辑器

2024年5月21日 21:18

result in什么意思(resultat与resultin区别)

result in什么意思(resultat与resultin区别)

本文目录resultat与resultin区别result in 是啥意思result in什么意思中文翻译result in 是导致的意思 cause也是导致的意思 两者有什么区别resultat与resultin区别一、指代不同1、re

2024年7月22日 07:19

小程序 模块化(开发一个小程序的周期是多长)

小程序 模块化(开发一个小程序的周期是多长)

本文目录开发一个小程序的周期是多长中国零售业面临重大改革,小程序是否能帮助线下店撬动线上市场小程序定制开发一般需要多久时间开发一个小程序的周期是多长做一个微信小程序要多久?小程序开发需要多久?其实,一个小程序的开发时间,是根据不同的需求、不

2024年7月17日 23:26

python编程案例教程教材答案(python编程题!!!)

python编程案例教程教材答案(python编程题!!!)

其实python编程案例教程教材答案的问题并不复杂,但是又很多的朋友都不太了解python编程题!!!,因此呢,今天小编就来为大家分享python编程案例教程教材答案的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目

2024年9月4日 12:30

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索