当前位置: 首页 > news >正文

小白学习java第15天(中):javaWeb

1.HttpServletRequest

上面我们接受介绍了HttpServletRespose,与之对应的就是HttpServletRequest:

就是将web请求的封装到一个类里面进行处理:

类里面有很多的方法,那么就需要进行重点了解一下了:

.获取前端的参数的方法:

        String password = req.getParameter("password");String[] hobbies = req.getParameterValues("hobby");

以一个最简单的页面登录为例子:就是前端进行输入数据,然后后端进行呈现!

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>表单登录</h2>
<form action="login" method="post">用户名:<input type="text" name="username" placeholder="请输入用户名"><br>密码:<input type="password" name="password" placeholder="请输入密码"><br>爱好:<input type="checkbox" name="hobby" value="1">打球<input type="checkbox" name="hobby" value="2">打游戏<input type="checkbox" name="hobby" value="3">看电影<input type="checkbox" name="hobby" value="4">看动漫<br><input type="submit" value="登录">
</form>
</body>
</html>
package com.xcl.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;public class HttpServletRequestDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决输入的时候乱码问题req.setCharacterEncoding("UTF-8");String username = req.getParameter("username");String password = req.getParameter("password");String[] hobbies = req.getParameterValues("hobby");System.out.println("====================================");System.out.println(username);System.out.println(password);System.out.println(Arrays.toString(hobbies));System.out.println("====================================");resp.sendRedirect("/s1/login.jsp");//解决输出的时候乱码问题resp.setContentType("text/html;charset=UTF-8");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

2.Cookie、Session

2.1介绍

有状态的会话:就是你曾经来过,再来我就会知道!

cookie英文是小饼干的意思,session因为是会议的意思。

“Session”在计算机和网络环境中通常指的是“会话”,它是指客户端与服务器之间的一段交互时间。具体来说,Session用于记录用户状态和信息,例如登录状态和购物车内容。每当用户访问网站时,服务器会为每个用户创建一个独立的Session,以便在用户与系统交互的过程中保持上下文信息和状态。Session与Cookie不同,Cookie是存储在用户浏览器中的,而Session则保存在服务器上。

一个网站,怎么证明你来过?

1.服务端给客户端一个cookie。客户端下次访问服务端的时候带上cookie就行

2.服务器登记你来过,创建一个session,下次来就时候就匹配上了

2.2 保存会话的两种技术(就好比你登录csdn上面,下次登就直接进去了)

根据上面可以知道有两种技术:

 如果你也有个各种乱码的情况,html,打印输出台,还是respond响应乱码,参考一下这个文献就行https://blog.csdn.net/m0_70470868/article/details/126436570

2.2.1cookie:一种是对于客户端的cookie,客户端技术(响应、请求)

大概思路就是:

1.首先在请求端获得cookies数组,因为cookie不止一个

2.然后创建一个响应流

3.然后对其cookies数组进行判断

    对其进行遍历数组

                判断,每一个cookie都是键值对

                       根据键获得值,然后响应出去

                如果没有就进行添加cookie

package com.xcl;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;public class CookieDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//首先避免请求和响应出现乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=UTF8");/*答题思路就是,如果请求里面没有cookie,那么就创建一个cookie,如果请求里面有cookie,那么就修改cookie的值*///首先我们需要获取请求端的cookie,说明不止一个cookie,所以需要用数组来保存Cookie[] cookies = req.getCookies();//为了响应段,创建一个响应流PrintWriter out = resp.getWriter();//然后就进行判断,如果请求里面没有cookie,那么就创建一个cookie,如果请求里面有cookie,那么就修改cookie的值if(cookies != null){out.write("上次访问的时间:");//先对多个cookies进行遍历for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//对某一个cookie通过键来获取他的值if(cookie.getName().equals("lastTime")){//响应出去//字符串转化成时间Date date = new Date(Long.parseLong(cookie.getValue()));out.write(date.toLocaleString());System.out.println("获取你上次访问的时间:" + date.toLocaleString());}}}else{out.write("这是您第一次访问本站!");}//进行添加cookieCookie cookie = new Cookie("lastTime",System.currentTimeMillis()+"");//设置有效期为一天cookie.setMaxAge(60*60*24);resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}Cookie cookie = new Cookie("name","xcl");
}

