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
} }

上传的支持

上传对表单的要求(所有的上传对前端页面都是这些要求):

  1.     method="post"
  2.     enctype="multipart/form-data",它的默认值是:application/x-www-form-urlencoded
  3.     <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);
} }

最新文章

  1. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
  2. 详解C语言的htons和htonl函数、大尾端、小尾端
  3. 庖丁解牛-----Live555源码彻底解密(RTP打包)
  4. c#中创建类(更新中)
  5. UVa11925 Generating Premutations
  6. JAVA--聊天界面面板
  7. Oracle 视图操作
  8. windows程序设计学习笔记(一)
  9. python 私有方法
  10. 利用SSL-Change Cipher Spec传递信息
  11. 第一册:lesson 103.
  12. Junit4单元测试的基本用法
  13. Mac上的jdk
  14. 删除node_modules
  15. iOS swift项目IM实现,从长连接到数据流解析分析之Socket
  16. Spring Boot 2.0官方文档之 Actuator(转)
  17. Atom 编辑器侧边栏忽略隐藏文件
  18. Android SurfaceFlinger
  19. BOM对象,math对象document对象的属性和操作和 事件的基本操作
  20. git 使用教程 --基础一

热门文章

  1. losetup命令
  2. ios6:新特征介绍
  3. Git使用总结(廖雪峰git)
  4. js之方向检测
  5. 原生js实现div拖拽+按下鼠标计时
  6. 拷贝ssh公钥到多台服务器上
  7. ExpressCache
  8. Luogu1155 NOIP2008 双栈排序 【二分图染色】【模拟】
  9. 《DSP using MATLAB》示例Example6.2
  10. 【angularJS】简介