JavaWeb知识点汇总

JavaWeb知识点汇总

监听器

一、分类

1.监听ServletContext事件
  • ServletContextListener(监听ServletContext生命周期的:从创建到销毁的过程(服务器启动创建,服务器停止销毁))
  • ServletContextAttributeListener(监听ServletContext域中属性的变化)
2.监听HttpSession事件
  • HttpSessionListener(监听HttpSession生命周期的(第一次要使用session对象时创建,30分钟后自动销毁或手动销毁)
  • HttpSessionAttributeListener(监听所有对象在HttpSession域中属性的变化)
  • HttpSessionActivationListener(监听某个对象HttpSession活化钝化的)
  • HttpSessionBindingEvent(监听某个对象(绑定)到HttpSession中和从session中(解绑))
3.监听ServletRequest事件
  • ServletRequestListener(监听ServletRequest生命周期的(每接受到一个请求就创建,当请求结束时销毁))
  • ServletRequestAttributeListener(监听ServletRequest域中属性的变化)

二、Session

  • 当客户端浏览器发生关闭后,再次使用session对象时,会新创建一个对象(session的实现依靠的是cookie,而cookie默认情况下关闭浏览器就销毁)

关于Session的活化与钝化,需要注意在idea中,钝化的session文件默认是在work文件下的,如是work文件夹会随着服务器的启动删除,从而使得先钱保存的session数据丢失,因此可以在idea中关于tomcat的配置勾选Preserve sessions across restarts and reploys

三、使用场景

ServletContextListener :服务器启动做项目的域初始化操作,停止后做善后清理工作

HttpSessionBindingListener:监听某个对象绑定到session域中,比如在线人数

国际化

基本使用

  1. 编写多语言文件(名称 _ 语言代码 _ 国家代码.properties)
  2. 使用Locale获取位置信息
  3. 使用ResourceBundle获取具体的信息

Locale的创建方式是有区别的

<%@ page import="java.util.Locale" %>
<%@ page import="java.util.ResourceBundle" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    String str = request.getHeader("Accept-Language").split(",")[0];
    String language = str.split("-")[0];
    Locale locale = null;
//    System.out.println(language);
    if (language.equals("zh")) {
//        locale = new Locale("zh", "CN");
        locale = Locale.CHINA;
    } else if (language.equals("en")) {
//        locale = new Locale("en", "US");
        locale = Locale.ENGLISH;
        System.out.println("en");
    }
    ResourceBundle bundle = ResourceBundle.getBundle("directory", locale);
    String username = bundle.getString("username");
    String password = bundle.getString("password");
    String login = bundle.getString("login");
%>
<%=username%> <input type="text">
<%=password%> <input type="password">
<input type="submit" value="<%=login %>">
</body>
</html>

格式化

  • 日期格式化
  • 货币格式化
  • 数字格式化
  • 自定义消息格式化

注意

  • 区分getAttribute和getParameter

文件上传与下载

注意

  • 使用多部件上传时,要设置html页面的enctype为multidata/form-data
  • 在使用maven项目导包时,可能会出现ClassForNameNoFound等异常,记得在WEB-INF目录下创建lib文件夹,放入所需的jar包

多部件上传流内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98IlycNt-1615077735035)(C:\Users\ASUS\Desktop\多部件.png)]

