尽量减少控制器责任

理想情况下,Spring MVC应用程序中的控制器必须接收请求,将请求发送到API,将(调用的)结果加载到模型上(对于视图随后呈现它)并转发到视图。 他们不应该再做了。 我的控制器今天所做的远不止这些,我想将某些重要性从控制器转移到其他API。 我今天的应用程序设计(非常典型): controller Service API DAO DB 今天的控制器填补了Web应用程序需要的内容和Service API提供的内容之间的差异。 我想在控制器和服务API之间放置额外的层/层,以便在这个delta处咀嚼。 我的问题是这些层应该是什么层以及这些新层的责任应该是什么? 我目前的想法如下 controller controller helper Business API Service API DAO DB 控制器助手(Web上下文感知 – 将依赖于Model,HttpServlet和其他Web上下文类): 将实体转换为DTO对象(2路) 将ID解析为实体。 例如,Controller查找学生ID(使用密钥)并将其转换为Student实体。 Business API(没有Web上下文依赖 – 可以通过JUnit测试): 充当门面。 调用多个服务API以实现一个业务请求。 提供专门用于Web应用程序的API。 你会以不同的方式解决这个问题吗? 是否有与此特定问题相关的资源(书籍,文章等)? 之前的一些讨论没有回答我的问题: 设计mvc控制器层 服务层=应用层= GRASP控制器层 移动validation,Html助手到MVC中的服务层 谢谢,维杰

从WiFi连接切换到3g导致连接挂起?

我有一个连接到Web服务的应用程序。 我可以使用WIFI或3G连接到Web服务,没有任何问题,前提是我在应用程序的生命周期内保持对连接类型的忠诚。 那就是我不从WIFI切换到3G。 如果我从WIFI切换到3G,我再也无法得到响应。 我的联系一直在等待回应。 我尝试了下面的4个场景。 我只对第三种情况有疑问。 可能是什么问题呢? 第一种场景:连接始终在WIFI上(好) 应用程序使用WIFI连接到Web服务。 回复收到成功。 应用程序使用WIFI再次连接到Web服务。 响应成功收到。 第二种场景:连接始终在3G(确定) 应用程序使用WIFI连接到Web服务。 回复收到成功。 应用程序使用WIFI再次连接到Web服务。 响应成功收到。 第三种场景:连接从WIFI切换到3G(无响应) 应用程序使用WIFI连接到Web服务。 回复收到成功。 连接切换到3G。 WIFI已禁用。 3G已启用。 应用程序再次使用3G连接到Web服务。 没有收到回复或错误。 应用程序一直等待响应。 在调用getResponseCode之前显示上一个日志。 第四种场景:连接从3G切换到WIFI(好) 应用程序使用3G连接到Web服务。 回复收到成功。 连接已切换到WIFI。 3G被禁用。 WIFI已启用。 应用程序使用WIFI再次连接到Web服务。 响应成功收到。 我的猜测是默认情况下, HttpURLConnection认为WIFI是一种比3G更好的连接类型。 因此,当连接从WIFI切换到3G时, HttpURLConnection拒绝确认3G并仍尝试使用WIFI进行连接。 另一方面, HttpURLConnection允许从3G切换到WIFI,因为WIFI是更好的连接类型。 我对此是否正确? 如果是这样,我如何允许从WIFI切换到3G? 下面是我的代码片段:(我每次连接到Web服务时都会调用它。) //open new connection httpsURLConnection = (HttpURLConnection) ((new URL(url)).openConnection()); httpsURLConnection.setDoInput(isDoInput); httpsURLConnection.setDoOutput(isDoOutput); […]

Seam – 列出所有组件

我想获得所有组件的列表,以便我可以进一步处理它们。 这是可能的,如果是这样,我该怎么做? 我不相信我可以观察所有postCreate事件,因为它只是一个完全匹配而不是正则表达式。 @Observer( “org.jboss.seam.postCreate”。) 您只能观察那些事件而不是*,因为它被放入一个字符串中的地图。 有任何想法吗? 沃尔特

在android中使用意图共享文本和多个图像

