Servlet3.0的简单使用
Servlet3.0(WEB3.0)算是比较新的Servlet技术了,对应的JavaEE版本是6,虽然目前最新的版本是3.1,对应版本JavaEE7。我们目前使用的做多的还是Servlet2.5的东西,所以3.0仅做一个了解
要求
- MyEclipse10.0或以上版本
- 发布到Tomcat7.0或以上版本
概述
注解代替web.xml配置文件,可以不使用web.xml文件,所以在创建JavaEE6.0版本时,会发现默认不创建web.xml
对上传的支持,在Servlet2.5中,我们更多的使用第三方的jar来完成上传文件(如commons-fileupload),在3.0中可以不添加其他jar来完成上传文件
注解代替配置文件
我们可以先干掉web.xml,注解主要围绕JavaWeb的三大组件(Servlet,Filter,Linstener)
Servlet类
我只需要在Servlet类上面添加@WebServlet(urlPatterns="servlet路径") 即可
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; @WebServlet(urlPatterns="/AServlet",
initParams={
@WebInitParam(name="p1", value="v1"),
@WebInitParam(name="p2", value="v2")
},
loadOnStartup=1
)
public class AServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = (String) request.getParameter("userName");
if(userName==null||userName.equals("")){
request.setAttribute("msg", "请先登录");
request.getRequestDispatcher("/session1/login.jsp").forward(request, response);
}else{
if(userName.equalsIgnoreCase("lz")){
//登录成功
HttpSession session = request.getSession();
session.setAttribute("userName", userName);
//写入Cookie
Cookie cookie=new Cookie("uname", userName);
cookie.setMaxAge(60*60);
response.addCookie(cookie); response.sendRedirect("/day11/session1/succ1.jsp");
}else{
//登录失败
request.setAttribute("msg", "请先登录");
request.getRequestDispatcher("/session1/login.jsp").forward(request, response);
}
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

这个initParams属性的配置在注解中使用并不是很好,既然在注解中使用,为何不直接点在代码中定义变量参数。但只有urlParrents时,可以忽略这个属性名,直接给个值 :@WebServlet("/AServlet") ,其实一个Servlet可以配置多个url,不然这个属性单词最后也不会带s,虽然一般我们不这样使用
Filter
Filter使用@WebFilter注解,其中也有一个urlParrents属性用来表示需要过滤的资源,这个urlParrents也可以省略
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter; @WebFilter(urlPatterns="/*")
public class AFilter implements Filter { @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest request, ServletResponse repsonse,
FilterChain chain) throws IOException, ServletException {
System.out.println("哈哈~,你看到我没有!");
chain.doFilter(request, repsonse); //放行
} @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }
Listener
监听器使用@WebListener,监听器的注解不需要属性值
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; @WebListener
public class AListener implements ServletContextListener { public AListener() {
// TODO Auto-generated constructor stub
} public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
} public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
} }
上传的支持
上传对表单的要求(所有的上传对前端页面都是这些要求):
- method="post"
- enctype="multipart/form-data",它的默认值是:application/x-www-form-urlencoded
- <input type="file" name="必须给"/>
我们只需要在Servlet上添加@MultipartConfig注解即可
当然也可以为@MultipartConfig注解指定属性值,它有四个属性:
- int filesizeThreshold:指定缓存的大小,当超出这个大小后,文件会保存到磁盘上;
- String location:指定临时文件的目录;
- long maxFilesize:指定上传单个文件的大小限制,如果上传的谁的超出了这个大小,那么就会抛出异常;
- long maxRequestSize:指定整个表单的大小限制。
当在Servlet上使用了@MultipartConfig注解后,那么就可以使用request.getPart(“fieldName”)来获取<input:file>的内容,其中Part表示一个文件表单项,接着就可以使用Part对象的API
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part; @WebServlet("/CServlet")
@MultipartConfig
public class CServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//Servlet3.0对文件上传的支持
String userName = request.getParameter("userName"); Part part = request.getPart("file");
//获得文件的MIME类型
System.out.println(part.getContentType());
//获得文件的字节数
System.out.println(part.getSize());
//获得文件字段名
System.out.println(part.getName());
//获取文件名
System.out.println(part.getSubmittedFileName()); //保存图片到硬盘
part.write("d:/xxx.jpg");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
Servlet3.0的简单使用的更多相关文章
- 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 ...
- Servlet3.0中Servlet的使用
目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l 支持注解配置. l 支持异步调用. l 直接有对文件上传的支持. 在这篇 ...
- [译]servlet3.0与non-blocking服务端推送技术
Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...
- 【servlet3.0新特性】Annotation注解配置
servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...
- Servlet3.0新特性(从注解配置到websocket编程)
Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...
- Servlet3.0+springmvc5+log4j2正确的开启姿势(WebLookUp)
前言 java社区占据市场份额比较大的日志组件由log4j 1.×,到logback,再到整合后的升级版 log4j 2.×,有网友测试后据说log4j2的性能最NB.于是开始往自己的springmv ...
随机推荐
- css hover伪类选择器与JQuery hover()方法
css hover伪类选择器 它属于anchor伪类 在支持 CSS 的浏览器中,<a>标签链接的不同状态都可以以不同的方式显示,常常用来改链接的颜色效果 实例 a:link {color ...
- 基于AMBA总线的SPI协议IP核的设计与验证
https://wenku.baidu.com/view/9542213131126edb6f1a1048.html?mark_pay_doc=2&mark_rec_page=1&ma ...
- CentOS 7常用工具安装
git 在Linux下开发项目,少不了要使用git工具,安装方法十分简单,通过一条 yum 指令既可完成安装: yum install git 安装完成后检测版本: # git --version g ...
- SSH 首次登录太慢问题
这两天在使用 Docker 做测试,发现新建的容器在首次 ssh 登录的时候经常超时,我们简单将超时时间设置成60秒,但仍然会偶尔超时.所以简单延迟超时时间此路不通. 于是想到是否可以通过修改 ssh ...
- Zabbix server 3.2安装部署
zabbix server 前提环境: CentOS 6 Lnmp php需要的包(bcmath,mbstring,sockets,gd,libxml,xmlwriter,xmlreader,ctyp ...
- restful 协议 +面试
restful 协议:面向资源软件架构风格 API 定义 一些预先定义的函数,目的是能够让应用程序或开发人员能够具有访问指定网络资源的能力,而无需关心访问的远吗以及内部的工作机制细节. RESTful ...
- PDF文档过期时间/自毁设置
不是很完美的方法,可以凑活着用: 切换到Pages预览页,右击页面选页面属性 切换到Action,选Run a Javascript,代码: // PDF JavaScript to make it ...
- Java并发--并发容器之ConcurrentHashMap
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为 ...
- BZOJ3963: [WF2011]MachineWorks 【CDQ+斜率优化DP】*
BZOJ3963: [WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...
- pip 在windows下的更新升级
1. pip 在 PyCharm 无法自动更新 2. https://pip.pypa.io/en/latest/installing.html 官方网页要求在 cmd中输入以下命令进行 pip的 ...