这是一篇关于讲解如何正确使用51CTO博客-Markdown的排版示例,希望通过此,大家都能轻松上手,都能通过Markdown 能# 4 注解开发Servlet
4.1 Servlet3.0规范
4.2 注解开发入门案例
4.2.1 自动注解配置
1)配置步骤
第一步:创建JavaWeb工程,并移除web.xml



第二步:编写Servlet
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet Demo1 Annotation");
    }
}
第三步:使用注解配置Servlet

第四步:测试

2)注解详解
/**
 * WebServlet注解
 * @since Servlet 3.0 (Section 8.1.1)
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    /**
     * 指定Servlet的名称。
     * 相当于xml配置中<servlet>标签下的<servlet-name>
     */
    String name() default "";
    /**
     * 用于映射Servlet访问的url映射
     * 相当于xml配置时的<url-pattern>
     */
    String[] value() default {};
    /**
     * 相当于xml配置时的<url-pattern>
     */
    String[] urlPatterns() default {};
    /**
     * 用于配置Servlet的启动时机
     * 相当于xml配置的<load-on-startup>
     */
    int loadOnStartup() default -1;
    /**
     * 用于配置Servlet的初始化参数
     * 相当于xml配置的<init-param>
     */
    WebInitParam[] initParams() default {};
    /**
     * 用于配置Servlet是否支持异步
     * 相当于xml配置的<async-supported>
     */
    boolean asyncSupported() default false;
    /**
     * 用于指定Servlet的小图标
     */
    String smallIcon() default "";
    /**
     * 用于指定Servlet的大图标
     */
    String largeIcon() default "";
    /**
     * 用于指定Servlet的描述信息
     */
    String description() default "";
    /**
     * 用于指定Servlet的显示名称
     */
    String displayName() default "";
}
4.2.2 手动创建容器
1)前置说明
在使用Servlet3.1版本的规范时,脱离了web.xml进行注解开发,它除了支持使用注解的配置方式外,还支持纯手动创建Servlet容器的方式。要想使用的话,必须遵循它的编写规范。它是从Servlet3.0规范才开始引入的,加入了一个新的接口:
package javax.servlet;
import java.util.Set;
/**
 * 初始化Servlet容器必须实现此接口
 * 它是Servlet3.0规范提供的标准接口
 * @since Servlet 3.0
 */
public interface ServletContainerInitializer {
     /**
     * 启动容器时做一些初始化操作,例如注册Servlet,Filter,Listener等等。
 	 * @since Servlet 3.0
     */
    void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException;
}
同时可以利用@HandlesTypes注解,把要加载到onStartup方法中的类字节码传入进来,@HandlesTypes源码如下:
/**
 * 用于指定要加载到ServletContainerInitializer接口实现了中的字节码
 * @see javax.servlet.ServletContainerInitializer
 * @since Servlet 3.0
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface HandlesTypes {
    /**
     * 指定要加载到ServletContainerInitializer实现类的onStartUp方法中类的字节码。
     * 字节码可以是接口,抽象类或者普通类。
     */
    Class[] value();
}
2)编写步骤
第一步:创建工程,并移除web.xml
 

第二步:编写Servlet
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet Demo1 Annotation manual");
    }
}
第三步:创建初始化容器的类,并按照要求配置
public class MyServletContainerInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
       
    }
}
在脱离web.xml时,要求在src目录下包含一个META-INF目录,位置和及字母都不能改变,且严格区分大小写。在目录中创建一个名称为javax.servlet.ServletContainerInitializer的文件,里面写实现了ServletContainerInitializer接口的全限定类名。如下图所示:

第四步:编写注册Servlet的代码

第五步:测试
 够让自己的文章有更加出色、更清晰明了的排版。
