springboot web开发非常的简单,其中包括常用的json输出、filters、property、log等。
json 接口开发
在以前的spring 开发的时候需要我们提供json接口的时候需要做那些配置呢?
1.添加 jackjson 等相关jar包
2.配置spring controller扫描
3.对接的方法添加@ResponseBody
就这样我们会经常由于配置错误,导致406错误等等,spring boot如何做呢,只需要类添加 @RestController 即可,默认类中的方法都会以json的格式返回。
@RestController
public class HelloController {
@RequestMapping("/getUser")
public User getUser() {
User user = new User("0001","zhangsan",30);
return user;
}
}
如果我们需要使用页面开发只要使用 @Controller ,下面会结合模板来说明。
自定义Filter
两个步骤:
实现Filter接口,实现Filter方法
添加@Configuration注解,将自定义Filter加入过滤链
@Configuration
public class WebConfiguration {
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
public class MyFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) srequest;
System.out.println("this is MyFilter,url :"+request.getRequestURI());
filterChain.doFilter(srequest, sresponse);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
}
注解版Filter
1、首先在启动类前面加上扫描器
@SpringBootApplication
@ComponentScan(basePackages= {"com.zmj.web"})
@ServletComponentScan("com.zmj.web.filter")
public class Springboot01Application {
public static void main(String[] args) {
SpringApplication.run(Springboot01Application.class, args);
}
}
2、然后自定义扫描器
@WebFilter(urlPatterns="/*",filterName="LoginFilter2")
public class LoginFilter2 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
long start = System.currentTimeMillis();
arg2.doFilter(arg0, arg1);
System.out.println("LoginFilter2 Execute cost=" + (System.currentTimeMillis() - start));
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
运行即可实现!
自定义拦截器
1、首先编写拦截器
public class LoginInterceptor implements HandlerInterceptor {
long start = System.currentTimeMillis();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
start = System.currentTimeMillis();
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("Interceptor cost="+(System.currentTimeMillis()-start));
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
2、添加拦截器
@Configuration
public class WebInterceptor extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/*");
super.addInterceptors(registry);
}
}
自定义Property
在web开发的过程中,我经常需要自定义一些配置文件,如何使用呢? 配置在application.properties中。
air.name=zhangsan
air.age=20
air.desc=i am a student
自定义配置类
@Component
public class TestProperties {
@Value("${air.name}")
private String name;
@Value("${air.age}")
private int age;
@Value("${air.desc}")
private String desc;
//省略get/set方法
}
controller自动注入配置类
@RestController
public class HelloController {
@Autowired
TestProperties prop;
@RequestMapping("/hello")
public String hello() {
System.out.println(prop.getName());
System.out.println(prop.getAge());
System.out.println(prop.getDesc());
return "hello springboot";
}
log配置
配置输出的地址和输出级别:
logging.path=E:/logs/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
path为本机的log地址,logging.level 后面可以根据包路径配置不同资源的log级别。
数据库操作
在这里我重点讲述mysql、spring data jpa的使用,其中mysql 就不用说了大家很熟悉,jpa是利用Hibernate生成各种自动化的sql,如果只是简单的增删改查,基本上不用手写了,spring内部已经帮大家封装实现了。 下面简单介绍一下如何在spring boot中使用。 1、添加相jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2、添加配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
3、添加实体类和Dao
@Entity
@Table(name="t_user")
public class User {
@Id
@Column(name = "uid")
private String userId;
@Column(name = "uname")
private String userName;
@Column(name = "age")
private int age;
...
}
@Repository
public interface UserDao extends JpaRepository<User,String> {
@Override
List<User> findAll();
List<User> findByUserName(String name);
}
dao只要继承JpaRepository类就可以,几乎可以不用写方法,还有一个特别有尿性的功能非常赞,就是可以根据方法名来自动的生产SQL,比如findByUserName 会自动生产一个以 userName 为参数的查询方法,比如 findAll 自动会查询表里面的所有数据,比如自动分页等等。
Thymeleaf 介绍
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。 好了,你们说了我们已经习惯使用了什么 velocity,FreMaker,beetle之类的模版,那么到底好在哪里呢? 比一比吧 Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器。 下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息:
Velocity: $message
FreeMarker: ${message}
Thymeleaf: Hello World!
注意:由于Thymeleaf使用了XML DOM解析器,因此它并不适合于处理大规模的XML文件。 1.首先要引入starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.配置controller
@RequestMapping("/goIndex")
public String thym(Model model){
model.addAttribute("name","张三");
return "index";
}
3.页面直接html渲染
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title></title>
<link href="css/index.css" rel="stylesheet">
</head>
<body>
<p th:text="${name}">测试内容</p>
</body>
</html>
经过这样简单的配置,页面就可以渲染出来啦!