我有一个servlet作为前端控制器.
@WebServlet("/*")
Run Code Online (Sandbox Code Playgroud)
但是,这也处理CSS和图像文件.我怎么能阻止这个?
我是一名Java SE开发人员,但我有丰富的Web背景(PHP,Perl/CGI等),现在我正在开始新项目.它将具有Web界面,意大利面条业务逻辑,关系数据库作为存储和与其他服务的连接.我是从零开始做的.
我的同事告诉我要使用弹簧,弹簧安全装置和支柱.我简要地看一下Java EE 6规范,发现它几乎涵盖了企业应用程序的所有方面.我问同事他们为什么需要spring和struts,但看起来他们只是因为熟悉它们并且不熟悉经典的Java EE 6堆栈而使用技术.
所以,我的问题是:Java EE 6有什么不好的地方?如果有JNDI查找,为什么我需要spring?为单元测试创建假的InitialContext需要一两天的时间.这就是全部:我坚持使用像春天这样的外部工具.如果Servlets规范中内置了安全性,为什么我需要spring-security?我可以使用web.xml将任何请求映射到任何servlet,不需要struts.xml.我可以使用servlet-filters而不是struts拦截器.有RMI,所以我不需要弹簧遥控器.等等..
如果有Java EE 6,为什么我要用所有那些花哨的东西来烦扰自己呢?
我真的很想找到Java EE 6还不够的情况.你有什么?
谢谢!
让Web框架处理来自单个入口点的请求是一个已解决的问题.但是,单个入口点应该是Filter还是Servlet?为什么Web应用程序开发人员更喜欢一个?为什么框架开发人员更喜欢一个?
我只是想开始使用Java EE和相关概念.但是,我在理解某些技术与它们扮演的角色之间的关系时遇到了一些麻烦.
据我所知,Java EE Servlet是一个在服务器内运行的Java类,它生成对请求的响应(通常是对HTTP请求的HTML响应,尽管Servlet理论上可以服务于任何协议).
我的问题:
谢谢你帮助我开始吧!
我正在尝试遵循Design Patterns基于Web的应用程序的模式.从maping"root"URL开始,这一切都很好.
我想通过"前端控制器"提出所有请求,所以我放了
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
在web.xml.通过Netbeans逐步显示请求进入,并且Action工作正常,但接着是行
request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
也被控制器捕获,它再次进入Action,一切都失败了.
我可以通过不从URL根目录来使其工作,例如
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/pages/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.有没有办法让它与"根"URL一起使用?
我让我的Servlet响应所有"/"url-pattern.在内部我需要有时渲染html,所以我想.包含一个JSP页面,但我希望.jsp在外部是不可访问的.另外,我如何将模型对象传递给它.
servlet规范(参见我之前的问题)保证相同的线程将执行所有过滤器和相关的Servlet.鉴于此,HttpServletRequest.setAttribute如果可以选择使用a ThreadLocal(假设您正确清理),我认为没有使用传递数据的任何用途.我觉得使用有两个好处ThreadLocal:类型安全和更好的性能,因为没有使用字符串键或映射(除非可能通过(非字符串)线程ID进入线程集合).
有人可以确认我是否正确,所以我可以继续放弃setAttribute?
我的问题是理想的或原始的MVC解释 http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
由于MVC的目标是减少依赖性,View应该知道模型吗?然后什么会阻止它变胖,直接调用模型方法而不问控制器?
更新:当我阅读下面的答案时,我将举一个具体的例子:
假设您创建了一个复杂的计算器(不仅仅是一些简单的计算器,让我们说股票市场的一个选项价格).它只需要股票价格,利率,波动率等投入.那么为什么我要创建一个包含视图中方法的整个模型的引用,因为我只需要这些输入变量?
为什么控制器不会在视图中发生变化时通知,然后仅使用输入回调视图中的方法?
例如,我在这里看到View有一个对整个模型的引用:
http://leepoint.net/notes-java/GUI/structure/40mvc.html
private CalcModel m_model;
Run Code Online (Sandbox Code Playgroud) 我已经进入了一个重新考虑JSF实现的项目.现有代码没有遵循正确的JSF标准.为了实现这一点,我正在学习JSF中的所有概念(我已经掌握了JSF的实验).具体来说,我想问一下我的想法.
请回答以上问题.如果我对答案很清楚,那么我会提出更多问题.
有没有办法从POJO中检索会话?或者最终从POJO中检索bean.
澄清:
基本上我是从servlet创建一个bean,我需要从Web容器外部(从POJO)访问该bean的属性.我无法将请求传递给pojo; 并且需要请求来检索会话.
更具体地说,我有一个Web应用程序,它使用Cactus框架从Web界面运行JUnit测试.但是,调用JUnit测试运行器的servlet是在jar中编译的; 我添加了额外的下拉菜单来更改JUnit测试将从中读取的设置以在不同环境(WLI集群)之间切换,因此,如果已经编译了运行器servlet,我无法修改它以处理来自多个环境的额外参数.我已经尝试过写入.dat文件的持久化方法,JUnit测试将通过Reader类读取该文件; 我也尝试过最终无法通过JUnit测试访问的bean方法.