学习:狂神

SpringMVC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-------->> 导jar包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
  • 注册bean

注册HandlerMapping,HandlerAdapter,配置视图ViewResolver,注册执行类/hello

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

<!-- 无法使用中文注释时,可尝试修改字符集UTF-8为GBK(或UTF8)
xml文件中文注释报错解决办法:https://blog.csdn.net/kejijun/article/details/108228535
-->

<!-- 配置视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

<bean id="/hello" class="com.controller.HelloController"/>
  • 创建Servlet容器配置

DispatcherServlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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-serlvet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
  • 实现Controller接口:创建控制器类
1
2
3
4
5
6
7
8
9
10
11
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

ModelAndView mv=new ModelAndView();
System.out.println("CCCCCCCCCCCC");
mv.addObject("msg","msg返回信息到jsp页面");
mv.setViewName("packge");
return mv;
}
}

注解入门

  • 配置
1
2
3
4
5
6
7
8
9
10
<context:component-scan base-package="com.controller"/>
<!-- 资源过滤 -->
<mvc:default-servlet-handler/>
<!--mvc注解驱动 -->
<mvc:annotation-driven/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
  • 创建控制器类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Controller
@RequestMapping("/big")
public class HelloMaking {
@RequestMapping("/hello")
public String hello(Model model){
// 封装数据
model.addAttribute("msg","return msg to hello");
return "hello"; //会被视图解析器处理 拼接/WEB-INF/jsp/hello.jsp
}


@RequestMapping("/save")
@ResponseBody //@ResponseBody设置当前控制器方法响应内容为当前返回值,无需(视图解析器)解析
public String save(){
System.out.println("user save ...");
return "{'module':'springmvc'}"; //使用@ResponseBody直接返回字符串
}
}

@Controller

名称@Controller
类型类注解
位置SpringMVC控制器类定义上方
作用设定SpringMVC的核心控制器bean

@RequestMapping

名称@RequestMapping
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法请求访问路径
相关属性value(默认),请求访问路径

@ResponseBody

名称@ResponseBody
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法响应内容为当前返回值,无需解析

RestFul风格

1
2
3
http://localhost/test/save?id=1
http://localhost/test/update
http://localhost/test/delete?id=1
  • 传统模式 URI 和 RESTful 风格对比

【1】查询

查询传统RESTREST 后台接收
查询所有localhost:8080/employee/listlocalhost:8080/employees@RequestMapping(value = “/employees”, method = RequestMethod.GET)
查询单个localhost:8080/employee/list?id=1localhost:8080/employees/1@RequestMapping(value = “/employees/{id}”, method = RequestMethod.GET)
@ResponseBody public Employee queryById(@PathVariable Long id) {}

​ 【2】添加

添加传统RESTREST 后台接收
添加localhost:8080/employee/addlocalhost:8080/employees@RequestMapping(value = “/employees”, method = RequestMethod.POST)
public Employee add(@ModelAttribute(“emp”) Employee employee) {}

【3】修改

修改传统RESTREST 后台接收
修改ocalhost:8080/employee/updatelocalhost:8080/employees@RequestMapping(value = “/employees”, method = RequestMethod.PUT)
public Employee update(@ModelAttribute(“emp”) Employee employee) {}

【4】删除

查询传统RESTREST 后台接收
删除localhost:8080/employee/deletelocalhost:8080//employees/{id}@RequestMapping(value = “/employees/{id}”, method = RequestMethod.DELETE) @ResponseBody
public JsonResult delete(@PathVariable Long id) {}
  • 原生
1
2
3
4
5
6
@RequestMapping("/save")            //原生:http://localhost:8080/test/save?a=2&b=3
public String save(int a,int b,Model model){
int res=a+b;
model.addAttribute("msg","save结果为:"+res);
return "hello";
}
  • RestFul
1
2
3
4
5
6
@RequestMapping("/save/{a}/{b}")      //REST:http://localhost:8080/test/save/a/b
public String save2(@PathVariable int a, @PathVariable int b, Model model){
int res=a+b;
model.addAttribute("msg","save2结果为:"+res);
return "hello";
}
  • RestFul请求方式
1
2
3
4
5
6
7
//    @RequestMapping(value = "/save/{a}/{b}",method = RequestMethod.POST)
@PostMapping("/save/{a}/{b}") //通过请求方式 @GetMapping @DeleteMapping
public String save3(@PathVariable int a, @PathVariable int b, Model model){
int res=a+b;
model.addAttribute("msg","save3结果为:"+res);
return "hello";
}