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("<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">,就可解决乱码问题了。

这里写图片描述

乱码解决
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值