#文件上传

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//        解决文件上传时的乱码问题
        req.setCharacterEncoding("UTF-8");
        try {
            if (ServletFileUpload.isMultipartContent(req)) {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<FileItem> fileItems = upload.parseRequest(req);
                Iterator<FileItem> iterator = fileItems.iterator();
                while (iterator.hasNext()) {
                    FileItem item = iterator.next();
                    if (item.isFormField()) {
                        String name = item.getFieldName();
//                        获取文件名 这里不适用
//                        String test = item.getName();
                        String value = item.getString();
                        System.out.println(" name:" + name + " value:" + value);
                    } else {
                        //通过req.getServletContext().getRealPath("/picture")来获取真实路径
                        String path = req.getServletContext().getRealPath("picture");
                        File pictures = new File(path);
                        //若文件夹不存在,则创建
                        if (!pictures.exists()) {
                            pictures.mkdirs();
                        }
                        InputStream inputStream = item.getInputStream();
                        System.out.println("文件名称:" + item.getName());
                        //使用UUID区分一致性
                        String fileName = UUID.randomUUID().toString() + item.getName();
                        FileOutputStream filterOutputStream = new FileOutputStream(path + "\\" + fileName);
                        IOUtils.copy(inputStream, filterOutputStream);
                        filterOutputStream.close();
                        inputStream.close();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

文件下载

        //获取文件名
        String fileName = req.getParameter("fileName");
        //获取真实路径
        String realPath = req.getServletContext().getRealPath("/picture/" + fileName);
        //解决服务器端乱码问题
        fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
        //设置响应头
        resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        //获取输入流
        FileInputStream fileInputStream = new FileInputStream(realPath);
        //获取输出流
        ServletOutputStream outputStream = resp.getOutputStream();
        //commmons-io下的工具类
        IOUtils.copy(fileInputStream, outputStream);

乱码问题:

            对于get请求 所有的请求参数都是带在url地址上
                Tomcat的默认编码为iso-8859-1
                服务端的解码原理 username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
                可以直接设置tomcat的编码原理 URIEncoding="UTF-8"
            对于post请求,
                设置请求体的编码
                在得到数据之前,使用request.setCharacterEncoding()解码
            响应
            response.setContentType("text/html;charset=utf-8");

JSP

        Tomcat处理jsp页面
        在Toncat服务器中存在两个重要的Servlet
          DefaultServlet : 处理静态资源
          JSPServlet : 处理*.jsp请求
          JSPServlet根据index.jsp文件,将其翻译成为index_jsp.java 编译为index_jsp.class
          
          JSP四大域对象
          PageContext Request Session ServletContext(Application)
          
          JSTL : JSP Standard Tag Library
          
          EL:简化取值操作
          
          注意区分:getParameter getAttribute
          注意区分:request 和 requestScope
          request{
              requestScope
              HttpSession getSession();
              String getParameter(); 
          }
          
          param:获取请求参数
          paramValues:获取请求参数的 对选框
          header:请求头
          headerValues:获取某个头的多个值
          cookie:获取cookie
          initParm:获取web.xml中配置的初始化参数  

Cookie与Session

          cookie:浏览器端保存少量数据的技术
              1)保存少量
              2)都是纯文本
              3)每次访问均会被携带
          使用
              Cookie c = new Cookie("username","zhangsan");
              或者 response.setHeader("Set-Cookie","username=zhangsan");
          有效时间
              默认:当浏览器关闭后则自动消失
              自定义:通过setMaxAge设置
                  正数:多长时间实效
                  负数:默认
                  0:立即失效(用一个同名cookie来设置失效
                  
                  
          Session:服务器端保存大量数据的一种技术,可在同一个会话期间共享,服务器为每一个客户创建的一个map集合
            第一次使用时才创建
          
          
          Session实现令牌机制
            防止表单重复提交

          Filter
          
           url-pattern三种写法
              /picture/haha.jsp 精确匹配
              /picture/*        路径匹配
              *.jsp             后缀匹配
           
           注意filter的chain.dofilter的原理流程

Ajax与Json

JSON

JS对象表示法、是一种轻量级(和XML相比)的数据交换格式、

//将js对象转为json字符串
var str = JSON.stringify(student);
// alert(str);
//将json字符串转化为js对象
var obj = JSON.parse(str);
alert(obj.name);


  /**
   *
   * JSON类之toJSONString()方法,实现json对象转化为json字符串和javabean对象转化为json字符串
   * String str=JSON.toJSONString(student)
   * JSON类之parseObject()方法,实现json字符串转换为json对象或javabean对象
   * Student stu=JSON.parseObject(str,Student.class);
   * JSON类之JSONArray()方法,实现json字符串转化为json对象数组或List<T>
   * JSON类之toJSON()方法,实现javabean对象转化为json对象
   * JSONObject jsonObject=(JSONObject)JSON.toJSON(student)
   * JSON类之toJavaObject()方法,实现json对象转化为javabean对象
   * Student student2=JSON.toJavaObject(jsonObject1, Student.class)
   */

Ajax

xhr(XmlHttpRequest)对象向服务器发起请求,并收到相应数据,利用dom(document object model)增删改的方式来改变页面效果

注意将服务器得到的json数据转为js对象、或者通过$post()的第四个参数指定type为"json"

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只学弱狗!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值