spring boot web 开发

1,静态资源导入问题

在springboot中,可以使用一下几种方式处理静态资源

  • webjars localhost:8080/webjars/

  • public,static,resources,/* localhost:8080/

优先级:resources>static(默认)>public

在template目录下的所有页面,只能通过controller来访问,相当于原来的MATE-INF,但template目录下访问页面需要导入模板引擎,thymeleaf的依赖

2,首页和图标定制

在静态资源目录下找一个叫index.html的页面映射到首页

3,thymeleaf模板的使用

1,导入thymeleaf的pom依赖(需使用2.X以上的版本)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2,html页面导入约束

<html lang="en" xmlns:th="http://www.thymeleaf.org">

3,国际化

1.i18n文件配置

image

image

2.如果需要在项目中进行中/英文自动切换,需要自定义一个组件LocaleResolver

package com.springboot.config;

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

public class MyLocalResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        String language = request.getParameter("l");
        Locale locale=Locale.getDefault();

        System.out.println("==========>"+language);

        if (!StringUtils.isEmpty(language)){
            String[] split = language.split("_");
            locale=new Locale(split[0],split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

index.jsp

<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>

3.将自己写的组件加入到spring容器中 @Bean

package com.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
//视图解析器配置
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
    }

//国际化
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocalResolver();
    }
}

4,拦截器

1.自定义拦截器,实现HandlerInterceptor接口

package com.springboot.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginHandlerIntercepetor 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","NO PRIVEW,LOGIN!");
            request.getRequestDispatcher("index.html").forward(request,response);
            return false;
        }else {
            return true;
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.在MvcConfig配置类中配置拦截器及配置拦截路径和方向路径

 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerIntercepetor()).addPathPatterns("/**")
                .excludePathPatterns("/index.html","/","/user/login","/css/*","/img/**","/js/**");

    }

5,列表展示

1.提取公共页面(常用)

  • th:fragment="sidebar"

  • th:insert="~{commons/commons::topbar}"

  • 如果要传递参数,用()直接传参,接受判断即可
    th:insert="~{commons/commons::sidebar(active='list.html')}"

2,列表页面数据循环展示

<table class="table table-striped table-sm">
	<thead>
		<tr>
				<th>id</th>
					<th>lastName</th>
					<th>email</th>
					<th>gender</th>
				<th>department</th>
				<th>birth</th>
				<th>操作</th>
		</tr>
		</thead>
			 <tr th:each="emp:${emps}">
			 <td th:text="${emp.getId()}"></td>
			 <td th:text="${emp.getLastName()}"></td>
			 <td th:text="${emp.getEmail()}"></td>
			 <td th:text="${emp.getGender()==0?'女':'男'}"></td>
			 <td th:text="${emp.getDepartment()}"></td>
			 <td th:text="${#dates.format(emp.getBirth(),'yyyy-MM-dd HH:mm:ss')}"></td>
				 <td>
				 <button class="btn btn-sm btn-primary">编辑</button>
				 <button class="btn btn-sm btn-danger">删除</button>
				 </td>
		 </tr>
</table>
posted @ 2021-04-04 17:35  Chcode  阅读(81)  评论(0)    收藏  举报