springmvc的配置以及url映射传参

来源:互联网 发布:python 判断主机存活 编辑:程序博客网 时间:2024/05/29 02:23

最近在学习Springmvc,做一下基础小结吧。
实现Springmvc有两种方式:方式一是继承controller相关的类,然后进行编写,但这种方式已经过时,方式二则是利用注解的方式进行编写,当下基本都已采用这种方式。

在创建好动态web项目后,我们需要进行配置文件的编写。首先我们更改web.xml文件配置。
采用注解进行编辑的方式
web.xml文件内容:

    <servlet>        <servlet-name>hello</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <!--servlet-class 固定值,将servlet-name注册给 DispatcherServlet -->        <load-on-startup>1</load-on-startup>        <!--服务器加载配置文件顺序,有此属性时可以在服务器启动时加载.xml文件,进行文件的校验,能够较快的分析出是代码出错还是配置文件出错-->        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath*:spring-mvc.xml</param-value>        </init-param>        <!--加载初始配置项,此属性配置可以更改系统默认加载.xml的路径,其中param-name为固定值param-value值为所放xml路径,classpath*表示类路径,可用通配符表示配置文件(*.xml)-->    </servlet>    <servlet-mapping>        <servlet-name>hello</servlet-name>        <url-pattern>*.do</url-pattern>        <!--url-pattern 以/开头和以/*结尾的是用来做路径映射的                      以前缀*.开头用来做扩展的                      单独/是用来default servlet映射的               -->    </servlet-mapping>

根据web文件的servlet-name名称,然后在web.xml同目录下编写hello-servlet.xml文件(文件名称为[servlet-name]-servlet.xml,此配置文件是用来配置springmvc的相关信息。默认情况下系统会根据web.xml文件在同目录中查找[servlet-name]-servlet.xml文件,但是如果配置属性init-param的话,就会到指定的位置进行查找配置文件,此时的配置文件名称没有规则。
spring-mvc.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:context="http://www.springframework.org/schema/context"     xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <context:component-scan base-package="com.wf.springmvc.controller" />    <!-- 扫描基包下的所有注解类 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"        p:viewClass="org.springframework.web.servlet.view.JstlView"        p:prefix="/WEB-INF/view/"        p:suffix=".jsp"/>        <!-- 配置视图名称解析器,配置        p:prefix属性指定controller返回页面的所存放的路径        p:suffix属性指定页面的类型,他们共同组成返回的路径        p:viewClass属性是在返回到jsp页面进行解析jstl标签 --></beans>

在完成配置文件的配置之后,我们就可以进行代码的编写,springmvc主要的代码编写是在controller的注解类中进行编写。
配置注解
@RequestMapping 路径注解属性,可以注解类也可以注解方法。有value属性(一个参数时默认)指定url路径解析,method属性指定提交方式(默认为get提交)
@RequestParam 请求规则注解,value属性匹配前台传递的参数(一个参数时默认),required属性此字段是否必须传值(boolean,默认为true),defaultValue此参数的默认值(存在此参数时,说明前台不必需传递参数,required为false)
@PathVariable 注解绑定Url传过来的值到方法的参数上面,此注解一般用于url模板传参。
注意RequestParam 与PathVariable 的区别

 1. 方式一 基本的传递    @RequestMapping("/login")   // url:http://localhost:8080/login/login.do     public String login(HttpServletRequest request){            String name=request.getParameter("name"); // 获取前台传递的参数        return "start";    } 2. 方式二 利用超链接进行跳转传递参数 前台name需要与注解RequestParam的参数保持一致。(传递少许参数)    @RequestMapping("/login")  //url:http://localhost:8080/login/login.do?name=tom    public String login(@RequestParam(value="age",required=false,defaultValue="24") String agenum,@RequestParam("name") String name){        System.out.println(agenum); // 前台参数自动绑定到idmun中        System.out.println(name);         return "start";    } 3. 方式三 url模板传参,将参数作为路径的一部分,不建议使用    @RequestMapping("/login/{name}/{id}")    // http://localhost:8080/login/login/lisi/m123.do      public String login(@PathVariable("name") String name01,@PathVariable("id") String id01){        System.out.println(name01);        System.out.println(id01);        return "start";    } 4. 方式四 指定提交方式,RequestMethod类的相应属性(常用)    @RequestMapping("/check",method=RequestMethod.POST)    public String check(HttpServletRequest request,HttpServletResponse response ){        String name=request.getParameter("name");        String pwd=request.getParameter("pwd");        if("tom".equals(name) && "1234".equals(pwd)){            return "success";        }        return "error";    } 5. 方式五 post提交表单 传递模型Model参数 将表单封装为对应的javabean进行传递(常用)    @RequestMapping(value="/check",method=RequestMethod.POST)    public String check(User user){        if("tom".equals(user.getName()) && "1234".equals(user.getPwd())){            return "success";        }        return "error";     } 6. 特殊的 属性编辑器 在前台到后台data日期类型等的转化会出错,此时我们需要属性编辑器进行属性的转化     //日期传递参数会产生异常,因此在传递时间参数时,需要进行类型转换,在初始化时进行数据的绑定与转化    @RequestMapping(value="/todate/{data}",method=RequestMethod.GET)    public String todate(@PathVariable("data") Date date){        System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));        return "start";    }    @InitBinder    //初始化参数绑定, 日期类型的转化,    public void initBinder(ServletRequestDataBinder binder){        binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));    }

在拦截的url中,不否定在不同类中有相同路径,例如在StudentController和StudentController中都会有相应的增删改查方法且方法的RequestMapping路径相同,此时我们就可以在类的注解加入相应的RequestMapping。例如路径http://localhost:8080/login/student/add.do 和 http://localhost:8080/login/teacher/add.do

0 0
原创粉丝点击