- 浏览: 149266 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
fei33423:
流程引擎的流转比状态机要复杂太多了把. 我觉得你即可以看成平行 ...
工作流引擎是否应该建立在有限状态机(Finite State Machine, FSM)引擎之上? -
c601097836:
为什么你们都说FSM,而不是UML State machine ...
工作流引擎是否应该建立在有限状态机(Finite State Machine, FSM)引擎之上? -
ronghao:
di1984HIT 写道类似啊,我现在也有这个困惑、我的工作流 ...
工作流引擎是否应该建立在有限状态机(Finite State Machine, FSM)引擎之上? -
di1984HIT:
不错啊。学习了。
[转]hadoop使用中的几个小细节(一) -
di1984HIT:
好的、
工作流20种基本模式的理解
最近拿Spring MVC 3.x做项目,用了最新的系列相关Annotation来做Controller,有几点心得体会值得分享。
转载请注明 :IT进行时(zhengxianquan AT hotmail.com) from http://itstarting.iteye.com/
一、编写一个AbstractController.java,所有的Controller必须扩展
除了获得Template Design Pattern的好处之外,还能一点,那就是放置全局的@InitBinder:
public class AbstractController { ... @InitBinder protected void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat, false)); } ... }
二、每个域都应该有一个Controller,且做好URI规划
大家都知道Spring MVC 3.x是完全支持Restful的,我们把URI做好规划,对于诸如ACL的实现会有很大的帮助。建议的URI规划如下:{Domain}[/{SubDomain}]/{BusinessAction}/{ID}。比如:
hotels/bookings/cancel/{id} ——表示此URI匹配hotels域的bookings子域,将要进行的是取消某项booking的操作。代码如下:
@Controller @RequestMapping(value = "/hotels") public class HotelsController extends AbstractController { ... @RequestMapping(value = "/bookings/cancel/{id}", method = RequestMethod.POST) public String deleteBooking(@PathVariable long id) { bookingService.cancelBooking(id); //use prefix 'redirect' to avoid duplicate submission return "redirect:../../search"; } ... }
另外还有几个重要原因:
1、由于Spring的DefaultAnnotationHandlerMapping.java在做Mapping的时候,先做是否有类匹配,再找方法,把基本的mapping放在类上面,可以加速匹配效率;
2、后续可以通过更细腻的支持Ant path style的AntPathMatcher来规划URI Template资源,做ACL控制(请参考后面的心得体会)。
三、JSON/XML等ajax的支持很cool,可以尝试
JSON/XML/RSS等均可支持,当然有些denpendency,比如JSON的默认支持,需要jackson jar出现在lib中,POM的artifact如下:
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.5.3</version> </dependency>
这样,我们其实根本就不需要进行额外的JSON转换了,Spring MVC 3会根据请求的格式自行转换:
@ResponseBody @RequestMapping(value = "/ajax", method = RequestMethod.POST) public JsonDataWrapper<Hotel> ajax(WebRequest request, Hotel hotel, Model model) throws Exception { JsonDataWrapper<Hotel> jsonDataWrapper = this.getPaginatedGridData(request, hotel, hotelService); return jsonDataWrapper; }
注 :我上面的JsonDataWrapper只是我自己做的一个简单的wrapper,目的是为jQuery Flexigrid plugin做数据准备的。还是贴出来吧:
/** * A wrapper class for jQuery Flexigrid plugin component. * * The format must be like this: * <code> * {"total":2,"page":1,"rows":[ * {"personTitle":"Mr","partyName":"Test8325","personDateOfBirth":"1970-07-12"}, * {"personTitle":"Ms","partyName":"Ms Susan Jones","personDateOfBirth":"1955-11-27"} * ]} * </code> * * @author bright_zheng * * @param <T>: the generic type of the specific domain */ public class JsonDataWrapper<T> implements Serializable { private static final long serialVersionUID = -538629307783721872L; public JsonDataWrapper(int total, int page, List<T> rows){ this.total = total; this.page = page; this.rows = rows; } private int total; private int page; private List<T> rows; public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public List<T> getRows() { return rows; } public void setRows(List<T> rows) { this.rows = rows; } }
四、Controller的单元测试变得很可为且简单
以前的项目从来不做controller层的测试,用了Spring MVC 3这一点就不再难为情,做吧:
public class HotelsControllerTest { private static HandlerMapping handlerMapping; private static HandlerAdapter handlerAdapter; private static MockServletContext msc; @BeforeClass public static void setUp() { String[] configs = { "file:src/main/resources/context-*.xml", "file:src/main/webapp/WEB-INF/webapp-servlet.xml" }; XmlWebApplicationContext context = new XmlWebApplicationContext(); context.setConfigLocations(configs); msc = new MockServletContext(); context.setServletContext(msc); context.refresh(); msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context); ApplicationContextManager manager = new ApplicationContextManager(); manager.setApplicationContext(context); handlerMapping = (HandlerMapping) ApplicationContextManager.getContext().getBean(DefaultAnnotationHandlerMapping.class); handlerAdapter = (HandlerAdapter) ApplicationContextManager.getContext().getBean(ApplicationContextManager.getContext().getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]); } @Test public void list() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setRequestURI("/hotels"); request.addParameter("booking.id", "1002"); request.addParameter("hotel.name", ""); request.setMethod("POST"); //HandlerMapping HandlerExecutionChain chain = handlerMapping.getHandler(request); Assert.assertEquals(true, chain.getHandler() instanceof HotelsController); //HandlerAdapter final ModelAndView mav = handlerAdapter.handle(request, response, chain.getHandler()); //Assert logic Assert.assertEquals("hotels/search", mav.getViewName()); } }
需要说明一下 :由于当前最想版本的Spring(Test) 3.0.5还不支持@ContextConfiguration的注解式context file注入,所以还需要写个setUp处理下,否则类似于Tiles的加载过程会有错误,因为没有ServletContext。3.1的版本应该有更好的解决方案,参见:https://jira.springsource.org/browse/SPR-5243 。
Service等其他layer就没有这类问题,测试的写法将变得更加优雅,贴个出来:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"file:src/main/resources/context-*.xml" }) public class DefaultServiceImplTest { /** @Autowired works if we put @ContextConfiguration at junit type */ @Autowired @Qualifier("hotelService") private HotelService<Hotel> hotelService; @Test public void insert() { Hotel hotel = new Hotel(); hotel.setAddress("addr"); hotel.setCity("Singapore"); hotel.setCountry("Singapore"); hotel.setName("Great Hotel"); hotel.setPrice(new BigDecimal(200)); hotel.setState("Harbarfront"); hotel.setZip("010024"); hotelService.insert(hotel); } }
五、ACL可以写一个HandlerInterceptorAdapter,在“事前”拦截。
由于Spring是Restful friendly的framework,做ACL就不要用过滤器了,用interceptor吧:
public class AclInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = Logger.getLogger(AclInterceptor.class); /** default servlet prefix */ private static final String DEFAULT_SERVLET_PREFIX = "/servlet"; /** will be injected from context configuration file */ private AclService service; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String currentUri = request.getRequestURI(); boolean isAccessible = true; //only intercept for annotated business controllers Controller c = AnnotationUtils.findAnnotation(handler.getClass(), Controller.class); if(c!=null){ String[] grantedResource = getGrantedResource(request); if(grantedResource==null || grantedResource.length==0){ throw new AccessDeniedException("No resource granted"); } isAccessible = service.isAccessible(grantedResource, currentUri); if(logger.isDebugEnabled()){ logger.debug("ACL interceptor excueted. Accessible for Uri[" + currentUri +"] = " + isAccessible); } //if isAccessible==true, throw custom AccessDeniedException if(!isAccessible) throw new AccessDeniedException(); } return isAccessible; } /** * transfer the original Uri to resource Uri * e.g.: * original Uri: /servlet/hotels/ajax * target Uri : /hotels/ajax * @param originalUri * @return */ protected String getUri(String originalUri){ return originalUri.substring(DEFAULT_SERVLET_PREFIX.length()); } /** * Get the granted resource from session * @param request * @return */ protected String[] getGrantedResource(HttpServletRequest request){ //get the resources from current session //String[] uriResourcePattern = (String[]) request.getSession().getAttribute("uriResourcePattern"); //TODO: mock data here String[] uriResourcePattern = new String[]{"/**"}; return uriResourcePattern; } public void setService(AclService service) { this.service = service; } }
注 :上面还有TODO部分,很简单,登录后把当然用户可访问的Ant path style的URI Resources放到session中,作为一个String[],这里拿来出匹配即可,建议匹配就用org.springframework.util.AntPathMatcher。
六、对于Ajax Form Validation,正在寻求更佳的解禁方案。
Spring 3已经支持@Valid的注解式validation,又一个JSR,但通过我研究代码发现,默认的org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.java实现还是非常封闭,并不能很好的实现binding后执行业务代码前处理,所以目前的实现办法还不算优雅。
已经实现,大致的思路是:
1)发出ajax form post请求(用jQuery);
2)正常mapping到controller的方法中处理;
3)做form validation;
4)不管怎样,forward到一个解析错误消息的JSP,叫ajaxFormValidatorResult.jsp;
5)再写一个jquery plugin,叫errorBinder.js,解析错误并自定binding为Tooltip,如果没错误就正常submit
贴个简单的demo效果,欢迎拍砖。
==Before
==After
补充说明:后面陆续补充的心得,就不在这里出现了,而是以跟帖的形式存在,便于讨论吧
评论
楼上可否举例一二加以说明?
据我所知,spring mvc的form binding和validation都还是不错的了
其中的form binding只要加上一个model,即可完全面向pojo对象实现form <-> controller param之间的绑定与传递
struts2一直没兴趣看,也就不得而知其高明之处了,还请指教
哈哈,谢谢了,我还一直奇怪怎样才能捞个精华呢
不过也说明spring mvc还是有其可取之处,哪怕相比struts
<div class="quote_div">
<div class="quote_title">yinyanbin 写道</div>
<div class="quote_div">
<div class="quote_div">
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
</div>
<p> </p>
<p>我的作法是在 webapp 根目录下,建一个子目录 resources ,</p>
<p>在 resources 下,再建 3 个子目录:js, css, img</p>
<p> </p>
<p>在 spring mvc 的 xml 配置文件里面,加上这一句:</p>
<p><mvc:resources location="/resources/" mapping="/resources/**" /></p>
<p> </p>
<p>web.xml 里面,还是配置:</p>
<p><url-pattern>/</url-pattern></p>
<p> </p>
<p>这样达到的效果:spring mvc 处理所有请求,但是 resources 下的(js, css, img)除外。</p>
</div>
<p> </p>
<p>既然楼上的说开了,我就补充一下,我的思路跟你一样,只是我直接把js,css,images直接放到根目录下,然后这样配置:</p>
<p>
</p>
<pre name="code" class="xml"><mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/web-resources/" /></pre>
<p> </p>
<p>好处也说一下,免得越抹越黑,浪费大家笔墨:</p>
<p>1. 因为jsp,message,tld等都放到了WEB-INF下,其实根目录下本来就没啥东西了,所以js,css,images就直接摆出来了;</p>
<p>2. 因为用了spring的js/resource组件(org.springframework.js.resource.ResourceServlet @ spring-js-resource),这东西可以把jar的东西也按需export出来,有利于组件化——比如有些img是framework级别的,一般基于此framework的项目就直接export出来用好了</p></div><br/>再补充一点,用了spring-js-resource 还可以配置更精准的resource cache策略,也是很有意思的一点,具体请大家看ref吧
<div class="quote_div">
<div class="quote_title">yinyanbin 写道</div>
<div class="quote_div">
<div class="quote_div">
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
</div>
<p> </p>
<p>我的作法是在 webapp 根目录下,建一个子目录 resources ,</p>
<p>在 resources 下,再建 3 个子目录:js, css, img</p>
<p> </p>
<p>在 spring mvc 的 xml 配置文件里面,加上这一句:</p>
<p><mvc:resources location="/resources/" mapping="/resources/**" /></p>
<p> </p>
<p>web.xml 里面,还是配置:</p>
<p><url-pattern>/</url-pattern></p>
<p> </p>
<p>这样达到的效果:spring mvc 处理所有请求,但是 resources 下的(js, css, img)除外。</p>
</div>
<p> </p>
<p>既然楼上的说开了,我就补充一下,我的思路跟你一样,只是我直接把js,css,images直接放到根目录下,然后这样配置:</p>
<p>
</p>
<pre name="code" class="xml"><mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/web-resources/" /></pre>
<p> </p>
<p>好处也说一下,免得越抹越黑,浪费大家笔墨:</p>
<p>1. 因为jsp,message,tld等都放到了WEB-INF下,其实根目录下本来就没啥东西了,所以js,css,images就直接摆出来了;</p>
<p>2. 因为用了spring的js/resource组件(org.springframework.js.resource.ResourceServlet @ spring-js-resource),这东西可以把jar的东西也按需export出来,有利于组件化——比如有些img是framework级别的,一般基于此framework的项目就直接export出来用好了</p>
<div class="quote_div">
<div class="quote_div">
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
</div>
<p>
</p>
<p>我的作法是在 webapp 根目录下,建一个子目录 resources ,</p>
<p>在 resources 下,再建 3 个子目录:js, css, img</p>
<p> </p>
<p>在 spring mvc 的 xml 配置文件里面,加上这一句:</p>
<p><mvc:resources location="/resources/" mapping="/resources/**" /></p>
<p> </p>
<p>web.xml 里面,还是配置:</p>
<p><url-pattern>/</url-pattern></p>
<p> </p>
<p>这样达到的效果:spring mvc 处理所有请求,但是 resources 下的(js, css, img)除外。</p>
<div class="quote_div">
<div class="quote_title">yinyanbin 写道</div>
<div class="quote_div">
<div class="quote_div">
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
</div>
<p>再写一个<servlet-mapping> 呗,再说了一般项目还挺难做到全部rest风格吧</p>
<p>比如</p>
<p> </p>
<p><servlet-mapping> </p>
<p> <span style="white-space: pre;"> </span><servlet-name>default</servlet-name> </p>
<p> <span style="white-space: pre;"> </span><url-pattern>/css/*</url-pattern> </p>
<p></servlet-mapping> </p>
</div>
<p> </p>
<p>
</p>
<p>楼上说的对,我也是建议使用起码两个servlet mapping,下面是我的建议用法:</p>
<p>
</p>
<pre name="code" class="xml"> <!-- Serves static resource content from .jar files such as spring-faces.jar -->
<servlet>
<servlet-name>Resources Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<!-- Map all /resources requests to the Resource Servlet for handling -->
<servlet-mapping>
<servlet-name>Resources Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/webapp-servlet.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping></pre>
<div>一个用来mapping resource(这样用甚至可以map到jar里面的资源),另一个专门mapping servlet.</div>
<div><br></div>
<div class="quote_div">
<div class="quote_div">
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
</div>
<p>再写一个<servlet-mapping> 呗,再说了一般项目还挺难做到全部rest风格吧</p>
<p>比如</p>
<p>
</p>
<p><servlet-mapping> </p>
<p> <span style="white-space: pre;"> </span><servlet-name>default</servlet-name> </p>
<p> <span style="white-space: pre;"> </span><url-pattern>/css/*</url-pattern> </p>
<p></servlet-mapping> </p>
<div class="quote_div">
<div class="quote_title">yinyanbin 写道</div>
<div class="quote_div">
<p>楼主你好,有个问题咨询下,如果采用rest的url方式的话,在配置web.xml的时候需要怎么配置呢?<br>我现在是这样配置的:</p>
<p> </p>
<pre name="code" class="xml"><servlet>
<servlet-name>background</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>background</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping></pre>
<p> 如过要采用rest的方式的话 url-pattern要怎么写呢?/*吗?还是?</p>
</div>
<p><url-pattern>/</url-pattern></p>
<p>再加上</p>
<p> </p>
<p><filter> </p>
<p> <span style="white-space: pre;"> </span><filter-name>HiddenHttpMethodFilter</filter-name> </p>
<p> <span style="white-space: pre;"> </span><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </p>
<p><span style="white-space: pre;"> </span></filter> </p>
<p><span style="white-space: pre;"> </span><filter-mapping> </p>
<p> <span style="white-space: pre;"> </span><filter-name>HiddenHttpMethodFilter</filter-name> </p>
<p> <span style="white-space: pre;"> </span><servlet-name>appServlet</servlet-name> </p>
<p><span style="white-space: pre;"> </span></filter-mapping> </p>
<p>已支持put跟delete方法</p>
</div>
<p>如果是<url-pattern>/</url-pattern>那么图片,css,js怎么办呢?就显示不了了</p>
<div class="quote_div">
<p>楼主你好,有个问题咨询下,如果采用rest的url方式的话,在配置web.xml的时候需要怎么配置呢?<br>我现在是这样配置的:</p>
<p> </p>
<pre name="code" class="xml"><servlet>
<servlet-name>background</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>background</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping></pre>
<p> 如过要采用rest的方式的话 url-pattern要怎么写呢?/*吗?还是?</p>
</div>
<p><url-pattern>/</url-pattern></p>
<p>再加上</p>
<p>
</p>
<p><filter> </p>
<p> <span style="white-space: pre;"> </span><filter-name>HiddenHttpMethodFilter</filter-name> </p>
<p> <span style="white-space: pre;"> </span><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </p>
<p><span style="white-space: pre;"> </span></filter> </p>
<p><span style="white-space: pre;"> </span><filter-mapping> </p>
<p> <span style="white-space: pre;"> </span><filter-name>HiddenHttpMethodFilter</filter-name> </p>
<p> <span style="white-space: pre;"> </span><servlet-name>appServlet</servlet-name> </p>
<p><span style="white-space: pre;"> </span></filter-mapping> </p>
<p>已支持put跟delete方法</p>
<p>
</p>
<pre name="code" class="xml"><servlet>
<servlet-name>background</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>background</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping></pre>
<p> 如过要采用rest的方式的话 url-pattern要怎么写呢?/*吗?还是?</p>
只是看到这个目前网络流行的一塌糊涂的 springmvc就喜欢看看
做商务网站是用spring好还是不用好呢?
商务网站要考虑的东西更多,比如横向/纵向扩展、缓存、可用性、可维护性……注入此类,简单一句用不用spring解决不了问题
用spring更多是考虑研发的绩效问题,至于“商务网站”,综合考虑再说吧,感觉与spring没太直接关系
只是看到这个目前网络流行的一塌糊涂的 springmvc就喜欢看看
做商务网站是用spring好还是不用好呢?
http://yin-bp.iteye.com/
@SessionAttributes(types=UserInfoVo.class,value="userinfo")
我用这个注解后,运行提示我:
org.springframework.web.HttpSessionRequiredException: Session attribute 'userinfo' required - not found in session
这是为什么??谢谢
提示很清楚呀:你需要的属性为userinfo的session对象不存在
是否有optional=true之类的属性可以用用,试一下咯
@SessionAttributes(types=UserInfoVo.class,value="userinfo")
我用这个注解后,运行提示我:
org.springframework.web.HttpSessionRequiredException: Session attribute 'userinfo' required - not found in session
这是为什么??谢谢
不过,我看了一下spring 3 API,发现很多Controler都变为Deprecated,建议用注解代替。但不清楚AbstractWizardFormController这个怎样用注解来代替?请教楼主了……
是啊,自学API看的有点头大
发表评论
-
Netty + Protobuf 的客户端模式运用和问题探讨
2012-05-14 16:04 6161使用NETTY之前,当然需要先看一下所带的samples。 ... -
实战:使用JMeter的Java Sampler轻松定制自己的benchmark
2012-05-06 22:08 4498以前碰到更多的是WEB APP ... -
如何从零开始编写一个企业级的生物匹配引擎
2012-04-29 23:35 1322考虑编写一篇文章,以分享个人的一些所谓引擎策划、架构、实现和验 ... -
JBoss在单机下多实例的配置备忘
2011-06-17 16:41 2557版本:jboss-5.1.0.GA + JDK 1.6 ... -
能不能让log4j跑的“更快”,对业务总体执行时间影响更小?
2011-06-10 00:00 2803最近事情不多,翻了一下log4j的源代码,发现这个一直跟 ... -
大家都用什么Maven插件?及本人的几个常用插件分享
2011-01-25 12:47 5156两个月前我只是一直知道有Maven,但从来没用过也没这个计划, ... -
JSTL/EL如何方便高效的访问Constants和CodeTable(存储于DB的应用系统变量)
2010-12-20 12:35 7931之前只是简单的使用JSTL/EL进行输出,一般的思路很简单:r ... -
让Ajax框架Buffalo支持JSON协议而非仅仅自定义的XML协议[JS前端及单元测试完成]
2010-01-14 16:01 2869Buffalo默认实现了一套很棒的自定义XML协议(具体请参考 ... -
Ajax框架Buffalo深度研究
2010-01-11 14:37 2240Buffalo深度研究 ——2010.01.11, IT进行 ...
相关推荐
5. **Spring MVC 3.x annotated controller的几点心得体会** - 作者可能分享了在实际开发中使用注解控制器的经验和技巧,包括错误处理、数据验证、模型绑定等方面。 6. **SpringMVC数据绑定** - 数据绑定是Spring...
7.1. Alternate Spring MVC configuration 7.1.1. Customizing DispatcherServlet configuration 7.1.2. Adding additional servlets and filters 7.1.3. Declaring DispatcherServlet in web.xml 7.2. Processing ...
Exporting a lazily initialized bean (which implements SelfNaming and is annotated with ManagedResource annotation) gives IllegalStateException [SPR-17592] #22124 MockHttpServletRequest changes Accept-...
书中的内容主要围绕以下几个关键知识点展开: 1. **图灵机模型**:图灵机是计算理论的基石,它是一个抽象的计算设备,能够模拟任何算法的逻辑。书中详细介绍了图灵机的工作原理,包括状态、带子、读写头和规则,...
在学习Apollo 1.0源码时,可以关注以下几个关键点: - 数据流处理:了解如何从不同传感器获取原始数据,并将其转化为可供其他模块使用的格式。 - 算法实现:深入研究感知模块中的目标检测算法,如YOLO、Faster R-...
Margaret A. Ellis, Bjarne Stroustrup-The Annotated C++ Reference Manual
Edited by a Lead Program Manager on Microsoft's .NET Framework team, .NET Framework Standard Library Annotated Reference, Volume 1, is the definitive reference for the .NET Framework base class ...
在Spring MVC中,当需要将Java对象转换为JSON格式发送给客户端时,有时会遇到返回对象包含大量冗余属性的情况,这可能导致不必要的网络流量消耗。为了解决这个问题,我们可以实现一个动态擦除属性的机制,使得在序列...
Following this, you will explore how to implement the request handling layer using Spring annotated controllers. Other highlights include learning how to build the Java DAO implementation layer by ...
Following this, you will explore how to implement the request handling layer using Spring annotated controllers. Other highlights include learning how to build the Java DAO implementation layer by ...
redis-3.0-annotated-unstable.zipredis-3.0-annotated-unstable.zipredis-3.0-annotated-unstable.zipredis-3.0-annotated-unstable.zip
13. 配置控制器(Controller)以处理Web层的请求,并将视图解析器配置到Spring MVC配置文件中,以便Spring MVC框架知道如何渲染视图。 通过上述步骤,可以将Spring、SpringMVC、JPA和Hibernate集成到一起,构建一个...
2. **注解驱动开发(Annotated Controllers)**:在Spring 2.5中,可以使用`@Controller`、`@RequestMapping`等注解来声明控制器类和处理HTTP请求的方法,大大简化了Web应用程序的开发。 3. **AOP增强**:Spring ...
The Annotated C++ Reference Manual.part2
在"Annotated Database"中,这些关键点已预先标注,可以用于训练和优化关键点检测算法,如Dlib的HOG(Histogram of Oriented Gradients)或基于深度学习的MTCNN(Multi-task Cascaded Convolutional Networks)。...
The Annotated C++ Reference Manual
而《The Thinking in Java Annotated Solution Guide》则是对原书习题的详尽解答,帮助读者巩固所学知识并解决实际编程问题。 这个压缩包包含的是书中所有代码示例,对于学习Java编程非常有帮助。以下是这些代码...
The Annotated C++ Reference Manual (共11部分) 传说中的原版巨作,不差页