收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


zhang的笔记
状态: 离线
人气:5146617
访问用户量:4233
笔记经验:
总积分:261656
级别:VIP5
搜索本笔记
ta的交流分类
ta的交流主题贴(544)
ta的所有交流贴(1049)
ta的全部笔记
全部笔记(255)
未分类笔记(1)
Java Web(9)
并发实践(1)
课程问题(0)
Java(22)
架构(1)
缓存(5)
JavaEE(0)
JVM(12)
跟我学spring3(68)
Spring Sec……(43)
Spring 3.x……(25)
Spring Sec……(20)
跟开涛学Spring……(17)
深入剖析Spring……(18)
性能调优(10)
前端(2)
Tomcat源码解读(1)
spring sec……(0)
存档
2014-01(7)
2013-12(10)
2012-10(4)
2012-09(2)
2012-08(31)
2012-07(10)
2012-06(5)
2012-05(41)
2012-04(3)
2012-03(41)
2012-02(54)
2011-11(17)
2011-10(30)

2012-08-13 15:39:03
第四章 Controller接口控制器详解(5)——跟着开涛学SpringMVC
浏览(23544)|评论(0)   交流分类:Java|笔记分类: 跟开涛学Spring……

4.15、MultiActionController

之前学过的控制器如AbstractCommandController、SimpleFormController等一般对应一个功能处理方法(如新增),如果我要实现比如最简单的用户增删改查(CRUD Create-Read-Update-Delete),那该怎么办呢?

 

4.15.1 解决方案

1、每一个功能对应一个控制器,如果是CRUD则需要四个控制器,但这样我们的控制器会暴增,肯定不可取;

2、使用Spring Web MVC提供的MultiActionController,用于支持在一个控制器里添加多个功能处理方法,即将多个请求的处理方法放置到一个控制器里,这种方式不错。

 

4.15.2 问题

1、  MultiActionController如何将不同的请求映射不同的请求的功能处理方法呢?

Spring Web MVC提供了MethodNameResolver(方法名解析器)用于解析当前请求到需要执行的功能处理方法的方法名。默认使用InternalPathMethodNameResolver实现类,另外还提供了ParameterMethodNameResolver和PropertiesMethodNameResolver,当然我们也可以自己来实现,稍候我们仔细研究下它们是如何工作的。

 

2、那我们的功能处理方法应该怎么写呢?

public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession session] [,AnyObject]);

 

哦,原来如此,我们只需要按照如上格式写我们的功能处理方法即可;此处需要注意一下几点:

1、返回值:即模型和视图部分;

ModelAndView:模型和视图部分,之前已经见过了;

Map:只返回模型数据,逻辑视图名会根据RequestToViewNameTranslator实现类来计算,稍候讨论;

String:只返回逻辑视图名;

void:表示该功能方法直接写出response响应(如果其他返回值类型(如Map)返回null则和void进行相同的处理);

2、actionName功能方法名字;由methodNameResolver根据请求信息解析功能方法名,通过反射调用;

3、形参列表:顺序固定,“[]”表示可选,我们来看看几个示例吧:

//表示到新增页面

public ModelAndView toAdd(HttpServletRequest request, HttpServletResponse response);

//表示新增表单提交,在最后可以带着命令对象

public ModelAndView add(HttpServletRequest request, HttpServletResponse response, UserModel user);

//列表,但只返回模型数据,视图名会通过RequestToViewNameTranslator实现来计算

public Map list(HttpServletRequest request, HttpServletResponse response);

//文件下载,返回值类型为void,表示该功能方法直接写响应

public void fileDownload(HttpServletRequest request, HttpServletResponse response)

//第三个参数可以是session

public ModelAndView sessionWith(HttpServletRequest request, HttpServletResponse response, HttpSession session);

//如果第三个参数是session,那么第四个可以是命令对象,顺序必须是如下顺序

public void sessionAndCommandWith(HttpServletRequest request, HttpServletResponse response, HttpSession session, UserModel user)

4、异常处理方法,MultiActionController提供了简单的异常处理,即在请求的功能处理过程中遇到异常会交给异常处理方法进行处理,式如下所示:

public ModelAndView anyMeaningfulName(HttpServletRequest request, HttpServletResponse response, ExceptionClass exception)

MultiActionController会使用最接近的异常类型来匹配对应的异常处理方法,示例如下所示:

 

//处理PayException

public ModelAndView processPayException(HttpServletRequest request, HttpServletResponse response, PayException ex)

