1. 注解配置Servlet

@WebServlet

name属性: servlet名称

value属性或urlPatterns属性: servlet映射路径, 可配置多个

initParams属性: 初始化参数, 配合@WebInitParam一起使用

loadOnStartup属性: 为1表示web容器启动时就初始化servlet

测试代码:

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/9/5 16:36
* @Title: 01 演示@WebServlet的使用
* @Description: name, urlpatterns, initparams(配合@WebInitParam使用), loadOnStartup
*/
@WebServlet(name = "MyWebServlet", urlPatterns = {"/servlet/MyWebServlet", "/servlet/WebServlet"},
initParams = { @WebInitParam(name = "Site :", value = "http://roseindia.net"),
@WebInitParam(name = "Rose", value = "India", description = "detail-info")}, loadOnStartup = 1)
public class MyWebServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
Enumeration<String> initParameterNames = config.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String name = initParameterNames.nextElement();
String value = config.getInitParameter(name);
System.out.println("该Servlet的初始化参数为: " + name + "=" + value);
}
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 通知浏览器读取格式
resp.setContentType("text/html;charset=utf-8"); Writer out = resp.getWriter(); out.write("测试Servlet3.0!!!");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

2. 注解配置监听器

1. Servlet监听器本质?

实现监听器接口的Java程序, 如实现ServletContextListener接口的Java程序

2. 如何使用注解配置监听器

@WebListener

在Servlet监听器上添加@WebListener

测试代码:

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/9/5 20:24
* @Title:
* @Description:
*/
@WebListener
public class MyWebListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("监听器初始化");
} @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("监听器销毁");
}
}

3. 注解配置过滤器

@WebFilter

filterName属性: 监听器名称

value属性或urlpatterns属性: 过滤器拦截的url映射, 可配置多个

测试代码:

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/9/5 17:01
* @Title: 02 演示@WebFilter的使用
* @Description: filterName属性: 过滤器的名称; value或urlpatterns属性: 过滤器拦截的url映射
*/
@WebFilter(filterName = "MyWebFilter", value = "/servlet/MyWebServlet")
public class MyWebFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化");
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器执行");
// 放行
filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() {
System.out.println("过滤器销毁");
}
}

4. 原生文件上传

1. 原生文件上传原理: servlet3.0将multipart/form-data的post请求封装成part对象, 开发者通过part对象来对上传的文件进行操作.

2. @MultipartConfig的作用:

标识servlet支持原生文件上传

测试代码:

 /**
* Created by IntelliJ IDEA.
*
* @Auther: ShaoHsiung
* @Date: 2018/9/5 17:07
* @Title: 03 演示servlet3.0原生文件上传
* @Description: 原生文件上传原理: servlet3.0将multipart/form-data的post请求封装成part对象,
* 开发者通过part对象来对上传的文件进行操作.
*/
@WebServlet(urlPatterns = {"/servlet/fileupload"})
@MultipartConfig // 标识servlet支持原生文件上传
public class FileUploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 字符编码设置
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8"); // 获取out对象
PrintWriter out = resp.getWriter(); // 获取上传文件存储路径
String realPath = req.getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(realPath);
if (!file.exists()) {
file.mkdirs();
System.out.println("目录创建成功!");
}
// 通过request对象获取part
Collection<Part> parts = req.getParts();
if (parts.size() == 1) { // 单文件上传
// 通过input标签的name属性获取上传文件
Part part = req.getPart("file1");
// 从请求头中解析文件名称
String header = part.getHeader("content-disposition");
String fileName = getFileName(header);
// 保存文件
part.write(realPath + File.separator + fileName);
} else { // 多文件上传
// 迭代parts
for (Part part : parts) {
// 获取到part对象之后, 操作步骤与单文件上传相同
String header = part.getHeader("content-disposition");
String fileName = getFileName(header);
part.write(realPath + File.separator + fileName);
}
} out.println("上传成功!");
out.close();
} /**
* 从请求头中解析上传文件名
* @param header part的请求头
* @return 上传文件名
*/
public String getFileName(String header) {
String[] tempArr1 = header.split(";");
String[] tempArr2 = tempArr1[2].split("="); String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", "");
return fileName;
}
}

