Spring MVC学习(四)-------Controller接口控制器详解1
来源:互联网 发布:edc刀具知乎 编辑:程序博客网 时间:2024/05/21 20:24
4.1、Controller简介
4.2、Controller接口
package org.springframework.web.servlet.mvc; public interface Controller { ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; }
4.3、WebContentGenerator
4.4、AbstractController
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //委托给WebContentGenerator进行缓存控制 checkAndPrepare(request, response, this instanceof LastModified); //当前会话是否应串行化访问. if (this.synchronizeOnSession) { HttpSession session = request.getSession(false); if (session != null) { Object mutex = WebUtils.getSessionMutex(session); synchronized (mutex) { return handleRequestInternal(request, response); } } } return handleRequestInternal(request, response); }
public class HelloWorldController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { //1、收集参数 //2、绑定参数到命令对象 //3、调用业务对象 //4、选择下一个页面 ModelAndView mv = new ModelAndView(); //添加模型数据 可以是任意的POJO对象 mv.addObject("message", "Hello World!"); //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面 mv.setViewName("hello"); return mv; } }
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/hello" class="cn.javass.chapter4.web.controller.HelloWorldController"/>
public class HelloWorldWithoutReturnModelAndViewController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { resp.getWriter().write("Hello World!!"); //如果想直接在该处理器/控制器写响应 可以通过返回null告诉DispatcherServlet自己已经写出响应了,不需要它进行视图解析 return null; } }
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloWithoutReturnModelAndView" class="cn.javass.chapter4.web.controller.HelloWorldWithoutReturnModelAndViewController"/>
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloWithPOST" class="cn.javass.chapter4.web.controller.HelloWorldController"> <property name="supportedMethods" value="POST"></property> </bean>
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloRequireSession" class="cn.javass.chapter4.web.controller.HelloWorldController"> <property name="requireSession" value="true"/> </bean>
在进入该控制器时,一定要有session存在,否则抛出HttpSessionRequiredException异常。
package cn.javass.chapter4.web.controller; //省略import public class HelloWorldCacheController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { //点击后再次请求当前页面 resp.getWriter().write("<a href=''>this</a>"); return null; } }
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloCache" class="cn.javass.chapter4.web.controller.HelloWorldCacheController"> <property name="cacheSeconds" value="5"/> </bean>
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloNoCache" class="cn.javass.chapter4.web.controller.HelloWorldCacheController"> <property name="cacheSeconds" value="0"/> </bean>
package cn.javass.chapter4.web.controller; public class HelloWorldLastModifiedCacheController extends AbstractController implements LastModified { private long lastModified; protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { //点击后再次请求当前页面 resp.getWriter().write("<a href=''>this</a>"); return null; } public long getLastModified(HttpServletRequest request) { if(lastModified == 0L) { //TODO 此处更新的条件:如果内容有更新,应该重新返回内容最新修改的时间戳 lastModified = System.currentTimeMillis(); } return lastModified; } }
<!— 在chapter4-servlet.xml配置处理器 --> <bean name="/helloLastModified" class="cn.javass.chapter4.web.controller.HelloWorldLastModifiedCacheController"/>
<filter> <filter-name>etagFilter</filter-name> <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> </filter> <filter-mapping> <filter-name>etagFilter</filter-name> <servlet-name>chapter4</servlet-name> </filter-mapping>
protected String generateETagHeaderValue(byte[] bytes) { StringBuilder builder = new StringBuilder("\"0"); DigestUtils.appendMd5DigestAsHex(bytes, builder); builder.append('"'); return builder.toString(); }
0 0
- Spring MVC学习(四)-------Controller接口控制器详解1
- Spring MVC学习(四)-------Controller接口控制器详解1
- Spring MVC学习(四)-------Controller接口控制器详解2
- Spring MVC学习(四)-------Controller接口控制器详解3
- Spring MVC学习(四)-------Controller接口控制器详解4
- Spring MVC学习(四)-------Controller接口控制器详解5
- Spring MVC学习(四)-------Controller接口控制器详解6
- Spring MVC学习(四)-------Controller接口控制器详解7(完)
- Spring MVC学习(四)-------Controller接口控制器详解2
- Spring MVC学习(四)-------Controller接口控制器详解3
- Spring MVC学习(四)-------Controller接口控制器详解4
- Spring MVC学习(四)-------Controller接口控制器详解5
- Spring MVC学习(四)-------Controller接口控制器详解6
- Spring MVC学习(四)-------Controller接口控制器详解7(完)
- Spring MVC详解(四) Controller接口控制器详解(1)
- Spring MVC详解(四) Controller接口控制器详解(1)
- Spring MVC详解(四)Controller接口控制器详解(3)
- Spring MVC详解(四)Controller接口控制器详解 (4)
- 四、数据表准备、表描述
- 包含 233233 的五位数
- 文本数据进行去重操作
- 六、Mysql 表描述
- Java集合
- Spring MVC学习(四)-------Controller接口控制器详解1
- 用户登录记住密码
- P1020 导弹拦截
- [Hnoi2010]Bounce 弹飞绵羊
- 使用eclipse或git命令行将项目托管到github
- 热部署jrebl for idea
- Oracle(20)pl/sql编程 过程、函数、包以及触发器概念
- has。children。filter。find 等过滤,查找
- 134. Gas Station(unsolved)