spring|Springboot学习笔记


Springboot学习

  • 入门
    • 创建一个springboot项目
    • 编写一个get带参数接口
    • 添加依赖
  • 基础
    • web开发
      • 静态资源访问
      • 改变静态资源默认路径
      • 欢迎页
    • 请求方式
  • springweb案例
    • 创建一个新项目
    • 国际化配置
      • 识别国际化配置
    • 拦截器
    • 展示员工列表
    • 增加CRUD操作
      • 新增
        • 删除

入门 创建一个springboot项目 spring|Springboot学习笔记
文章图片

编写一个get带参数接口
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController //返回是json格式 public class Hello { @GetMapping("/hello")//get请求的路由Request Post public String Hello(@RequestParam("name") String name) { return "get-hello"+name; } }

@RestController public class Hello { @GetMapping("/user/{id}/car/{number}/p") //路径变量和header public String getUser(@PathVariable("id") Integer id, @PathVariable("number") Integer number, //所有的都在Map存储 @PathVariable Map mp, @RequestHeader("User-agent") String userAgent, @RequestHeader Map header ){return "getUser id="+id+"cars number="+number+"\n all is "+mp+"userAgent="+userAgent; } }

添加依赖 在pom.xml文件中添加
例如添加lombok
org.projectlombok lombok

基础 web开发 静态资源访问
spring|Springboot学习笔记
文章图片

其中resources 下的 /static /public /resource /META-INF 文件下的资源为默认静态资源
在网页中可直接访问
spring|Springboot学习笔记
文章图片

当url相同时候,先请求动态资源,才会请求静态资源

改变静态资源默认路径
spring: mvc: #自定义请求静态资源前缀 static-path-pattern: /res/** web: resources: static-locations: #自定义静态资源文件路径 [classpath:/stat/]

spring|Springboot学习笔记
文章图片

如出现中文乱码,修改一下配置
1spring|Springboot学习笔记
文章图片

2 application.properties配置
server.servlet.encoding.charset=utf-8 server.servlet.encoding.force=true server.servlet.encoding.enabled=true

欢迎页
静态资源路径下访问index.html
不能自定义访问前缀
可以自定义默认文件
mvc: static-path-pattern: /res/**

否则无法正确访问
spring|Springboot学习笔记
文章图片

请求方式 Controller.Hello
四种请求方式
package com.example.demoday3.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class Hello { @RequestMapping(value = "https://www.it610.com/user",method = RequestMethod.GET) public String getUser(){ return "getUser"; } @RequestMapping(value = "https://www.it610.com/user",method = RequestMethod.POST) public String postUser(){ return "postUser"; } @RequestMapping(value = "https://www.it610.com/user",method = RequestMethod.DELETE) public String deleteUser(){ return "deleteUser"; } @RequestMapping(value = "https://www.it610.com/user",method = RequestMethod.PUT) public String putUser(){ return "putUser"; } }

static的index.html
Title - 锐客网

因为得form表单method只有get和post方式
所以要在配置添加
spring: mvc: hiddenmethod: filter: #能够处理delete和put请求 根据


如果使用postman,可以直接使用delete、put方式,不用添加以上 filter配置。

另外,可以自定义 name="_method"的名称。
方法如下
spring|Springboot学习笔记
文章图片

springweb案例 创建一个新项目 引入依赖
lombok 自动补充构造函数 Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎

pojo文件夹下创建两个类
spring|Springboot学习笔记
文章图片

dao文件夹下创建两个类
@Repository public class DepartmentDao {//模拟数据库中的数据 private static Map departments = null; static{ departments = new HashMap(); departments.put(101,new Department(101,"教学部")); departments.put(102,new Department(102,"市场部")); departments.put(103,new Department(103,"教研部")); departments.put(104,new Department(104,"运营部")); departments.put(105,new Department(105,"市场部")); }// 获取所有部门信息 public Collection getAllDepartments(){ return departments.values(); }public Department getDepartmentById(Integer id){ return departments.get(id); }}

@Repository public class EmployeeDao { private static Map employees = null; @Autowired private DepartmentDao departmentDao; //静态代码块不能加载非静态域 static{ employees = new HashMap(); employees.put(101,new Employee(1001,"AA","A234567@qq.com",1,new Department(1001,"教学部"))); employees.put(102,new Employee(1002,"BB","B234567@qq.com",0,new Department(1002,"市场部"))); employees.put(103,new Employee(1003,"CC","C234567@qq.com",0,new Department(1003,"教研部"))); employees.put(104,new Employee(1004,"DD","D234567@qq.com",1,new Department(1004,"运营部"))); employees.put(105,new Employee(1005,"EE","E234567@qq.com",1,new Department(1005,"市场部"))); }/*增删改查*/ //主键自增 private static Integer initId = 1006; public void save(Employee employee){ //如果没有id,则新增。 if(employee.getId()==null){ employee.setId(++initId); } employee.setDepartment(departmentDao.getDepartmentById(employee.getDepartment().getId())); employees.put(employee.getId(),employee); } public void delete(Integer id){ employees.remove(id); }public Collection getAllEmployees() { return employees.values(); } public Employee getEmployeeById(Integer id){ return employees.get(id); } }

1.@Repository注解修饰哪个类,则表明这个类具有对对象进?CRUD的功能,?且@Repository是@Component注解的?个派?品,所以可以使用@Autowired调用@Repository注解的类 2.@ResponseBody的作用其实是将java对象转为json格式的数据, 加上@ResponseBody代表return “index”返回字符串 ,而不加则代表跳转index页面

国际化配置 spring|Springboot学习笔记
文章图片

新建i18n文件夹
创建名为login的bundle文件夹
在下方可视化配置中添加key
spring|Springboot学习笔记
文章图片

识别国际化配置
在配置中添加
spring: messages: basename: i18n.login

spring|Springboot学习笔记
文章图片

拦截器 当登录后才能进入主页面,所以要进行路由拦截。
通过查询session判断是否登录
登录成功后添加
java session.setAttribute("loginUser",username);
创建LoginHandlerInterceptor文件
import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object loginUser=request.getSession().getAttribute("loginUser"); if(loginUser==null){ request.setAttribute("msg","没有权限,请先登录"); request.getRequestDispatcher("/").forward(request,response); return false; } else{ return true; } } }

在配置中添加拦截器
spring|Springboot学习笔记
文章图片

会出现静态资源全部被拦截(css样式不生效),还要修改规则
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login","/css/*","/js/*","/img/*");

展示员工列表 创建EmployeeController.java
@Controller public class EmployeeController { @Autowired EmployeeDao employeeDao; @RequestMapping("/emps") //返回值要返回给前端,要添加参数model。前端就可获取变量 public String list(Model model){ Collection employees = employeeDao.getAllEmployees(); model.addAttribute("emps",employees); return "list"; } }

修改list.html
id lastname email gender department birth options
[[${emp.getEmail()}]]

增加CRUD操作 新增
spring|Springboot学习笔记
文章图片

id lastname email gender department birth

不确定数据类型就默认全选为text类型!

出现400报错为数据类型有问题
出现500报错为类中调用方法错误(比如为方法名错误或者数据错误)
【spring|Springboot学习笔记】spring|Springboot学习笔记
文章图片

删除
删除

@GetMapping("/delete/{id}") public String deleteEmp( @PathVariable("id") int id){ System.out.println(id); employeeDao.delete(id); return "redirect:/emps"; }

    推荐阅读