嗨,任何人都可以请帮助我,我试图与多个图像共享文本但我收到此错误密钥android.intent.extra.TEXT期望ArrayList但值是一个java.lang.String。 返回了默认值。 这是我的代码 – String text = “Share text.”; Uri pictureUri = getLocalBitmapUri(shareImg_imvw); uriList.clear(); for(int i=0;i<5;i++) { uriList.add(pictureUri); } Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.setType("*/*"); // shareIntent.putExtra(Intent.EXTRA_TEXT, text); // new code ArrayList extra_text = new ArrayList(); extra_text.add(text); shareIntent.putStringArrayListExtra(Intent.EXTRA_TEXT, extra_text); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(Intent.createChooser(shareIntent, getString(R.string.send_intent_title)));

什么是用于webdriver和浏览器之间通信的机制

任何人都可以解释浏览器和网络驱动程序之间的通信方式? webdriver对象如何在浏览器中读取和识别html元素? 那为什么webdriver对象和浏览器之间的关系以及如何构建关系浏览器和webdriver对象? driver = new FirefoxDriver(); driver.findElements(By.id(“element”));

如何从命令行激活maven配置文件(到构建子系统)

我有一个Maven项目https://github.com/paulvi/MavenMultiModule1 用root pom.xml作为 MavenModule1 MavenModule2 p1 MavenModule1 p2 MavenModule2 我希望能够单独构建子系统, 例如mvn package -P p1和mvn package -P p2 两个配置文件都可见,但无法使用-P开关激活 mvn help:all-profiles -P p1 与其他项目合作 这里缺少什么来激活配置文件或什么是更好的方法来构建子系统? 我已阅读如何在依赖模块中激活Maven配置文件?

如何在Ireport 4.5中更改日期格式

我已经给出了文本字段表达式new.java.util.Date()和模式MMMMM dd, yyyy作为上述格式。 日期必须显示如下: jan 13, 2012但它以其他格式显示: Fri Jan 13 08:30:12 IST 2012 。 那么如何以上述格式打印日期。 预览中的一件事日期显示正确如上所述,但在我的应用程序中它显示Fri Jan 13 08:30:12 IST 2012格式。 有没有办法让它正常工作?

SuppressWarnings不适用于FindBugs

我在我的Eclipse项目上运行了FindBugs并得到了一个潜在的错误警告我想要因特定原因而压制(在这个问题的上下文之外)。 这是代码: public class LogItem { private String name; private void setName(final String nm) { name = nm; } } 当你在这个类上运行FindBugs时,会给你一个关于name = nm赋值操作的警告,说明: Unread field: com.me.myorg.LogItem.name 。 所以我尝试添加这个: private void setName(final String nm) { @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = “NP”, justification = “Because I can”) name = nm; } 当我这样做时,我在Eclipse中得到一个语法(编译)错误,说明: 重复的局部变量nm; 名称无法解析为某种类型。 然后我尝试在字段本身上添加FindBugs的SuppressWarnings ,但是在类上重新运行FindBugs之后,FindBugs仍然抱怨同一行代码并出于同样的原因。 我甚至尝试将SuppressWarnings添加到setName方法,但仍然没有区别。 如何( 确切地说 !)我使用这个注释来安静FindBugs?!?

传递给方法的无界通配符

public class ColTest { static T wildSub(ArrayList holder, T arg){ T t=holder.get(0); return t; } public static void main(String[] args) { ArrayList list=new ArrayList(Arrays.asList(2L,3L,7L)); Long lng=1L; ColTest.wildSub(list, lng); } } 真的很感兴趣为什么这个片段是合法的,因为wildSub的签名只接受T ArrayList或从T派生,以及类型为T arg。 但表示 – 某些特定类型,未知,以及它如何满足编译器? 毕竟类型并不意味着 …

如何在Struts 2中使用DispatcherListener

Struts2中有一个接口DispatcherListener 。 文档说 “用于标记那些想要在init上执行代码并destroy Dispatcher的接口的接口。” 但是如何使用这个界面。 如果我创建一个实现此接口的类,我应该如何配置它到Struts2?