1.SpringMVC简介
??SpringMVC:是基于spring的一个框架,实际上就是spring的一个模块,专门做web开发的。理解是servlet的一个升级 ??web开发底层是servlet,框架是在servlet基础上面加一些功能,让你做web开发方便。 ??springMVC就是一个Spring。Spring是一个容器,ioc能够管理对象,使用,@Component、@Respository、@Service、@Controller。因此,SpringMVC也能够创建对象,放入到(SpringMVC)容器中,它存放的是控制器对象(@Controller) ??我们要做的是,使用@Controller创建控制器对象,把对象放入到springmvc容器中,把创建的对象作为控制器使用。 ??这个控制器对象能接收用户的请求,显示处理结果,就当做是一个servlet使用。 ??要注意的是,使用@Controller创建的实际上只是一个普通类的对象,不是Servlet。但是springmvc赋予了控制器对象一些额外的功能。 ??因为web开发的底层是servlet,springmvc中有一个对象是Servlet:DispatherServlet(中央调度器也叫前端控制器) ??DispatherServlet:负责接收用户的所有请求,用户把请求给了DispatherServlet,之后DispatherServlet把请求转发给了Controller对象,最后是Controller对象处理请求。请求的传递如下:
index.jsp----->DispatherServlet(Servlet)—转发,分配给–>Controller对象(@Controller注解的对象)
??所以,当我们使用springmvc框架时,所需要一个中央调度器和一个Controller对象
2.SpringMVC框架的使用
1.加入依赖
spring-webmvc依赖,简介把spring的依赖都加入到项目 jsp、servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
2.在web.xml中注册springmvc框架的核心对象DispatcherServlet
<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>
3.创建一个发送请求的页面index.jsp
4.创建控制器类
1)在类的上面加入@Controller注解,创建对象,并放入到springmvc容器中 2)在类中的方法上面加入@RequestMapping注解
@Controller
public class MyController {
@RequestMapping(value="/some.do",method = RequestMethod.POST)
public ModelAndView dosome(){
ModelAndView mv=new ModelAndView();
mv.addObject("msg","这是一个使用springmvc框架做的开发");
mv.setViewName("show");
return mv;
}
}
5.创建一个作为结果的jsp,显示请求的处理结果
6.创建springmvc的配置文件
1)声明注解扫描器,指定@Controller注解所在的包名
<context:component-scan base-package="com.wxk.controller"/>
2)声明视图解析器,帮助处理视图的。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
7.总结springmvc请求的处理流程
1)前端发起some.do请求 2)tomcat(扫描web.xml—>通过url-pattern知道*.do的请求给了DispatcherServlet) 3)DispatcherServlet(根据springmvc.xml配置知道some.do请求和控制层中的doSome()方法相对应) 4)DispatcherServlet把some.do转发给doSome()方法 5)框架执行doSome()把得到的ModeAndView进行处理,转发到show.jsp(前端页面)
3.SpringMVC相关知识点
3.1 @RequestMapping放在类的上面
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping({"/some.do","other.do"})
public ModelAndView dosome(){
ModelAndView mv=new ModelAndView();
mv.addObject("msg","这是一个使用springmvc框架做的开发");
mv.setViewName("show");
return mv;
}
}
3.2 形参Request、Response、Session
Request、Response、Session可以在方法的形参中声明,框架会自动给其赋值
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(HttpServletRequest request,
HttpServletResponse response,
HttpSession session){
String name= (String) request.getParameter("name");
System.out.println(name);
ModelAndView mv=new ModelAndView();
mv.addObject("msg","这是一个使用springmvc框架做的开发");
mv.setViewName("show");
return mv;
}
3.3 接收参数:逐个接收方案
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(String name,Integer age){
ModelAndView mv=new ModelAndView();
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}
3.4 接收参数:注解接收参数
??前端传来的参数名并不总是和控制器方法中的形参名一致,此时可以使用@RequestParam注解来解决名字不一致的问题,同时还能解决如果前端未传参数报错的问题
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(@RequestParam(value = "sname",required = false) String name,
@RequestParam(value = "sage",required = false) Integer age){
ModelAndView mv=new ModelAndView();
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}
3.5 接收参数:对象接收方案
??但接收的数据非常多时,可以考虑使用java对象来接收请求数据
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public ModelAndView dosome(Student student){
ModelAndView mv=new ModelAndView();
mv.addObject("name",student.getName());
mv.addObject("age",student.getAge());
mv.addObject("student",student);
mv.setViewName("show");
return mv;
}
}
3.6 返回值:ModelAndView
Model:数据,请求处理完成后,要显示给用户的数据 View:视图,比如jsp等
??ModelAndView同时包含数据和视图,如果你的请求在处理完后,需要返回数据的同时还需要跳转到其他页面,可以使用ModelAndView。 ??相反,如果你只需要数据或是只需要进行视图的跳转,那么不建议使用ModelAndView ??具体使用方法可以点击此处查看
3.7 返回值:String
主要进行视图的跳转
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public String dosome(Student student,HttpServletRequest request){
student.setName("张三");
request.setAttribute("name",student.getName());
return "show";
}
}
3.8 返回值:void
void本身既表示数据也不能表示视图 在处理ajax请求的时候,可以使用void返回值。通过HttpServletResponse输出数据,响应ajax请求。
<script type="text/javascript">
$(function () {
$("input[type='button']").click(function () {
$.ajax({
url:"some.do",
data:{
name:"张三",
age:12
},
type:"post",
dataType:"json",
success:function (resp) {
console.log(resp.name+","+resp.age)
}
})
})
})
</script>
处理器调用HttpServletResponse返回一个json数据
@Controller
public class MyController {
@RequestMapping(value = "/some.do",method = RequestMethod.POST)
public void dosome(HttpServletResponse response,String name,Integer age) throws IOException {
Student student=new Student();
student.setName(name);
student.setAge(age);
String st=JSON.toJSONString(student);
response.getWriter().write(st);
}
}
3.9 返回值:对象Object
|