2.2.2session(重点):一种是对于服务器的session。服务器技术,利用这个技术可以保存用户的会话信息,把信息和数据内容放在session这个信息中

1.服务器会给每一个用户(浏览器)创建一个session对象,你用谷歌和Microsoft endg浏览器访问百度,就有个两个用户

2.一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在!

3.用户登录之后,整个网站它都可以进行访问,比如B站只要你开始进去了,你之后其他登录就不需要你在登陆进行了

操作步骤:

创建session对象

        添加数据

        查找id

package com.xcl;import com.xcl.pojo.User;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//首先避免请求和响应出现乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=UTF8");//创建session对象HttpSession session = req.getSession();//添加对象数据session.setAttribute("key1",new User(1,"xcl","123456"));//判断id是否是新的if(session.isNew()){resp.getWriter().write("session创建成功,session的id为:"+session.getId());//设置session的过期时间session.setMaxInactiveInterval(10);}else{resp.getWriter().write("session已经创建,session的id为:"+session.getId());}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

进行查询后的添加的数据:

package com.xcl;import com.xcl.pojo.User;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//首先避免请求和响应出现乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=UTF8");//创建session对象HttpSession session = req.getSession();//获得对象User user = (User) session.getAttribute("key1");System.out.println(user.toString());resp.getWriter().write(user.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

总结一下cookie和session的区别:https://blog.csdn.net/weixin_45393094/article/details/104747360可以参考这一篇!

①Cookie可以存储在浏览器或者本地,Session只能存在服务器
②session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
③Session比Cookie更具有安全性(Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击)
④Session占用服务器性能,Session过多,增加服务器压力
⑤单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie,Session是没有大小限制和服务器的内存大小有关

3.JSP(这个先大概了解一下知道大概就行,需要的时候再看看,现在前后端分离,老项目在用!)

jsp:java servlet page,java服务端页面,也和servlet一样,用于实现动态web技术!

深入了解:可以参考这个文章:

https://blog.csdn.net/qq_45821251/article/details/110379237

https://zhuanlan.zhihu.com/p/117238806

根据这个图可以知道我们最后还是访问的servlet,参考上面这个文献我们可以知道,往servlet里面写html是复杂的(你要out.write(<h1>。。。。</h1>)是复杂的),但是要是在html里面写java代码就感觉容易得多(虽然本质最后还是servlet里面写,只是底层其他部分给你写好了!)

http://www.xdnf.cn/news/238933.html

相关文章:

  • 高斯-牛顿法与列文伯格-马夸尔特法:非线性优化的理论推导与C++实现
  • Java @Transactional事物隔离级别和默认值详解
  • git did not exit cleanly (exit code 128) 已解决
  • 0基础FWT详解2(巩固)
  • Databend 产品月报(2025年4月)
  • 算法竞赛进阶指南.沙漠之王
  • 如何加速机器学习模型训练:深入探讨与实用技巧
  • Decode
  • PixONE 六维力传感器:赋能 OEM 机器人,12 自由度精准感知
  • PC端实现微信扫码登录
  • 【Android】Android签名解析
  • TEN:开启实时语音交互的下一代AI Agent引擎
  • 54.[前端开发-前端工程化]Day01-Node-Node安装-前端模块化
  • 多通道协调加载试验机
  • SpringBoot+Redis全局唯一ID生成器
  • Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析
  • 【数据链路层深度解析】从帧结构到协议实现
  • git 怎样把本地仓库推送到新建的远程仓库
  • 详细解释C++ 泛型模板中的完美转发(Perfect Forwarding)
  • 【自定义控件实现最大高度和最大宽度实现】
  • 2025年天梯题解(L1-8 + L2)
  • 普通IT的股票交易成长史--20250430午
  • 湖北理元理律师事务所:从法律视角看债务优化的合规实践
  • 【Android】36原生Settings新框架PreferenceFragment
  • 生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向
  • 文章记单词 | 第51篇(六级)
  • 代码随想录算法训练营第三十天(补)
  • 【mysql】执行过程,背诵版
  • 2025平航杯—团队赛
  • 企业的呼入语音智能体是什么样子?