上一个部分,讲解了如何通过Springboot实现过滤器的问题,想必大家也都明白SpringBoot基本上就是两套策略,一套是手动代码实现,一套是通过注解的方式开发,我个人比较喜欢注解的方式,这节,我们讲解如何通过springboot来开发servlet。1、通过
@WebServlet
来标名注解,2、通过FilterRegistrationBean
类,来完成servelt的注册
代码地址
#基于代码的方式来注册servlet
https://gitee.com/yellowcong/springboot-demo/tree/master/springboot-demo6
#基于注解的方式注册servlet
https://gitee.com/yellowcong/springboot-demo/tree/master/springboot-demo7
注解方式开发Servlet
创建Servet
通过@WebServlet
来标名这个servlet注解类,可以通过initParams 这个属性,来指定注解的默认参数
package com.yellowcong.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author yellowcong
* 创建日期:2018/01/31
*
*/
@WebServlet(urlPatterns="/doubi", description="Servlet的说明",initParams= {@WebInitParam(name="key",value="yellowcong")})
public class DemoServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
private String key = "doubi";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>我是"+key+"</h1>");
out.println("<p>get请求</p>");
out.println("</body>");
out.println("</html>");
out.flush();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>我是"+key+"</h1>");
out.println("<p>post请求</p>");
out.println("</body>");
out.println("</html>");
out.flush();
}
@Override
public void init(ServletConfig config) throws ServletException {
this.key = config.getInitParameter("key");
System.out.println("初始化" + this.key);
super.init(config);
}
}
启动类
大家可以发现,启动类清爽无比,相比代码注册的方式,我就不多说了。
package com.yellowcong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
public class ConfigMain {
public static void main(String[] args) {
SpringApplication.run(ConfigMain.class, args);
}
}
访问结果
代码的方式来添加servlet
目录结构
创建一个Servlet
servelt需要继承我们的HttpServlet 这个类,来复写里面的doGet和doPost方法。
package com.yellowcong.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author yellowcong
* 创建日期:2018/01/31
*
*/
public class DemoServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
private String key = "doubi";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>我是"+key+"</h1>");
out.println("<p>get请求</p>");
out.println("</body>");
out.println("</html>");
out.flush();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>我是"+key+"</h1>");
out.println("<p>post请求</p>");
out.println("</body>");
out.println("</html>");
out.flush();
}
@Override
public void init(ServletConfig config) throws ServletException {
this.key = config.getInitParameter("key");
System.out.println("初始化" + this.key);
super.init(config);
}
}
配置过启动器
启动器里面需要同时配置过滤器,来解决乱码的问题,不然乱码,头疼啊。
package com.yellowcong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import com.yellowcong.filter.EncoderFilter;
import com.yellowcong.filter.PageFilter;
import com.yellowcong.servlet.DemoServlet;
@SpringBootApplication
public class ConfigMain {
/**
*
* @return
*/
@Bean
public FilterRegistrationBean filterCodeRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new EncoderFilter());
//设定匹配的路径
registration.addUrlPatterns("/*");
//设定加载的顺序
registration.setOrder(2);
return registration;
}
/**
* 通过代码来配置servlet
* @return
*/
@Bean
public ServletRegistrationBean servletDemoRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean();
registration.setServlet(new DemoServlet());
registration.addInitParameter("key", "yellowcong");
registration.addUrlMappings("/doubi");
registration.setOrder(2);
return registration;
}
public static void main(String[] args) {
SpringApplication.run(ConfigMain.class, args);
}
}
访问结果
问题集合
下面房屋呢的时候,出现了乱码,解决的办法,就是设定编码过滤器,然后在html界面配置<meta http-equiv="content-type" content="text/html; charset=utf-8">
,就可解决乱码问题了。
乱码解决