2021年第二周

servletContext四大应用

1.共享数据
servletContext全局共享,ServletContext context = this.getServletContext();
实际开发中基本不用,了解即可
2.读取web.xml中的初始化参数配置等

<!--  配置初始化参数-->
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc.mysql://localhost:3306/mybatis</param-value>
  </context-param>
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        获取web.xml中配置的初始化参数
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        System.out.println(url);
    }
}

3.请求转发:注意转发不同于response重定向,路径不会发生改变

public class ServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        请求转发
        ServletContext context = this.getServletContext();
//        映射中的s5路径转发到/s3路径 转发路劲不变化 不同于重定向
        context.getRequestDispatcher("/s3").forward(req,resp);
    }
}

4.配合Properties类来获取配置文件信息
要在java或者静态资源resources文件下新疆配置文件
最后运行完会在target文件夹下生成对应的配置文件,我们就是要根据这个相对路径’/WEB-INF/classes/dp.properties‘,来读取信息
在这里插入图片描述

public class ServletDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        使用properties来读取配置文件
        InputStream rs = this.getServletContext().getResourceAsStream("/WEB-INF/classes/dp.properties");
        Properties prop = new Properties();
        prop.load(rs);
        String user = prop.getProperty("user");
        String pwd = prop.getProperty("pwd");
        resp.getWriter().print(user+";"+pwd);
    }
}

response应用----重定向

重定向源码解析只需两句话

public class redirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        * 重定向等价代码
        * resp.setHeader("location","/s6");
        * resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
        * */
        resp.sendRedirect("/s6");
    }

cookie

public class CookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
//        获取cookie对象
        Cookie[] cookies = req.getCookies();
        PrintWriter out = resp.getWriter();
        if(cookies!=null){
            out.write("你上一次登录浏览器时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if(cookie.getName().equals("lastLoginTime")){
                    Long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    System.out.println(date.toLocaleString());
                }
            }
        }else {
            out.write("这是你第一次登陆浏览器");
        }

//        服务端存入一个cookie
        Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
        resp.addCookie(cookie);

    }
}

session

创建session对象并存入相关内容

public class sessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.解决编码问题
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

//        2.获取session对象
        HttpSession session = req.getSession();
        session.setAttribute("name","java工程师");
        session.setAttribute("student",new Student("黄杰",20));
        String id  =session.getId();
        if(session.isNew()){
            resp.getWriter().write("第一次");
        }else {
            resp.getWriter().write("sessionID是"+id);
        }
    }

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

新建一个类,session全局共享,可以直接通过req.getSession()返回的session对象来获取内容
要注意session.setAttribute(String,Object)的两个参数类型
在调用session.getAttribute(String)时要根据具体的信息来进行相应的转化;

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.解决编码问题
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

//        2.获取session对象并获取内容
        HttpSession session = req.getSession();
        String name = (String) session.getAttribute("name");
        Student s1 = (Student) session.getAttribute("student");
        resp.getWriter().write("姓名是"+name);
        System.out.println(s1.toString());
    }

注销session

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
//        注销session
        session.removeAttribute("name");  //常用
//        session.invalidate();
    }

解决Maven导出xml资源不成功

在porm.xml中配置如下代码块

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

运行时的关键tomcat配置

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lwl12345678_/article/details/112791705