SpringBoot之Servlet定义的两种方式-yellowcong

上一个部分,讲解了如何通过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("");
        out.println("");
        out.println("");
        out.println("Hello World");
        out.println("");
        out.println("");
        out.println("

我是"+key+"

"
); out.println("

get请求

"
); out.println(""); out.println(""); out.flush(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("UTF-8"); PrintWriter out = resp.getWriter(); out.println(""); out.println(""); out.println(""); out.println("Hello World"); out.println(""); out.println(""); out.println("

我是"+key+"

"
); out.println("

post请求

"
); out.println(""); out.println(""); 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);  
    }  
}

访问结果

SpringBoot之Servlet定义的两种方式-yellowcong_第1张图片

代码的方式来添加servlet

目录结构
SpringBoot之Servlet定义的两种方式-yellowcong_第2张图片

创建一个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("");
        out.println("");
        out.println("");
        out.println("Hello World");
        out.println("");
        out.println("");
        out.println("

我是"+key+"

"
); out.println("

get请求

"
); out.println(""); out.println(""); out.flush(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("UTF-8"); PrintWriter out = resp.getWriter(); out.println(""); out.println(""); out.println(""); out.println("Hello World"); out.println(""); out.println(""); out.println("

我是"+key+"

"
); out.println("

post请求

"
); out.println(""); out.println(""); 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);  
    }  
}

访问结果

SpringBoot之Servlet定义的两种方式-yellowcong_第3张图片

问题集合

下面房屋呢的时候,出现了乱码,解决的办法,就是设定编码过滤器,然后在html界面配置,就可解决乱码问题了。

SpringBoot之Servlet定义的两种方式-yellowcong_第4张图片

乱码解决
SpringBoot之Servlet定义的两种方式-yellowcong_第5张图片

你可能感兴趣的:(springboot)