Servlet3.0要点小结
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要点小结的更多相关文章
- 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强
l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.5/2.6 多极点滤波器电压纹波估计及要点小结
2.5 含两极点低通滤波器变换器的输出电压纹波估计 在分析包含两极点低通滤波器的变换器如Cuk变换器及Buck变换器(图2.25)输出时,小纹波近似将会失效.对于这些变换器而言,无论输出滤波电容的值是 ...
- Servlet3.0的动态
动态的创建是为了简化配置文件的.对于我们创建的servlet,filter和listener后可以使用.这也是注解的另外一种替代方式. 动态的添加有两种,一种是基于ContextListener的,另 ...
- Servlet3.0的异步
servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...
- java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet
一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...
- 利用servlet3.0上传,纯原生上传,不依赖任何第三方包
tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等.... 如果你的tomcat版本低于7的话,单独在项目中引入serv ...
- cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题
最近在解决XSS注入的问题,由于使用的servlet版本是2.5,不支持httpOnly的属性,故做了个工具类来实现cookie的httpOnly的功能.全类如下: /** * cookie工具类,解 ...
- Servlet3.0中Servlet的使用
目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l 支持注解配置. l 支持异步调用. l 直接有对文件上传的支持. 在这篇 ...
- Servlet3.0新特性
1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,创建JavaEE6.0应用! Servlete3.0的主要新特性如下三部分: 使 ...
随机推荐
- xml初步,DTD和Schema约束
XML 可扩展的标记语言(!!!可扩展) 作用 1.存放数据 2.配置文件 语法 文档声明 <?xml version="1.0" encoding="UTF-8& ...
- Solrj API读取core 索引库数据
private static String zkHost = "ip:2181,ip:2181,ip:2181"; private static CloudSolrServer s ...
- Linux下修改Mysql的用户(root)的密码(转载)
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...
- python中面向对象
一.Python经典类与新类 经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类: class classics: 'def ...
- 自动ftp脚本,aix/linux 和 windows
首先windows @echo off REM 基本配置 REM 远程信息 set remote_ip=%1 set remote_user=%2 set remote_passwd=%3 set r ...
- scrapy 多个爬虫运行
from scrapy import cmdline import datetime import time import os import scrapy from scrapy.crawler i ...
- spring MVC 全局的异常处理
1.使用SimpleMappingExceptionResolver实现异常处理 在Spring的配置文件applicationContext.xml中增加以下内容: <bean class=& ...
- wish - 简单的窗口式(windowing) shell
总览 wish [filename] [arg] [arg ...] 选项 -colormap new 指定窗口使用一个新的私有的调色板(colormap)而不使用给屏幕的缺省的调色板. -displ ...
- JS函数 函数的作用,可以写一次代码,然后反复地重用这个代码。
什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(sum ...
- yii2 返回json和文件下载
JSON 調用的控制器返回 json格式的數據即可,對json裡面的數據沒有要求 如在控制器中添加一個方法: public function actionRemoveImage($id){ Yii:: ...