SpringMVC
springmvc:是spring中的一个web模块框架。遵循了mvc设计模式的。
MVC的概念:指的是软件的web层设计模式。
M:Model 模型。 指的是通过Javabean封装数据
V: View 视图。将Model中的数据进行展示,一般是使用jsp 、html。
C: Controller 控制器。调用Model的数据给到View展示,或者将View中的数据给到model封装。
springmvc开发流程:
1.导入相关的jar包。除了导入springmvc的jar包之外,还需要导入spring的核心包。
2.创建springmvc的配置文件 dispatcher-servlet.xml.
dispatcher-servlet.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描包:在springmvc的配置文件中扫描的一般是controller包下带@Controller注解的类
-->
<context:component-scan base-package="com.myspringmvc.controller"/>
<!--配置一个jsp的视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--/success.jsp-->
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
@RequestMapping、springmvc封装的参数、请求的响应数据
/*
* @RequestMapping注解
* 作用: 1. 映射前端的请求,顺据前端的url进行映射,映射之后会把对应的方法执行。
* 使用: 1. 可以用在类上,也可以在方法上
* 1.1在类上使用请求的地址第一一层级先映射到类上, 再根据第一层地址 寻找第二层地址
* 1.2 path属性私value属性写映射的地址
* 1.3 method属性规定映射到这个地址的请求方式必须是怎么样的。GET/POST PUT DELETE
* 1.44. params: params="username"如果是这个格式,要求请求中必须携带这个参数时params !="username"
* springmvc封装的参数
* 1.在对应的方法参数中,传入-个和前端发送的参数名一 样的参数即可拿到。
* 2.把请求参数封装在实体对象中,要求请求的参数必须和该对象的属性名保持一致。
* 3. @RequestParam注解映射参数。
* 3.1 name 属性和vaLue属性都是作用相同的,指定一个前端传递的参数名, 把这个参数赋值
* 3.2 required属性 如果赋值true,要求这个参数在请求的时候必须要携带。
* 3.3 defaultValue 当前端没有给这个参数传值时给一个默认 值。
* 4.传入原生的API获取参数:HttpServletRequest HttpServletResponse
* springmvc请求的响应数据:
* 1.给方法传入map,将响应的数据存入map中springmvc会将这个map存入request域对象中
* 2.给方法传入Model,调用model对象的ddAttribute存入数据,
* 3.给方法传入ModeLMap,调用modeLMap对象的addAttribute存入数据(key-value)
*springmvc中映射请求的处理方法返回值问题:
* 1.返回的是String类型,如果什么注解都不加的情况之下,这个返回值就是响应的地址。
* 2.返回的是void
* 2.1什么值都不响应
* 2.3需要响应一些数据,传入HttpServletResponse通过这个对象,调用输出流,响应到页面
*
*
**/
UserController类
package com.myspringmvc.controller;
import com.myspringmvc.pojo.Address;
import com.myspringmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PipedWriter;
import java.io.PrintWriter;
import java.util.Map;
@Controller
@RequestMapping(path = "user"/*,method = RequestMethod.GET,params ="username"*/)
public class UserController {
//创建一一个方法, 来处理请求
@RequestMapping(path = "/mvctest")
public String login(Address address,User user, @RequestParam(name = "sex",required = true,defaultValue = "1")String xingbie){
System.out.println(user);
System.out.println(address);
System.out.println(xingbie);
//接受参数调用业务层 返回结果
return "success";//这个返回的结果并非是给到页面的数据,而是响应的页面地址
}
//map方式传值
@RequestMapping(path = "/user1")
public String test(Map<String,Object> data){
data.put("name","qiyu");
data.put("age","19");
return "success";
}
//Model方式传值
@RequestMapping(path = "/user2")
public String test1(Map<String,Object> data, Model model){
data.put("name","qiqi");
data.put("age","19");
model.addAttribute("phone","15273835396");
model.addAttribute(data);
return "success";
}
//ModeLMap方式传值
@RequestMapping(path = "/user3")
public String test2(Map<String,Object> data, Model model, ModelMap modelMap){
data.put("name","qiqi");
data.put("age","19");
// model.addAttribute("phone","15273835396");
model.addAttribute(data);
modelMap.addAttribute("phone","15273835396");
System.out.println(data.getClass());
System.out.println(model.getClass());
System.out.println(modelMap.getClass());
return "success";
}
@RequestMapping(path = "/user4")
@ResponseBody//在方法加上这个注解后,方法中响应的数据会直接放在Response对象中响应给浏览器
// @ResponseBody注解一般搭配异步请求来使用
public ModelAndView test3(ModelAndView modelAndView){
//ModeLAndView类的对象封装响应的数据, 并且可以封装响应的视图地址
modelAndView.setViewName("success");//添加响应地址
modelAndView.addObject("phone","15273835396");
return modelAndView;
}
@RequestMapping(path = "/user5")
public void test4(HttpServletResponse response) throws IOException {
// 如果这个方法在接受到请求之后。只需要处理,处理完之后不需要响应任何的数据或者页面。只需处理请求
PrintWriter printWriter = response.getWriter();
//数据存入响应体response对象中,浏览器会直接解析这些数据,放入新创建的页面当中
printWriter.print("<h1>qiqi</h1>");
printWriter.print("qiqi");
System.out.println("调用业务层,不需要返回任何数据");
}
}
Address 类
package com.myspringmvc.pojo;
public class Address {
private String provinces;
public String getProvinces() {
return provinces;
}
public void setProvinces(String provinces) {
this.provinces = provinces;
}
@Override
public String toString() {
return "Address{" +
"provinces='" + provinces + '\'' +
'}';
}
}
User类
package com.myspringmvc.pojo;
public class User {
private String username;
private String phone;
private String password;
private Address address;
public User() {
}
public User(String username, String phone, String password) {
this.username = username;
this.phone = phone;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", phone='" + phone + '\'' +
", password='" + password + '\'' +
", address=" + address +
'}';
}
}
inde.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="mvctest">SpringMVC</a><br>
<a href="user/mvctest?username=zs&phone=15273835396&password=123456&xingbie=男&provinces=湖南">SpringMVC2</a><br>
<a href="user/user1">SpringMVCUser1</a><br>
<a href="user/user2">SpringMVCUser2</a><br>
<a href="user/user3">SpringMVCUser3</a><br>
<a href="user/user4">SpringMVCUser4</a><br>
<a href="user/user5">SpringMVCUser5</a><br>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a>响应成功</a>
<%
/* out.print(pageContext.getAttribute("name"));
out.print(request.getAttribute("name"));
out.print(session.getAttribute("name"));
out.print(application.getAttribute("name"));*/
out.print(pageContext.getAttribute("phone"));
out.print(request.getAttribute("phone"));
out.print(session.getAttribute("phone"));
out.print(application.getAttribute("phone"));
%>
</body>
</html>