//处理Exception

public ModelAndView processException(HttpServletRequest request, HttpServletResponse response,  Exception ex)

4.15.3 MultiActionController类实现

类定义:public class MultiActionController extends AbstractController implements LastModified ,继承了AbstractController,并实现了LastModified接口,默认返回-1;

 

核心属性:

delegate功能处理的委托对象,即我们要调用请求处理方法所在的对象,默认是this;

methodNameResolver功能处理方法名解析器,即根据请求信息来解析需要执行的delegate的功能处理方法的方法名。

核心方法:

 

Java代码 
  1. //判断方法是否是功能处理方法  
  2. private boolean isHandlerMethod(Method method) {  
  3.     //得到方法返回值类型  
  4.     Class returnType = method.getReturnType();  
  5.     //返回值类型必须是ModelAndView、Map、String、void中的一种,否则不是功能处理方法  
  6.     if (ModelAndView.class.equals(returnType) || Map.class.equals(returnType) || String.class.equals(returnType) ||  
  7.             void.class.equals(returnType)) {  
  8.         Class[] parameterTypes = method.getParameterTypes();  
  9.         //功能处理方法参数个数必须>=2,且第一个是HttpServletRequest类型、第二个是HttpServletResponse  
  10.         //且不能Controller接口的handleRequest(HttpServletRequest request, HttpServletResponse response),这个方法是由系统调用  
  11.         return (parameterTypes.length >= 2 &&  
  12.                 HttpServletRequest.class.equals(parameterTypes[0]) &&  
  13.                 HttpServletResponse.class.equals(parameterTypes[1]) &&  
  14.                 !("handleRequest".equals(method.getName()) && parameterTypes.length == 2));  
  15.     }  
  16.     return false;  
  17. }  

 

Java代码 
  1. //是否是异常处理方法  
  2. private boolean isExceptionHandlerMethod(Method method) {  
  3.     //异常处理方法必须是功能处理方法 且 参数长度为3、第三个参数类型是Throwable子类  
  4.     return (isHandlerMethod(method) &&  
  5.             method.getParameterTypes().length == 3 &&  
  6.             Throwable.class.isAssignableFrom(method.getParameterTypes()[2]));  
  7. }  
Java代码 
  1. private void registerHandlerMethods(Object delegate) {  
  2.     //缓存Map清空  
  3.     this.handlerMethodMap.clear();  
  4.     this.lastModifiedMethodMap.clear();  
  5.     this.exceptionHandlerMap.clear();  
  6.   
  7.     //得到委托对象的所有public方法  
  8.     Method[] methods = delegate.getClass().getMethods();  
  9.     for (Method method : methods) {  
  10.         //验证是否是异常处理方法,如果是放入exceptionHandlerMap缓存map  
  11.         if (isExceptionHandlerMethod(method)) {  
  12.             registerExceptionHandlerMethod(method);  
  13.         }  
  14.         //验证是否是功能处理方法,如果是放入handlerMethodMap缓存map  
  15.         else if (isHandlerMethod(method)) {  
  16.             registerHandlerMethod(method);  
  17.             registerLastModifiedMethodIfExists(delegate, method);  
  18.         }  
  19.     }  
  20. }  
Java代码 
  1. protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)  
  2.         throws Exception {  
  3.     try {  
  4.         //1、使用methodNameResolver 方法名解析器根据请求解析到要执行的功能方法的方法名  
  5.         String methodName = this.methodNameResolver.getHandlerMethodName(request);  
  6.         //2、调用功能方法(通过反射调用,此处就粘贴代码了)  
  7.         return invokeNamedMethod(methodName, request, response);  
  8.     }  
  9.     catch (NoSuchRequestHandlingMethodException ex) {  
  10.         return handleNoSuchRequestHandlingMethod(ex, request, response);  
  11.     }  
  12. }  

 

接下来,我们看一下MultiActionController如何使用MethodNameResolver来解析请求到功能处理方法的方法名。

4.15.4 MethodNameResolver

1、InternalPathMethodNameResolver:MultiActionController的默认实现,提供从请求URL路径解析功能方法的方法名,从请求的最后一个路径(/)开始,并忽略扩展名;如请求URL是“/user/list.html”,则解析的功能处理方法名为“list”,即调用list方法。该解析器还可以指定前缀和后缀,通过prefix和suffix属性,如指定prefix=”test_”,则功能方法名将变为test_list;

 

