zoukankan      html  css  js  c++  java
  • SpringMVC入门(二)

      列位看官,上篇介绍了springMVC的工作流程以及基于此的编程步骤,但实际开发过程中一般都不这么干,就如spring有注解标识bean等简化spring的开发流程,减少配置过程,那springMVC也就有基于注解的开发过程,接下来我们就介绍下:

    一.基于注解的SpringMVC开发步骤

      开始的步骤与上篇相同,就直接复制了  

    1. 导包,导入springMVC的jar包
      • 如果是maven工程,则添加依赖,配置的pom.xml文件如下:
      • <dependencies>
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>4.1.1.RELEASE</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
                  <version>4.1.1.RELEASE</version>
              </dependency>
          </dependencies>
    2. 添加配置文件(springmvc.xml)
      • 从网上找了一份复制如下:
      • <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:p="http://www.springframework.org/schema/p" 
            xmlns:context="http://www.springframework.org/schema/context" 
            xmlns:mvc="http://www.springframework.org/schema/mvc" 
            xmlns:task="http://www.springframework.org/schema/task"
            xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-4.1.xsd 
                http://www.springframework.org/schema/mvc 
                http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 
                http://www.springframework.org/schema/task 
                http://www.springframework.org/schema/task/spring-task-4.1.xsd">    
         
         </beans>
    3. 配置DispatchServlet(前端控制器)到web.xml
      • <servlet>
              <servlet-name>springmvc</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:springmvc.xml</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>springmvc</servlet-name>
              <url-pattern>*.do</url-pattern>
          </servlet-mapping> 
    4. 还是编写起controller作用的类,但 与上篇不同,有几个改进点
      • 不再实现Controller接口,使用@Controller注解替代,同时也无须在spingmvc.xml配置该controller Bean
      • 处理器方法不再是handlerRequest,可以命名为其他的,方法名不作要求
      • 处理器可以添加多个方法处理多个请求路径的请求,每个方法处理一种类型的请求,只要在方法前加@RequestMapping("请求路径"),告诉DispatcherServlet(前端控制器)请求路径与方法的对应关系,同理也无须再springmvc.xml文件中配置HandlerMapping
      • 处理方法的返回对象即可以是ModelAndView对象,也可以是String(代表视图名)
      • import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        
        @Controller
        public class HelloController {
            @RequestMapping("/hello.do")
            public String sayHeelo(){
                System.out.println("hello!!!!");
                return "hello";
            }
        }
    5. 然后再配置springmvc.xml,此次配置就与上次不同了
      • 配置组件扫描
      • 配置mvc注解
      • 配置视图解析器
      • <!-- 配置组件扫描 -->    
             <context:component-scan base-package="controller" />
             <!-- 配置mvc注解 -->
             <mvc:annotation-driven />
             <!-- 配置视图解析器 -->
             <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/"></property>
                    <property name="suffix" value=".jsp"></property>
            </bean>
    6. 编写具体的视图对象,如jsp页面,以便响应给用户
      • 编写一个hello.jsp页面在WEB-INF目录下
      • <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>hello</title>
        </head>
        <body>
            <h1>Hello,SpringMVC!</h1>
        </body>
        </html>
    7. 加载到tomcat容器运行,然后访问 http://localhost:8080/springmvc01/hello.do  (注:springmvc01是你的工程名)运行界面如下:

     二.其他

    1. 读取请求参数值
      1. 通过request对象(将request对象作为方法的入参即可)
        • 在处理方法里添加HttpServletRequest入参
        • 以处理登录页面请求为例:
        •     @RequestMapping("login.do")
              public String Login(HttpServletRequest request){
                  String username=request.getParameter("username");
                  String password=request.getParameter("password");
                  System.out.println("username:"+username+" password:"+password);
                  return "hello";
              }
      2. 使用@RequestParam注解(将注解添加到方法的入参前面即可)
        • 当处理方法里面的形参名与表单里元素name值一致时,可以不用注解(平时最好加上注解,避免出错
        •     @RequestMapping("login2.do")
              public String login2(String username,String password){
                  System.out.println("username:"+username+" password:"+password);
                  return "hello";
              }
        • 当处理方法的形参名与request.getParameter("arg0")里面的arg0即实际参数名不一致时,可以使用@RequestParam注解
        •     @RequestMapping("login2.do")
              public String login2(String username,@RequestParam("password") String pwd){
                  System.out.println("username:"+username+" password:"+pwd);
                  return "hello";
              }
      3. 使用javaBean封装请求参数值
        • 写一个java类,封装请求参数。其中与实际参数严格保持一致
        • 然后将该javaBean作为方法的入参
        • public class LoginParam {
              private String username;
              private String password;
              
              public String getUsername() {
                  return username;
              }
              public void setUsername(String username) {
                  this.username = username;
              }
              public String getPassword() {
                  return password;
              }
              public void setPassword(String password) {
                  this.password = password;
              }
              
          }
              @RequestMapping("login3.do")
              public String login3(LoginParam loginParam){
                  System.out.println("username:"+loginParam.getUsername()+" password:"+loginParam.getPassword());
                  return "hello";
              }
    2. 向页面传值
      1. 仍然通过request对象
        • 使用setAttribute将数据绑定到request对象,然后转发到jsp(注:springmvc默认使用转发) 
        •     @RequestMapping("login4.do")
              public String login4(LoginParam loginParam,HttpServletRequest request){
                  System.out.println("username:"+loginParam.getUsername()+" password:"+loginParam.getPassword());
                  //将数据绑定到request
                  request.setAttribute("username", loginParam.getUsername());
                  //springMVC默认使用转发,即request.getRequestDispatcher(arg0)
                  return "hello";
              }
      2. 使用ModelAndView
        • 将数据封装到ModelAndView对象里面,然后将该对象作为方法的返回值
        • //向页面传值
              @RequestMapping("login5.do")
              public ModelAndView login5(LoginParam loginParam){
                  System.out.println("username:"+loginParam.getUsername()+" password:"+loginParam.getPassword());
                  Map<String,Object> data=new HashMap<String,Object>();
                  //相当于request.setAttribute("username", loginParam.getUsername());
                  data.put("username", loginParam.getUsername());
                  //构造ModelAndView对象
                  ModelAndView mav=new ModelAndView("hello",data);
                  return mav;
              }

          jsp页面用EL表达式呈现

        • <body>
              <h1>Hello,SpringMVC!</h1>
              <h1>welcome ${username}</h1>
          </body>
      3. 使用ModelMap
        • 将该对象作为方法的入参,然后将数据绑定到该ModelMap对象上,使用modelMap.addAttribute()方法
        • //向页面传值
              @RequestMapping("login6.do")
              public String login6(LoginParam loginParam,ModelMap modelMap){
                  System.out.println("username:"+loginParam.getUsername()+" password:"+loginParam.getPassword());
                  //相当于request.setAttribute
                  modelMap.addAttribute("username",loginParam.getUsername());
                  return "hello";
              }
      4.  使用session
        • 将HttpSession作为方法的入参,然后将数据绑定到session对象上即可
        • //向页面传值
              @RequestMapping("login7.do")
              public String login7(LoginParam loginParam,HttpSession session){
                  System.out.println("username:"+loginParam.getUsername()+" password:"+loginParam.getPassword());
                  session.setAttribute("username", loginParam.getUsername()); 
                  return "hello";
              }
              
    3. 重定向
      1. 如果方法的返回值是String
        • 在重定向地址前加“redirect:”,
        • return "redirect:toIndex.do";
        • 1 //重定向
          2     @RequestMapping("login8.do")
          3     public String login8(){        
          4         return "redirect:hello.do";
          5     }
      2. 如果方法的返回值是ModelAndView
        • 使用RedirectView 对象
        •     //重定向
              @RequestMapping("login9.do")
              public ModelAndView login9(){
                  RedirectView rv=new RedirectView("hello.do");
                  return new ModelAndView(rv);
              }
  • 相关阅读:
    appium之模拟坐标方法介绍
    mysql操作数据库常用命令
    appium使用无线连接手机方法
    mysql数据之增删改操作
    mysql之子查询与分组查询
    selenium之多个窗口之间切换
    selenium之内嵌网页iframe切换
    CF103E
    CF724E
    光伏元件
  • 原文地址:https://www.cnblogs.com/hijackhou/p/9418790.html
Copyright © 2011-2022 走看看