Spring MVC
Spring MVC是一个基于MVC架构的开发框架,帮助我们构建web项目,且支持JSP等其他模板技术。
编写Spring MVC的小程序
创建web项目,引入Spring MVC框架的jar包。
注意 :这里的lib包存放位置为 WEB-INF 下。
在src下创建web文件夹,创建LoginController类–>添加@Controller
注解
添加注解–>@RequestMapping(" ")
–>提供Controller层的访问地址。
package web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/LoginController")
public class LoginController {
@RequestMapping("/login")
// 模拟登录
public String doLogin(){
System.out.println("正在登录------登录完成");
return "../index.jsp";
}
}
在web.xml中添加 核心过滤器DispatcherServlet
–>指定SpringMVC的容器位置
<servlet>
<servlet-name>servlet</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>
</servlet>
加载配置映射地址,这里使用/
,即地址栏中输入/LoginController可使用地址。
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
常见的映射地址 | 意义 |
---|---|
/* | 将所有的客户端请求,都将与@RequestMapping映射地址进行匹配 |
/ | 将根据后缀文件名直接匹配静态资源,默认无后缀则匹配映射地址 |
.do | 根据后缀名用于区分映射请求,和静态资源的请求:.html / .js / .css |
在地址栏中输入设置的地址/LoginController/login
,控制台输出字段,即测试成功。
如何实现参数封装
在src下创建bean文件夹,创建Student 实体类
package bean;
import org.springframework.jdbc.core.SqlReturnResultSet;
import java.util.List;
public class Student {
private int id;
private String name;
private String sex;
private String age;
private List<String> sbs;
public List<String> getSbs() {
return sbs;
}
public void setSbs(List<String> sbs) {
this.sbs = sbs;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
在web文件夹下新建StudentController进行测试。
package web;
import bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping(StudentController.BASE_CONTROLLER)
public class StudentController {
public static final String BASE_CONTROLLER="/StudentController";
public static final String INDEX_PAGE="../index.jsp";
}
基本类型
若出现400错误,则是由于参数类型不匹配。
注意:这里使用类型为Integer
。
@RequestMapping("/getStuById")
public String doLogin(Integer id){
System.out.println("正在查询------查询完成,编号为"+id);
return INDEX_PAGE;
}
类类型引用
即传递对象类型。
注意:传参时spring容器先创建了student对象,在进行传递时直接根据对象中的属性名进行传递。
@RequestMapping("/addStu")
public String addStu(Integer id,Student stu){
System.out.println("ID值为"+id);
System.out.println("学生的信息为:"+stu.getId()+"……"+stu.getName()+"……"+stu.getSex());
return INDEX_PAGE;
}
这里直接在url中进行对对象属性的赋值操作。
http://localhost:8080/StudentController/addStu?id=2&name=zhangsan&sex=nan&age=20
数组和集合
数组
数组传递参数时,先构建数组对象,再封装参数表。
@RequestMapping("/getStuByIds")
public String getStuByIds(Integer[] ids){
for (Integer integer:ids){
System.out.println("正在查询的id数组元素为:"+integer);
}
return INDEX_PAGE;
}
对数组进行赋值。
http://localhost:8080/StudentController/getStuByIds?ids=1&ids=2&ids=3
集合
一般的集合参数封装时,都是定义到类中,然后根据属性名进行传参。
@RequestMapping("/getStuByIds")
public String getStuByIds(Student student){
System.out.println("正在遍历的集合为:"+student.getSbs());
return INDEX_PAGE;
}
对集合进行赋值。
http://localhost:8080/StudentController/getStuByIds?sbs=1&sbs=2&sbs=3
测试与ServletAPI的成员集成使用
了解。
@RequestMapping("/servlet_api")
public String getServletAPI(HttpServletRequest request, HttpServletResponse response){
System.out.println("请求对象为:"+request);
System.out.println("响应对象为:"+response);
System.out.println("session为:"+request.getSession());
return INDEX_PAGE;
}
总结
针对SpringMVC的参数封装,不是由@RequestMapping
注解完成的,而是由核心servlet:DispatchServlet。