要点:

1) part对象代表一个上传文件

2) 通过request对象获取part对象

3) 由于servlet3.0没有提供直接获取文件名称的方法, 所以文件名称可以通过part对象获取请求头后, 自己解析.

Servlet3.0要点小结的更多相关文章

  1. 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强

    l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...

  2. [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.5/2.6 多极点滤波器电压纹波估计及要点小结

    2.5 含两极点低通滤波器变换器的输出电压纹波估计 在分析包含两极点低通滤波器的变换器如Cuk变换器及Buck变换器(图2.25)输出时,小纹波近似将会失效.对于这些变换器而言,无论输出滤波电容的值是 ...

  3. Servlet3.0的动态

    动态的创建是为了简化配置文件的.对于我们创建的servlet,filter和listener后可以使用.这也是注解的另外一种替代方式. 动态的添加有两种,一种是基于ContextListener的,另 ...

  4. Servlet3.0的异步

    servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...

  5. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

  6. 利用servlet3.0上传,纯原生上传,不依赖任何第三方包

    tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等.... 如果你的tomcat版本低于7的话,单独在项目中引入serv ...

  7. cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题

    最近在解决XSS注入的问题,由于使用的servlet版本是2.5,不支持httpOnly的属性,故做了个工具类来实现cookie的httpOnly的功能.全类如下: /** * cookie工具类,解 ...

  8. Servlet3.0中Servlet的使用

    目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l  支持注解配置. l  支持异步调用. l  直接有对文件上传的支持. 在这篇 ...

  9. Servlet3.0新特性

    1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,创建JavaEE6.0应用! Servlete3.0的主要新特性如下三部分: 使 ...

随机推荐

  1. python输入输出(二)

    输出 >>> print(5) 5 >>> print(5*6) 30 >>> s1 = "hello" >>&g ...

  2. org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    电脑换了重新装了下系统,在本机ubuntu 的环境下搭建hadoopCDH4.5 伪分布式.进入Hbase shell,在创建表的时候出现异常如下: ERROR: org.apache.hadoop. ...

  3. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问 (也就是跨数据库访问出错)

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  4. Python匹马行天下之运算符

    什么事运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算 ...

  5. 2018湘潭大学程序设计竞赛【C】

    题目链接:https://www.nowcoder.com/acm/contest/105/C 题意:给你几个矩形的左上角和右下角的坐标,让你算有几个矩形相交. 题解: 每次都暴力标记一下炸弹区域里的 ...

  6. linux安装openoffice,并解决中文乱码

    1.安装openoffice 官网http://www.openoffice.org/zh-cn/download/下载 2.解压并进入文件夹: cd /zh-cn/RPMS yum localins ...

  7. 【转】tomcat系统架构分析

    https://blog.csdn.net/wsl211511/article/details/51622991

  8. 2019-7-29-asp-dotnet-core-从-Frp-获取用户真实-IP-地址

    title author date CreateTime categories asp dotnet core 从 Frp 获取用户真实 IP 地址 lindexi 2019-07-29 08:28: ...

  9. VS2017打包

    转载:https://blog.csdn.net/Houheshuai/article/details/78518097 在要打包项目的解决方案 右键→添加→ 新建项目 ​ 后出现如下选择 ​ 如果没 ...

  10. sslforfree的证书合并成类似于certbot的ssl证书文件

    之前的證書都是通過 certbot的命令生成的,但是目前一個服務器太多個網站,太多個ssl證書,證書過期之後,目前是 通過 ssl for free 網站再生成新的 ssl證書,再次更新證書週期 Le ...