一起学Java——Servlet与JSP进阶,hashmap面试题

request.getRequestDispatcher(“/Servletlogin”).forward(request, response);

}

}

package com.example.web1; /**

  • Description:这是登陆后的页面

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-05 23:24

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “Servletlogin”, value = “/Servletlogin”)

public class Servletlogin extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.getWriter().println(“this is index page!”);

}

}

请添加图片描述

请添加图片描述

  • 重定向

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-05 23:23

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “Servletcheck”, value = “/Servletcheck”)

public class Servletcheck extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println(“登录成功!”);

// 实现响应重定向

response.sendRedirect(“/web1_war_exploded/Servletlogin”);

}

}

请添加图片描述

请添加图片描述

  • 请求转发与重定向

请求转发意味着服务器完成跳转,只会产生一次请求。

响应重定向由浏览器跳转,会产生两次请求。

浏览器Cookie

大家打开自己电脑上需要登录的网站,然后登录后关闭浏览器,重新打开后发现我们的登录信息依旧保存在浏览器,这就是通过Cookie实现的。

  • 设置Cookie

Cookie cookie = new Cookie(“user”, “kkkkkkk”);

//设置cookie的最长生命,单位为秒

cookie.setMaxAge(60 * 60 * 24 * 7);

response.addCookie(cookie);//生成并添加Cookie信息

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 10:33

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletCookie”, value = “/ServletCookie”)

public class ServletCookie extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println(“登陆成功!”);

Cookie cookie = new Cookie(“user”, “kkkkkkk”);

//设置cookie的最长生命,单位为秒

cookie.setMaxAge(60 * 60 * 24 * 7);

response.addCookie(cookie);

response.getWriter().print(“

login success

”);

}

}

请添加图片描述

  • 读取Cookie

request.getCookies() //用于获取保存的cookie信息,返回的是一个数组

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 10:42

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletgetCookie”, value = “/ServletgetCookie”)

public class ServletgetCookie extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// request.getCookies()用于获取保存的cookie信息,返回的是一个数组

Cookie[] cookies = request.getCookies();

String user = null;

for(Cookie c : cookies){

System.out.println(c.getName()+ “:” + c.getValue());

if(c.getName().equals(“user”)){

user = c.getValue();

break;

}

}

if(user == null){

response.getWriter().println(“

not login

”);

}else{

response.getWriter().println(“user” + user);

}

}

}

请添加图片描述

请添加图片描述

  • Cookie总结
  1. Cookie是浏览器保存在本地的文本内容

  2. Cookie常用于保存登录状态、用户资料等小文本

  3. Cookie具有时效性,默认为浏览器窗口关闭,Cookie内容会伴随请求发送给tomcat

Session用户会话

刚才看了Cookie,我们知道Cookie信息是存储在客户机上的文本信息,虽然是进行了加密,但是因为其存储在本地,相对来说安全性还是不够高。为此Java Web给我们提供了另外一种用户会话方式-session。

Session有如下特点:

  1. 用于保存与浏览器串口对应的数据

  2. 数据存储在Tomcat服务器的内存中,具有时效性(默认为30min)

  3. Session通过浏览器Cookie的SessionId提取用户数据

  • 设置Session

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 11:06

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletSession”, value = “/ServletSession”)

public class ServletSession extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println(“登录成功!!”);

// 获取用户对话Session对象

HttpSession session = request.getSession();

// 添加会话信息

session.setAttribute(“name”, “kk”);

request.getRequestDispatcher(“/ServletSessionIndex”).forward(request, response);

}

}

  • 获取Session

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 11:07

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletSessionIndex”, value = “/ServletSessionIndex”)

public class ServletSessionIndex extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

HttpSession session = request.getSession();

String name = (String)session.getAttribute(“name”);

response.setContentType(“text/html;charset=utf-8”);

response.getWriter().println(“

这是登陆后的页面,当前用户为”+ name);

}

}

请添加图片描述

  • Session原理

请添加图片描述

ServletContext对象

ServletContext(Servlet上下文对象),是Web应用全局对象。一个Web应用只会创建一个ServletContext对象,ServletContext随着Web的启动而自动创建。

  • 设置ServletContext

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 11:23

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletCon”, value = “/ServletCon”)

public class ServletCon extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext context = request.getServletContext();

context.setAttribute(“copyright”, “专业bug开发 @2019-2022”);

context.setAttribute(“title”, “专业开发bug20年!”);

response.setContentType(“text/html;charset=utf-8”);

response.getWriter().println(“初始化成功!”);

}

}

  • 获取ServletContext

package com.example.web1; /**

  • Description:

  • @Author: kk(专业bug开发)

  • DateTime: 2022-01-06 11:28

*/

import javax.servlet.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = “ServletgetCon”, value = “/ServletgetCon”)

public class ServletgetCon extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext context = request.getServletContext();

String copyright = (String)context.getAttribute(“copyright”);

String title = (String)context.getAttribute(“title”);

response.setContentType(“text/html;charset=utf-8”);

response.getWriter().println(“

” + copyright + “

”);

response.getWriter().println(“

” + title + “

”);

}

}

请添加图片描述

Web乱码问题解决

通过前面的学习我们发现一个问题,当我们的程序中含有中文的时候会出现乱码问题,这主要是由于Tomcat默认使用的字符集是ISO-8859-1,属于西欧字符集。所以我们解决乱码问题的核心是将ISO-8859-1转换成UTF-8(Servlet的请求响应都需要设置编码格式)。

  • POST请求编码处理

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。*

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-nXRLsuLX-1711165818785)]
[外链图片转存中…(img-3my0fcdU-1711165818786)]
[外链图片转存中…(img-On0U3eCv-1711165818787)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-vFQnvWjU-1711165818787)]

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

[外链图片转存中…(img-2hgsBkI9-1711165818788)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值