2、ParameterMethodNameResolver:提供从请求参数解析功能处理方法的方法名,并按照如下顺序进行解析:

<!--[if !supportLists]-->(1、    <!--[endif]-->methodParamNames:根据请求的参数名解析功能方法名(功能方法名和参数名同名);

Java代码 
  1. <property name="methodParamNames" value="list,create,update"/>         

  如上配置时,如果请求中含有参数名list、create、update时,则功能处理方法名为list、create、update,这种方式的可以在当一个表单有多个提交按钮时使用,不同的提交按钮名字不一样即可。

  ParameterMethodNameResolver也考虑到图片提交按钮提交问题:

    <input type="image" name="list"> 和submit类似可以提交表单,单击该图片后会发送两个参数“list.x=x轴坐标”和“list.y=y轴坐标”(如提交后会变为list.x=7&list.y=5);因此我们配置的参数名(如list)在会加上“.x” 和 “.y”进行匹配。

 

Java代码 
  1. for (String suffix : SUBMIT_IMAGE_SUFFIXES)  {//SUBMIT_IMAGE_SUFFIXES {“.x”, “.y”}  
  2.     if (request.getParameter(name + suffix) != null) {// name是我们配置的methodParamNames  
  3.         return true;  
  4.     }  
  5. }  

 

(2、paramName:根据请求参数名的值解析功能方法名,默认的参数名是action,即请求的参数中含有“action=query”,则功能处理方法名为query;

(3、logicalMappings:逻辑功能方法名到真实功能方法名映射,如下所示:

Java代码 
  1. <property name="logicalMappings">  
  2.     <props>  
  3.         <prop key="doList">list</prop>  
  4.     </props>  
  5. </property>  

  即如果步骤1或2解析出逻辑功能方法名为doList(逻辑的),将会被重新映射为list功能方法名(真正执行的)。

(4、defaultMethodName:默认的方法名,当以上策略失败时默认调用的方法名。

 

3、PropertiesMethodNameResolver:提供自定义的从请求URL解析功能方法的方法名,使用一组用户自定义的模式到功能方法名的映射,映射使用Properties对象存放,具体配置示例如下:

Java代码 
  1. <bean id="propertiesMethodNameResolver"   
  2. class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">  
  3.     <property name="mappings">  
  4.         <props>  
  5.               <prop key="/create">create</prop>  
  6.               <prop key="/update">update</prop>  
  7.               <prop key="/delete">delete</prop>  
  8.               <prop key="/list">list</prop>  
  9.               <!-- 默认的行为 -->  
  10.               <prop key="/**">list</prop>  
  11.         </props>  
  12.     </property>  
  13. </bean>   

对于/create请求将调用create方法,Spring内部使用PathMatcher进行匹配(默认实现是AntPathMatcher)。

4.15.5 RequestToViewNameTranslator

用于直接将请求转换为逻辑视图名。默认实现为DefaultRequestToViewNameTranslator。

 

1、DefaultRequestToViewNameTranslator:将请求URL转换为逻辑视图名,默认规则如下:

  http://localhost:9080/web上下文/list -------> 逻辑视图名为list

  http://localhost:9080/web上下文/list.html -------> 逻辑视图名为list(默认删除扩展名)

  http://localhost:9080/web上下文/user/list.html -------> 逻辑视图名为user/list

4.15.6 示例

(1、控制器UserController

Java代码 
  1. package cn.javass.chapter4.web.controller;  
  2. //省略import  
  3. public class UserController extends MultiActionController {  
  4.     //用户服务类  
  5.     private UserService userService;  
  6.     //逻辑视图名 通过依赖注入方式注入,可配置  
  7.     private String createView;  
  8.     private String updateView;  
  9.     private String deleteView;  
  10.     private String listView;  
  11.     private String redirectToListView;  
  12.     //省略setter/getter  
  13.   
  14.     public String create(HttpServletRequest request, HttpServletResponse response, UserModel user) {  
  15.         if("GET".equals(request.getMethod())) {  
  16.             //如果是get请求 我们转向 新增页面  
  17.             return getCreateView();  
  18.         }  
  19.         userService.create(user);  
  20.         //直接重定向到列表页面  
  21.         return getRedirectToListView();  
  22.     }  
  23.     public ModelAndView update(HttpServletRequest request, HttpServletResponse response, UserModel user) {  
  24.         if("GET".equals(request.getMethod())) {  
  25.             //如果是get请求 我们转向更新页面  
  26.             ModelAndView mv = new ModelAndView();  
  27.             //查询要更新的数据  
  28.             mv.addObject("command", userService.get(user.getUsername()));  
  29.             mv.setViewName(getUpdateView());  
  30.             return mv;  
  31.         }  
  32.         userService.update(user);  
  33.         //直接重定向到列表页面  
  34.         return new ModelAndView(getRedirectToListView());  
  35.     }  
  36.   
  37.       
  38.     public ModelAndView delete(HttpServletRequest request, HttpServletResponse response, UserModel user) {  
  39.         if("GET".equals(request.getMethod())) {  
  40.             //如果是get请求 我们转向删除页面  
  41.             ModelAndView mv = new ModelAndView();  
  42.             //查询要删除的数据  
  43.             mv.addObject("command", userService.get(user.getUsername()));  
  44.             mv.setViewName(getDeleteView());  
  45.             return mv;  
  46.         }  
  47.         userService.delete(user);  
  48.         //直接重定向到列表页面  
  49.         return new ModelAndView(getRedirectToListView());  
  50.     }     
  51.       
  52.     public ModelAndView list(HttpServletRequest request, HttpServletResponse response) {  
  53.         ModelAndView mv = new ModelAndView();  
  54.         mv.addObject("userList", userService.list());  
  55.         mv.setViewName(getListView());  
  56.         return mv;  
  57.     }  
  58.       
  59.     //如果使用委托方式,命令对象名称只能是command  
  60.     protected String getCommandName(Object command) {  
  61.         //命令对象的名字 默认command  
  62.         return "command";  
  63.     }  
  64. }  

  增删改:如果是GET请求方法,则表示到展示页面,POST请求方法表示真正的功能操作;

  getCommandName:表示是命令对象名字,默认command,对于委托对象实现方式无法改变,因此我们就使用默认的吧。

 

(2、spring配置文件chapter4-servlet.xml

 

Java代码 
  1. <bean id="userService" class="cn.javass.chapter4.service.UserService"/>  
  2. <bean name="/user/**" class="cn.javass.chapter4.web.controller.UserController">  
  3.     <property name="userService" ref="userService"/>  
  4.     <property name="createView" value="user/create"/>  
  5.     <property name="updateView" value="user/update"/>  
  6.     <property name="deleteView" value="user/delete"/>  
  7.     <property name="listView" value="user/list"/>  
  8.     <property name="redirectToListView" value="redirect:/user/list"/>  
  9.     <!-- 使用PropertiesMethodNameResolver来解析功能处理方法名 -->         
  10.     <!--property name="methodNameResolver" ref="propertiesMethodNameResolver"/-->  
  11. </bean>  

 

  userService:用户服务类,实现业务逻辑;

  依赖注入:对于逻辑视图页面通过依赖注入方式注入,redirectToListView表示增删改成功后重定向的页面,防止重复表单提交;

  默认使用InternalPathMethodNameResolver解析请求URL到功能方法名。

 

(3、视图页面

(3.1、list页面(WEB-INF/jsp/user/list.jsp)

 

Java代码 
  1. <a href="${pageContext.request.contextPath}/user/create">用户新增</a><br/>  
  2. <table border="1" width="50%">  
  3.    <tr>  
  4.       <th>用户名</th>  
  5.       <th>真实姓名</th>  
  6.       <th>操作</th>  
  7.    </tr>   
  8.    <c:forEach items="${userList}" var="user">  
  9.    <tr>  
  10.       <td>${user.username }</td>  
  11.       <td>${user.realname }</td>  
  12.       <td>  
  13.           <a href="${pageContext.request.contextPath}/user/update?username=${user.username}">更新</a>  
  14.           |  
  15.           <a href="${pageContext.request.contextPath}/user/delete?username=${user.username}">删除</a>  
  16.       </td>  
  17.    </tr>  
  18.    </c:forEach>     
  19. </table>  

 

(3.2、update页面(WEB-INF/jsp/user/update.jsp)

Java代码 
  1. <form action="${pageContext.request.contextPath}/user/update" method="post">  
  2. 用户名: <input type="text" name="username" value="${command.username}"/><br/>  
  3. 真实姓名:<input type="text" name="realname" value="${command.realname}"/><br/>  
  4. <input type="submit" value="更新"/>  
  5. </form>  

(4、测试:

默认的InternalPathMethodNameResolver将进行如下解析:

http://localhost:9080/springmvc-chapter4/user/list————>list方法名;

http://localhost:9080/springmvc-chapter4/user/create————>create方法名;

http://localhost:9080/springmvc-chapter4/user/update————>update功能处理方法名;

http://localhost:9080/springmvc-chapter4/user/delete————>delete功能处理方法名。

 

我们可以将默认的InternalPathMethodNameResolver改为PropertiesMethodNameResolver

Java代码 
  1. <bean id="propertiesMethodNameResolver"   
  2. class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">  
  3.     <property name="mappings">  
  4.         <props>  
  5.               <prop key="/create">create</prop>  
  6.               <prop key="/update">update</prop>  
  7.               <prop key="/delete">delete</prop>  
  8.               <prop key="/list">list</prop>  
  9.               <prop key="/**">list</prop><!-- 默认的行为 -->  
  10.           </props>  
  11.     </property>  
  12. </bean>     
  13. <bean name="/user/**" class="cn.javass.chapter4.web.controller.UserController">  
  14.        <!—省略其他配置,详见配置文件-->  
  15.        <!-- 使用PropertiesMethodNameResolver来解析功能处理方法名 -->         
  16.        <property name="methodNameResolver" ref="propertiesMethodNameResolver"/>  
  17. </bean>   

 /**表示默认解析到list功能处理方法。

如上配置方式可以很好的工作,但必须继承MultiActionController,Spring Web MVC提供给我们无需继承MultiActionController实现方式,即使有委托对象方式,继续往下看吧。

4.15.7、委托方式实现

(1、控制器UserDelegate

   将UserController复制一份,改名为UserDelegate,并把继承MultiActionController去掉即可,其他无需改变。

(2、spring配置文件chapter4-servlet.xml 

Java代码 
  1. <!—委托对象-->  
  2. <bean id="userDelegate" class="cn.javass.chapter4.web.controller.UserDelegate">  
  3.    <property name="userService" ref="userService"/>  
  4.    <property name="createView" value="user2/create"/>  
  5.    <property name="updateView" value="user2/update"/>  
  6.    <property name="deleteView" value="user2/delete"/>  
  7.    <property name="listView" value="user2/list"/>  
  8.    <property name="redirectToListView" value="redirect:/user2/list"/>  
  9. </bean>  
  10. <!—控制器对象-->  
  11. <bean name="/user2/**"   
  12. class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">  
  13. <property name="delegate" ref="userDelegate"/>  
  14.     <property name="methodNameResolver" ref="parameterMethodNameResolver"/>  
  15. </bean>  

 delegate控制器对象通过delegate属性指定委托对象,即实际调用delegate委托对象的功能方法。

 methodNameResolver此处我们使用ParameterMethodNameResolver解析器;

Java代码 
  1. <!—ParameterMethodNameResolver -->  
  2. <bean id="parameterMethodNameResolver"   
  3. class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">  
  4. <!-- 1、根据请求参数名解析功能方法名 -->  
  5.     <property name="methodParamNames" value="create,update,delete"/>  
  6.     <!-- 2、根据请求参数名的值解析功能方法名 -->  
  7.     <property name="paramName" value="action"/>  
  8. <!-- 3、逻辑方法名到真实方法名的映射 -->  
  9.     <property name="logicalMappings">  
  10.        <props>  
  11.            <prop key="doList">list</prop>  
  12.        </props>  
  13.     </property>  
  14.     <!—4、默认执行的功能处理方法 -->  
  15.     <property name="defaultMethodName" value="list"/>  
  16. </bean>     

1、methodParamNamescreate,update,delete,当请求中有参数名为这三个的将被映射为功能方法名,如“<input type="submit"name="create" value="新增"/>”提交后解析得到的功能方法名为create;

2、paramName:当请求中有参数名为action,则将值映射为功能方法名,如“<input type="hidden" name="action" value="delete"/>”,提交后解析得到的功能方法名为delete;

3、logicalMappings:逻辑功能方法名到真实功能方法名的映射,如:

    http://localhost:9080/springmvc-chapter4/user2?action=doList;

    首先请求参数“action=doList”,则第二步解析得到逻辑功能方法名为doList;

    本步骤会把doList再转换为真实的功能方法名list。

4、defaultMethodName:以上步骤如果没有解析到功能处理方法名,默认执行的方法名。

 

(3、视图页面

(3.1、list页面(WEB-INF/jsp/user2/list.jsp)

Java代码 
  1. <a href="${pageContext.request.contextPath}/user2?action=create">用户新增</a><br/>  
  2. <table border="1" width="50%">  
  3.    <tr>  
  4.       <th>用户名</th>  
  5.       <th>真实姓名</th>  
  6.       <th>操作</th>  
  7.    </tr>   
  8.    <c:forEach items="${userList}" var="user">  
  9.    <tr>  
  10.       <td>${user.username }</td>  
  11.       <td>${user.realname }</td>  
  12.       <td>  
  13.           <a href="${pageContext.request.contextPath}/user2?action=update&username=${user.username}">更新</a>  
  14.           |  
  15.           <a href="${pageContext.request.contextPath}/user2?action=delete&username=${user.username}">删除</a>  
  16.       </td>  
  17.    </tr>  
  18.    </c:forEach>     
  19. </table>   

(3.2、update页面(WEB-INF/jsp/user2/update.jsp)

Java代码 
  1. <form action="${pageContext.request.contextPath}/user2" method="post">  
  2. <input type="hidden" name="action" value="update"/>  
  3. 用户名: <input type="text" name="username" value="${command.username}"/><br/>  
  4. 真实姓名:<input type="text" name="realname" value="${command.realname}"/><br/>  
  5. <input type="submit" value="更新"/>  
  6. </form>   

  通过参数name="action" value="update"来指定要执行的功能方法名update。

 

(3.3、create页面(WEB-INF/jsp/user2/create.jsp)

Java代码 
  1. <form action="${pageContext.request.contextPath}/user2" method="post">  
  2. 用户名: <input type="text" name="username" value="${command.username}"/><br/>  
  3. 真实姓名:<input type="text" name="realname" value="${command.realname}"/><br/>  
  4. <input type="submit" name="create" value="新增"/>  
  5. </form>   

  通过参数name="create"来指定要执行的功能方法名create。

(4、测试:

使用ParameterMethodNameResolver将进行如下解析:

http://localhost:9080/springmvc-chapter4/user2?create      ————>create功能处理方法名(参数名映射);

http://localhost:9080/springmvc-chapter4/user2?action=create————>create功能处理方法名(参数值映射);

 

http://localhost:9080/springmvc-chapter4/user2?update      ————>update功能处理方法名;

http://localhost:9080/springmvc-chapter4/user2?action=update————>update功能处理方法名;

 

http://localhost:9080/springmvc-chapter4/user2?delete      ————>delete功能处理方法名;

http://localhost:9080/springmvc-chapter4/user2?action=delete————>delete功能处理方法名;

 

http://localhost:9080/springmvc-chapter4/user2?doList      ————>通过logicalMappings解析为list功能处理方法。

http://localhost:9080/springmvc-chapter4/user2?action=doList————>通过logicalMappings解析为list功能处理方法。

http://localhost:9080/springmvc-chapter4/user2————>默认的功能处理方法名list(默认)。 

 

私塾在线学习网原创内容(http://sishuok.com

原创内容,转载请注明私塾在线【http://sishuok.com/forum/blogPost/list/0/5514.html

 

 

 

精品视频课程推荐

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

ssh+jbpm项目(某集团OA)视频教程
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。 包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的taglib;示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器

Weblogic实战视频教程
WebLogic基础知识:WebLogic基本概念、正确安装WebLogic、建域、应用部署于JDBC选择、对WebLogic的监控和日志查看、集群的高可用性;课程目标:彻底掌握WebLogic的基本概念,在理解基本概念的基础上做到正确的安装WebLogic,根据不同的需求创建域,合理选择应用部署和JDBC配置。熟练掌握WebLogic的console监控,了解各种性能和运行指标,以及对监控结果的分析,运用集群的高可用性,对集群架设。

高级软件架构师实战培训阶段一
内容概述:本课程专注于构建:高可扩展性、高性能、大数据量、高并发、分布式的系统架构。 从零开始、全面系统、成体系的软件架构课程,循序渐进的讲述构建上述系统架构所需要的各种技术知识和技能。
技术要点: 1:构建基本的业务功能块,基于Maven+Git+Spring mvc+spring+mybatis+ehcache+mysql+X-gen代码生成
 2:高扩展性的分布式体系架构(基于Nginx+Varnish+Memcache+ActiveMQ)
 3:NoSQL的合理使用和架构优化(基于MongoDB)
 4:分布式文件存储和架构优化(基于MogileFS)

浏览(23544)|评论(0)   交流分类:Java|笔记分类: 跟开涛学Spring……

评论(0)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网