`

Spring MVC学习(四)-------Controller接口控制器详解5

 
阅读更多

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实现类,另外还提供了ParameterMethodNameResolverPropertiesMethodNameResolver,当然我们也可以自己来实现,稍候我们仔细研究下它们是如何工作的。

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

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

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

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

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

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

String:只返回逻辑视图名;

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

2actionName功能方法名字;由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.3MultiActionController类实现

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

核心属性:

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

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

核心方法:

Java代码收藏代码
  1. //判断方法是否是功能处理方法
  2. privatebooleanisHandlerMethod(Methodmethod){
  3. //得到方法返回值类型
  4. ClassreturnType=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(HttpServletRequestrequest,HttpServletResponseresponse),这个方法是由系统调用
  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. returnfalse;
  17. }

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

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

4.15.4MethodNameResolver

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

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

(1、methodParamNames:根据请求的参数名解析功能方法名(功能方法名和参数名同名);

Java代码收藏代码
  1. <propertyname="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(Stringsuffix:SUBMIT_IMAGE_SUFFIXES){//SUBMIT_IMAGE_SUFFIXES{“.x”,“.y”}
  2. if(request.getParameter(name+suffix)!=null){//name是我们配置的methodParamNames
  3. returntrue;
  4. }
  5. }

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

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

Java代码收藏代码
  1. <propertyname="logicalMappings">
  2. <props>
  3. <propkey="doList">list</prop>
  4. </props>
  5. </property>

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

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

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

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

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

4.15.5RequestToViewNameTranslator

用于直接将请求转换为逻辑视图名。默认实现为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. packagecn.javass.chapter4.web.controller;
  2. //省略import
  3. publicclassUserControllerextendsMultiActionController{
  4. //用户服务类
  5. privateUserServiceuserService;
  6. //逻辑视图名通过依赖注入方式注入,可配置
  7. privateStringcreateView;
  8. privateStringupdateView;
  9. privateStringdeleteView;
  10. privateStringlistView;
  11. privateStringredirectToListView;
  12. //省略setter/getter
  13. publicStringcreate(HttpServletRequestrequest,HttpServletResponseresponse,UserModeluser){
  14. if("GET".equals(request.getMethod())){
  15. //如果是get请求我们转向新增页面
  16. returngetCreateView();
  17. }
  18. userService.create(user);
  19. //直接重定向到列表页面
  20. returngetRedirectToListView();
  21. }
  22. publicModelAndViewupdate(HttpServletRequestrequest,HttpServletResponseresponse,UserModeluser){
  23. if("GET".equals(request.getMethod())){
  24. //如果是get请求我们转向更新页面
  25. ModelAndViewmv=newModelAndView();
  26. //查询要更新的数据
  27. mv.addObject("command",userService.get(user.getUsername()));
  28. mv.setViewName(getUpdateView());
  29. returnmv;
  30. }
  31. userService.update(user);
  32. //直接重定向到列表页面
  33. returnnewModelAndView(getRedirectToListView());
  34. }
  35. publicModelAndViewdelete(HttpServletRequestrequest,HttpServletResponseresponse,UserModeluser){
  36. if("GET".equals(request.getMethod())){
  37. //如果是get请求我们转向删除页面
  38. ModelAndViewmv=newModelAndView();
  39. //查询要删除的数据
  40. mv.addObject("command",userService.get(user.getUsername()));
  41. mv.setViewName(getDeleteView());
  42. returnmv;
  43. }
  44. userService.delete(user);
  45. //直接重定向到列表页面
  46. returnnewModelAndView(getRedirectToListView());
  47. }
  48. publicModelAndViewlist(HttpServletRequestrequest,HttpServletResponseresponse){
  49. ModelAndViewmv=newModelAndView();
  50. mv.addObject("userList",userService.list());
  51. mv.setViewName(getListView());
  52. returnmv;
  53. }
  54. //如果使用委托方式,命令对象名称只能是command
  55. protectedStringgetCommandName(Objectcommand){
  56. //命令对象的名字默认command
  57. return"command";
  58. }
  59. }

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

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

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

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

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

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

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

(3、视图页面

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

Java代码收藏代码
  1. <ahref="${pageContext.request.contextPath}/user/create">用户新增</a><br/>
  2. <tableborder="1"width="50%">
  3. <tr>
  4. <th>用户名</th>
  5. <th>真实姓名</th>
  6. <th>操作</th>
  7. </tr>
  8. <c:forEachitems="${userList}"var="user">
  9. <tr>
  10. <td>${user.username}</td>
  11. <td>${user.realname}</td>
  12. <td>
  13. <ahref="${pageContext.request.contextPath}/user/update?username=${user.username}">更新</a>
  14. |
  15. <ahref="${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. <formaction="${pageContext.request.contextPath}/user/update"method="post">
  2. 用户名:<inputtype="text"name="username"value="${command.username}"/><br/>
  3. 真实姓名:<inputtype="text"name="realname"value="${command.realname}"/><br/>
  4. <inputtype="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. <beanid="propertiesMethodNameResolver"
  2. class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
  3. <propertyname="mappings">
  4. <props>
  5. <propkey="/user/create">create</prop>
  6. <propkey="<spanstyle="font-size:1em;line-height:1.5;">/user/</span><spanstyle="font-size:1em;line-height:1.5;">update">update</prop></span>
  7. <propkey="<spanstyle="font-size:1em;line-height:1.5;">/user/</span><spanstyle="font-size:1em;line-height:1.5;">delete">delete</prop></span>
  8. <propkey="<spanstyle="font-size:1em;line-height:1.5;">/user/</span><spanstyle="font-size:1em;line-height:1.5;">list">list</prop></span>
  9. <propkey="/**">list</prop><!--默认的行为-->
  10. </props>
  11. </property>
  12. <propertyname="alwaysUseFullPath"value="false"/><!--不使用全路径-->
  13. </bean>
  14. <beanname="/user/**"class="cn.javass.chapter4.web.controller.UserController">
  15. <!—省略其他配置,详见配置文件-->
  16. <!--使用PropertiesMethodNameResolver来解析功能处理方法名-->
  17. <propertyname="methodNameResolver"ref="propertiesMethodNameResolver"/>
  18. </bean>

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

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

4.15.7、委托方式实现

(1、控制器UserDelegate

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

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

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

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

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

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

1、methodParamNames:create,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. <ahref="${pageContext.request.contextPath}/user2?action=create">用户新增</a><br/>
  2. <tableborder="1"width="50%">
  3. <tr>
  4. <th>用户名</th>
  5. <th>真实姓名</th>
  6. <th>操作</th>
  7. </tr>
  8. <c:forEachitems="${userList}"var="user">
  9. <tr>
  10. <td>${user.username}</td>
  11. <td>${user.realname}</td>
  12. <td>
  13. <ahref="${pageContext.request.contextPath}/user2?action=update&username=${user.username}">更新</a>
  14. |
  15. <ahref="${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. <formaction="${pageContext.request.contextPath}/user2"method="post">
  2. <inputtype="hidden"name="action"value="update"/>
  3. 用户名:<inputtype="text"name="username"value="${command.username}"/><br/>
  4. 真实姓名:<inputtype="text"name="realname"value="${command.realname}"/><br/>
  5. <inputtype="submit"value="更新"/>
  6. </form>

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

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

Java代码收藏代码
  1. <formaction="${pageContext.request.contextPath}/user2"method="post">
  2. 用户名:<inputtype="text"name="username"value="${command.username}"/><br/>
  3. 真实姓名:<inputtype="text"name="realname"value="${command.realname}"/><br/>
  4. <inputtype="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(默认)。

分享到:
评论

相关推荐

    Spring MVC学习(四)-------Controller接口控制器详解1

    Spring MVC学习(四)-------Controller接口控制器详解1

    Spring MVC学习(四)-------Controller接口控制器详解3

    Spring MVC学习(四)-------Controller接口控制器详解3

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

    详解Spring mvc ant path的使用方法

    详解Spring mvc ant path的使用方法 概要: 任何一个WEB都需要解决URL与请求处理器之间的映射,spring MVC也是一样,但Spring MVC就像Spring所作的一切一样(灵活,可以配置各种东西,但是也造成了很多复杂性),肯定...

    SpringMVC教程

    第四章 Controller接口控制器详解 (5).pdf 第四章 Controller接口控制器详解 (6).pdf 第四章 Controller接口控制器详解(7 完).pdf 第五章 处理器拦截器详解.pdf 第六章 注解式控制器详解1(注解式控制器运行...

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,主要用于实现MVC设计模式的Web框架。它分离了控制器、模型对象、过滤器以及处理程序对象的角色,使得它们更容易进行定制。 Spring MVC的优点包括: 基于...

    跟我学SpringMVC 教程

    第四章 Controller接口控制器详解(5) 第四章 Controller接口控制器详解(6) 第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的...

    跟我学SpringMVC

    第四章 Controller接口控制器详解(5) 第四章 Controller接口控制器详解(6) 第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的请求...

    Java之Spring Boot详解

    (2)在 web.xml 文件中配置 Spring mvc 的前端控制器 (3)创建一个 spring mvc 的配置文件 (4)在 spring mvc 的配置文件中进行相关配置   1) 配置注解扫描路径   2)配置处理器映射器   3)配置处理器...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.5 Spring的控制器(Controller) 10.5.1 Controller接口 10.5.2 命令控制器(BaseCommandController) 10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的...

    详解利用SpringMVC拦截器控制Controller返回值

    主要介绍了详解利用SpringMVC拦截器控制Controller返回值,通过定义一个StringResult注解,在访问方法的时候返回StringResult中的内容,有兴趣的可以了解一下。

    Spring-Reference_zh_CN(Spring中文参考手册)

    标准MVC控制器代码 14.5.1.3. 把模型数据转化为XML 14.5.1.4. 定义视图属性 14.5.1.5. 文档转换 14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. ...

    详解Spring MVC如何测试Controller(使用springmvc mock测试)

    主要介绍了详解Spring MVC如何测试Controller(使用springmvc mock测试),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java Spring MVC 上传下载文件配置及controller方法详解

    主要介绍了Java Spring MVC 上传下载文件配置及controller方法详解,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

    SpringMVC Controller 返回值的可选类型详解

    本篇文章主要介绍了SpringMVC Controller 返回值的可选类型详解 ,spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void,有兴趣的可以了解一下

    Spring中MVC模块代码详解

    主要介绍了Spring中MVC模块代码详解,涉及Controller的简单介绍,具有一定借鉴价值,需要的朋友可以参考下。

    看透springMvc源代码分析与实践

    第9章 创建Spring MVC之器90 9.1 整体结构介绍90 9.2 HttpServletBean93 9.3 FrameworkServlet95 9.4 DispatcherServlet100 9.5 小结107 第10章 Spring MVC之用108 10.1 HttpServletBean108 10.2 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.5 Spring的控制器(Controller) 10.5.1 Controller接口 10.5.2 命令控制器(BaseCommandController) 10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的...

    java Spring MVC4环境搭建实例详解(步骤)

    spring WEB MVC框架提供了一个MVC(model-view-controller)模型-视图-控制器的结构和组件,利用它可以开发更灵活、松耦合的web应用。MVC模式使得整个服务应用的各部分(控制逻辑、业务逻辑、UI界面展示)分离开来,使...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5 Spring的控制器(Controller) 10.5.1 Controller接口 10.5.2 命令控制器(BaseCommandController) 10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的...

Global site tag (gtag.js) - Google Analytics