4.5、ServletForwardingController
java代码:
- package cn.javass.chapter4.web.servlet;
- public class ForwardingServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- resp.getWriter().write("Controller forward to Servlet");
- }
- }
java代码:
- <servlet>
- <servlet-name>forwarding</servlet-name>
- <servlet-class>cn.javass.chapter4.web.servlet.ForwardingServlet</servlet-class>
- </servlet>
java代码:
- <!— 在chapter4-servlet.xml配置处理器 -->
- <bean name="/forwardToServlet"
- class="org.springframework.web.servlet.mvc.ServletForwardingController">
- <property name="servletName" value="forwarding"></property>
- </bean>
4.6、BaseCommandController
4.7、AbstractCommandController
java代码:
- package cn.javass.chapter4.model;
- public class UserModel {
- private String username;
- private String password;
- //省略setter/getter
- }
java代码:
- package cn.javass.chapter4.web.controller;
- //省略import
- public class MyAbstractCommandController extends AbstractCommandController {
- public MyAbstractCommandController() {
- //设置命令对象实现类
- setCommandClass(UserModel.class);
- }
- @Override
- protected ModelAndView handle(HttpServletRequest req, HttpServletResponse resp, Object command, BindException errors) throws Exception {
- //将命令对象转换为实际类型
- UserModel user = (UserModel) command;
- ModelAndView mv = new ModelAndView();
- mv.setViewName("abstractCommand");
- mv.addObject("user", user);
- return mv;
- }
- }
java代码:
- <!— 在chapter4-servlet.xml配置处理器 -->
- <bean name="/abstractCommand"
- class="cn.javass.chapter4.web.controller.MyAbstractCommandController">
- <!-- 也可以通过依赖注入 注入命令实现类 -->
- <!-- property name="commandClass" value="cn.javass.chapter4.model.UserModel"/-->
- </bean>
java代码:
- <!— WEB-INF/jsp/abstractCommand.jsp视图下的主要内容 -->
- ${user.username }-${user.password }
4.8、AbstractFormController
java代码:
- @Override
- rotected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- //1、是否是表单提交? 该方法实现为("POST".equals(request.getMethod())),即POST表示表单提交
- if (isFormSubmission(request)) {
- try {
- Object command = getCommand(request);
- ServletRequestDataBinder binder = bindAndValidate(request, command);
- BindException errors = new BindException(binder.getBindingResult());
- //表单提交应该放到该方法实现
- return processFormSubmission(request, response, command, errors);
- }
- catch (HttpSessionRequiredException ex) {
- //省略部分代码
- return handleInvalidSubmit(request, response);
- }
- }
- else {
- //2、表示是表单展示,该方法又转调showForm方法,因此我们需要覆盖showForm来完成表单展示
- return showNewForm(request, response);
- }
java代码:
- protected Map referenceData(HttpServletRequest request) throws Exception {
- Map model = new HashMap();
- model.put("cityList", cityList);
- return model;
- }
4.9、SimpleFormController
java代码:
- package cn.javass.chapter4.web.controller;
- //省略import
- public class RegisterSimpleFormController extends SimpleFormController {
- public RegisterSimpleFormController() {
- setCommandClass(UserModel.class); //设置命令对象实现类
- setCommandName("user");//设置命令对象的名字
- }
- //form object 表单对象,提供展示表单时的表单数据(使用commandName放入请求)
- protected Object formBackingObject(HttpServletRequest request) throws Exception {
- UserModel user = new UserModel();
- user.setUsername("请输入用户名");
- return user;
- }
- //提供展示表单时需要的一些其他数据
- protected Map referenceData(HttpServletRequest request) throws Exception {
- Map map = new HashMap();
- map.put("cityList", Arrays.asList("山东", "北京", "上海"));
- return map;
- }
- protected void doSubmitAction(Object command) throws Exception {
- UserModel user = (UserModel) command;
- //TODO 调用业务对象处理
- System.out.println(user);
- }
- }
java代码:
- <bean name="/simpleForm"
- class="cn.javass.chapter4.web.controller.RegisterSimpleFormController">
- <property name="formView" value="register"/>
- <property name="successView" value="redirect:/success"/>
- </bean>
- <bean name="/success" class="cn.javass.chapter4.web.controller.SuccessController"/>
java代码:
- <!-- register.jsp 注册展示页面-->
- <form method="post">
- username:<input type="text" name="username" value="${user.username}"><br/>
- password:<input type="password" name="username"><br/>
- city:<select>
- <c:forEach items="${cityList }" var="city">
- <option>${city}</option>
- </c:forEach>
- </select><br/>
- <input type="submit" value="注册"/>
- </form>
4.10、CancellableFormController
java代码:
- @Override
- protected ModelAndView onCancel(Object command) throws Exception {
- UserModel user = (UserModel) command;
- //TODO 调用业务对象处理
- System.out.println(user);
- return super.onCancel(command);
- }
java代码:
- <bean name="/canCancelForm"
- class="cn.javass.chapter4.web.controller.CanCancelRegisterSimpleFormController">
- <property name="formView" value="register"/>
- <property name="successView" value="redirect:/success"/>
- <property name="cancelView" value="redirect:/cancel"/>
- </bean>
- <bean name="/cancel" class="cn.javass.chapter4.web.controller.CancelController"/>
java代码:
- <input type="submit" name="_cancel" value="取消"/>