springmvc基础(2)


RequestParam的使用

  • 用于请求参数名和方法参数名不一样时
1
public ModelAndView doNayuki(@RequestParam("rname") String name,@RequestParam("rage") Integer age){}
  • required属性
1
public ModelAndView doNayuki(@RequestParam(value= "rname",required= true) String name,@RequestParam(value="rage",required = true) Integer age){}

对象参数接收

  • 创建Student类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Student {
String name;
String age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}
}
  • 修改接收方式
1
2
3
public ModelAndView doNayuki(Student student){
System.out.printf(student.getName()+student.getAge());
}

返回值

  • ModelAndView

    • 用于返回数据和视图,对视图执行forward
  • String

    • 用于跳转页面

    • 表示视图,可以用逻辑名称和完整视图路径

      1
      2
      3
      public String doNayuki(){
      return "result";
      }
    • 若有@ResponseBody,则表示返回的是数据

  • void

    • 处理ajax时,用void返回值
    • 响应json格式
  • Object

    • 用于返回数据

    • 例如返回值为Student类

      1
      2
      3
      4
      5
      6
      @ResponseBody
      public Student doStudent(){
      Student student = new Student();
      student.setName("Nayuki");
      return student;
      }

静态资源问题

  • 当接收的请求为/时,中央调度器无法处理静态资源的请求

    1
    <url-pattern>/</url-pattern>
  • 当接收的请求为/时,替代了tomcat的defaultServlet

  • 解决方法

    • 在配置文件中使用mvc:default-servlet-handler

      1
      <mvc:default-servlet-handler/>
      • 冲突问题:上面的代码和@RequestMapping有冲突,需要加入下面的代码

        1
        <mvc:annotation-driven/>
    • 在配置文件中使用mvc:resources

      1
      <mvc:resources mapping="/images/**" location="/images/"/>
      • 冲突问题:上面的代码和@RequestMapping有冲突,需要加入下面的代码

        1
        <mvc:annotation-driven/>

地址分类

  • 绝对地址

  • 相对地址

    • 访问地址加”/“

    • 服务器ip+协议号+访问地址

    • 若使用相对地址来当请求的地址,则可使用下面的代码

      1
      <a href="${pageContext.request.contextPath}/user/Nayuki.do">发起Nayuki.do请求</a>
  • 参考地址

    • 访问地址不加”/“

    • 当前页面地址+访问地址

    • 解决当前页面地址混乱问题

      • 使用base标签设定基地址,最终地址为基地址+访问地址

        1
        2
        3
        <head>
        <base href="http://localhost:8080/springmvc/"/>
        </head>
        1
        2
        3
        4
        5
        6
        <%
        String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
        %>
        <head>
        <base href="<%=basePath%>"/>
        </head>