够让自己的文章有更加出色、更清晰明了的排版。
什么是 Markdown
Markdown (MD) 是现在普遍使用的一种文档书写语言格式,只需用一些非常简单易记的符号,如(# * / > [] ()\ ),就可以轻松写出一篇具有良好的排版和可读性的文章。
语法示例
1.基本语法
一些常规的语法格式。
1.1 标题
标题用#+空格表示,不同数量的#可以表示不同的标题
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
1.2 粗体和斜体粗体
在需要操作的文字前后各加三个“*”
这个是粗体斜体:在需要斜体的文字前后各加一个“*”
这个是斜体用粗体加斜体:在需要操作的文字前后各加三个“*”
这个是粗体加斜体
1.3 删除线删除线语法
在需要删除的文字前后各使用两个符合“~~”要删除的文字
1.4 引用
符号“>”后面书写文字。示例:
这个是引用
1.5 目录
可通过:@[toc](目录) 生成目录。
1.6 空行
如需空行,则可\ +回车换行。
2.LaTeX公式
LaTeX数学公式有两种:行中公式和独立公式(行间公式)。行中公式放在文中与其它文字混编,独立公式单独成行。
2.1 行内公式
$=mc^2$
$=mc^2$
2.2 独立公式
$$=mc^2$$
$$=mc^2$$
更多语法参考:Markdown 编辑器添加 Latex数学公式教程
3.代码高亮
3.1 普通
*emphasize*    **strong**
_emphasize_    __strong__
@a = 1
3.2 语法高亮支持
如果在 ``` 后面跟随语言名称,可以有语法高亮的效果,如:
3.2.1 html/xml 代码高亮示例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>  
</body>
</html>
3.2.2 Python高亮示例
#!/usr/bin/python3
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 10:
    print(b)
    a, b = b, a+b
3.2.3 CSS 文件示例
body {
    background-color: red;
}
h1 {
    color: orange;
    text-align: center;
}
p {
    font-family: "Times New Roman";
    font-size: 20px;
}
支持语言有: HTML/XML, JSON, Bash, CSS, Java, JavaScript, PHP, Python, Rust, C/C++ …
4.绘制表格
| Column 1 | Column 2 | Column 3 |
| -------- | -----: | :----: |
| cell 1 | cell 2 | cell 3 |
| cell 4 | cell 5 | cell 6 |
| cell 7 | cell 8 | cell 9 |
| Column 1 | Column 2 | Column 3 |
| -------- | -----: | :----: |
| cell 1 | cell 2 | cell 3 |
| cell 4 | cell 5 | cell 6 |
| cell 7 | cell 8 | cell 9 |
5.Todo列表
语法:
- [ ] 在Blog-51CTO写一篇技术博客
- [x] 5分钟搞定俄罗斯方块---组件化实战
- [x] 服务早期红利与各项技术场景创新分析
显示:
- 
[ ] 在Blog-51CTO写一篇技术博客 
- 
[x] 5分钟搞定俄罗斯方块---组件化实战 
- 
[x] 服务早期红利与各项技术场景创新分析 
6.链接
支持直接粘贴链接地址。链接语法和显示如下:
语法1:[链接名称](http://链接网址)
显示:链接名称
或语法2:<http://链接网址>
显示:http://链接网址
7. 图片
可通过上传按钮上传图片,也支持直接粘贴图片,也支持拖拽上传图片。图片语法和显示如下:
语法:
显示:
8. 有序列表&有序列表
无序列表的使用,在符号“-”后加空格使用。如下:
- 
列表项 
- 
列表项 
- 
列表项 
如果要控制列表的层级,则需要在符号“-”前使用空格。如下:
- 
列表项 
- 
列表项 - 
列表内容 
- 
列表内容 
 
- 
有序列表的使用,在数字及符号“.”后加空格几个,如下:
- 
列表项 
- 
列表项 - 
列表内容 
- 
列表内容 - 
子列表内容 
- 
子列表内容 
- 
子列表内容 
 
- 
 
- 
9. 分割线
可以在一行中用三个以上的星号、减号、底线来建立一个分隔线,同时需要在分隔线的上面空一行。
例:
-------
*****
______
10. 符号转义
如果你的描述中需要用到 markdown 的符号,比如 # * 等,但又不想它被转义,这时候可以在这些符号前加反斜杠,如 \ # *进行避免。
11. 导入和导出
支持正文导出.md的文档,支持导入.md格式的文档。
导入:支持导入本地 .md格式的文档
导出:正文内容可以导出本地.md格式的文档
12.高效绘制流程图
 ` ` `flow
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op
` ` `
显示:
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op
13.高效绘制序列图
 ` ` `seq
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
` ` `
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
14.高效绘制甘特图
 ` ` `gantt
    axisFormat  %m/%d
    title 项目开发流程
    section 项目立项
        需求分析       :a1, 2021-01-01, 5d
        可行性报告     :after a1, 6d
        概念验证       : 5d
    section 项目实施
        概要设计      :2021-01-14  , 5d
        详细设计      :2021-01-19, 10d
        编码          :2021-01-29, 10d
        测试          :2021-02-08, 5d
    section 发布验收
        发布: 3d
        验收: 3d
` ` `
    axisFormat  %m/%d
    title 项目开发流程
    section 项目立项
        需求分析       :a1, 2021-01-01, 5d
        可行性报告     :after a1, 6d
        概念验证       : 5d
    section 项目实施
        概要设计      :2021-01-14  , 5d
        详细设计      :2021-01-19, 10d
        编码          :2021-01-29, 10d
        测试          :2021-02-08, 5d
    section 发布验收
        发布: 3d
        验收: 3d
15. 其他说明
使用WuKong编辑器发布的内容只能WuKong编辑器编辑,不可切换Markdown编辑器;
使用Markdown编辑器发布的内容只能Markdown编辑器编辑,不可切换WuKong编辑器编辑。










