博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringInAction--SpringMvc高级技术(servlet、filter、multipart)
阅读量:7191 次
发布时间:2019-06-29

本文共 5046 字,大约阅读时间需要 16 分钟。

前面学了spirng的一些配置,以及web方面的知识,今天就在学习一下在spring比较常用的一些高级技术。。。

首先来介绍下什么叫servlet吧(来着维基百科)

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用编写的端。其主要功能在于交互式地浏览和修改数据,生成动态内容。狭义的Servlet是指Java语言实现的一个,广义的Servlet是指任何实现了这个Servlet接口的,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于的。

我刚开始没有接触到框架的时候,写的服务就是新建一个servlet,之后还知道了struct2 之后才知道spring框架。。

spring in action 这本书中,推崇的配置是常用java来配置文件的。但是我们好像在平时中常用的还是xml配置。。先来看一下java注解来使用servlet的方法:

public class MyServletConfig implements WebApplicationInitializer {    public void onStartup(ServletContext servletContext) throws ServletException {        Dynamic myServlet = servletContext.addServlet("myServlet", com.springmvc.servlet.TestServlet.class);        myServlet.addMapping("/servlet");    }}

然后我们在来看看xml的配置:

servletTest
com.springmvc.servlet.TestServlet
servletTest
/servlet

然后我们创建一个调用接口HttpServlet的servlet:

public class TestServlet 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 {        resp.setContentType("text/html");        PrintWriter pw = resp.getWriter();        pw.write("

hello servlet!

"); }}

部署到Tomcat上面输入 http://localhost:8080/servlet 

运行结果为:

这样一来简单的servlet如何在springmvc中使用我们就学会了.


下面就让我们来学一下filter的用法,首先是用java配置方式

public class MyFilterConfig implements WebApplicationInitializer {    public void onStartup(ServletContext servletContext) throws ServletException {        Dynamic myFilter = servletContext.addFilter("myFilter", com.springmvc.filter.TestFilter.class);        myFilter.addMappingForUrlPatterns(null, false, "/back/*");    }}

下面是xml注解方式:

fileterTest
com.springmvc.filter.TestFilter
fileterTest
/back/*

然后写个TestFilter类,这个是我以前写的一个简单判断是否登录的一个filter,如果没有登录的话,就跳转到登录界面,只有登录了之后才能继续访问某个文件夹,或者说某个项目下的东西:

public class TestFilter implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {    }    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) servletRequest;        HttpServletResponse resp = (HttpServletResponse) servletResponse;        HttpSession session = req.getSession();        //获取请求路径        String path = req.getRequestURI();        //获取session中作为判断的字段        String pwd = (String) session.getAttribute("passwd");        System.out.println(pwd);        //判断请求的 路径中是否包含了 登录页面的请求        //如果包含了,那么不过滤 继续执行操作        if (path.indexOf("/back/login.do") > -1 || path.indexOf("/back/isLogin.json") > -1) {            filterChain.doFilter(req, resp);        } else {            //如不包含,那么就要判断 session中否有标志,如果没有标志,那么不让他看,让他去登录,反之执行操作!            if (pwd == null || "".equals(pwd)) {                resp.sendRedirect("/back/login.do");            } else {                filterChain.doFilter(req, resp);            }        }    }    public void destroy() {    }}

因为没有写 http://localhost:8080/back/login.do 的请求方法,所以是404,运行结果如下:

上面就是在springmvc中用filter


 

下面继续来看multipart文件上传,这个用的也蛮多的,我一般图像啊,文件啊,上传都是用这个上传的。

一般来说分为两种:

  • CommonsMultipartResolver:使用Jakarta Commons FileUpload解析Multipart请求
  • StandardServletMultipartResolver:依赖于Servlet 3.0对multipart请求的支持(始于Spring 3.1)。

 首先我们来看看java配置:

@Bean    public MultipartResolver multipartResolver() {        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();        multipartResolver.setDefaultEncoding("utf-8");        multipartResolver.setMaxInMemorySize(40960);        multipartResolver.setMaxUploadSize(10485760);        return multipartResolver;    }

xml的注解方式:

然后在页面中加上上传所需的组件:

Multipart上传测试

这里我们要注意了 两个地方 enctype   method    这两个参数 一定要有且后面的要为post要不然会报错

HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: The current request is not a multipart request

一开始我忘记配置 上传的配置了 报下面的错:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?

controller的编写也很简单,如下:

@RequestMapping(value = "/upload.do", method = RequestMethod.POST)    public String upLoadFiles(MultipartFile file) {        File tempFile = new File("d://multipart.jpg");        try {            file.transferTo(tempFile);            return "success";        } catch (IOException e) {            e.printStackTrace();            return "error";        }    }

结果就不上了,以上就是springmvc中 一些常用的其他技术,如果有错请指出,谢谢!

 

转载于:https://www.cnblogs.com/eoooxy/p/6559733.html

你可能感兴趣的文章
mysql 5.7 显示中文
查看>>
sphinx的使用
查看>>
web 前端 转盘界面
查看>>
2014中国互联网哈哈榜之十大段子
查看>>
单向链表的逆转
查看>>
小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑
查看>>
Linux 第五周 实验: 分析system_call中断处理过程
查看>>
(字符串) Hidden String -- HDU -- 5311
查看>>
[C#]将数据写入已存在的excel文件
查看>>
[转]Oracle中INITRANS和MAXTRANS参数
查看>>
编程十大原则
查看>>
zipalign的使用
查看>>
调用android的getColor()方法出现 java.lang.NoSuchMethodError: android.content.res.Resources.getColor...
查看>>
java 使用反射
查看>>
Centos 6.5 升级python2.6到python2.7
查看>>
[HDU 1166] 敌兵布阵
查看>>
odoo方法
查看>>
[Effective Java 读书笔记] 第二章 创建和销毁对象 第一条
查看>>
域用戶添加到本機管理员組
查看>>
Spring 捕捉校验参数异常并统一处理
查看>>