首页 > 编程语言 >JavaWeb(未完结)

JavaWeb(未完结)

时间:2024-04-03 20:29:17浏览次数:14  
标签:浏览器 JavaWeb 未完结 resp req cookie 请求 客户端

#

1静态web

  • *.htm *.htm 这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取

  • 缺点

    • Web页面无法动态更新,所有用户看到的都是同一个页面

    • 无法和数据库交互(数据无法持久化)

2动态Web

页面会动态展示:Web的页面展示的效果因人而异

##

2 web服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息;

2.1 Tomcat

  • 在安装目录下找到conf,在service.xml文件中

    • 可以配置启动的端口号

      • tomcat的默认端口号 8080

      • mysql 3306

      • http 80

      • https 443

3 Http

3.1什么是http

http(超文本传输协议) 是一个简单的请求-响应协议,它通常运行在TCP之上

  • 文本 :html,字符串...

  • 超文本:图片,视频,音乐,定位,地图...

3.2 请求行

  • 请求行中的请求方式:GET

  • 请求方式 GET,POST,HEAD,DELETE,PUT,TRACT

    • get: 请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效

    • POST:请求能够携带的参数多,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但是不高效

3.3响应状态

  • 200 请求响应成功

  • 3xx:请求重定向 即重新去浏览器所给的地址

  • 4xx:找不到资源 404

  • 5xx:服务器代码错误 500 网关错误 503

4.Servlet

4.1 servlet简介

  • servlet用来sun公司开发动态web的一门技术

4.2HelloServlet

1.创建一个maven项目,删除其中的src包,就可以创建多个moudle,这个空的工程就是maven的主工程

2.配置maven,环境优化

3.编写一个servlet程序

1.编写一个普通类

2.实现servlet接口,可以直接继承servlet类

4.编写servlet的映射

为什么需要映射,我们写的java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在

web服务器中注册我们的servlet,还需要给他一个浏览器能够访问的路径

5.配置tomcat

6.启动测试

7.启动,测试

4.3Mapping问题

1.一个servlet可以指定一个映射路径

2.一个servlet可以指定多个映射路径

3.一个servlet可以指定通用映射路径 使用通配符*

4.可以指定一些前缀或者后缀等等

5.优先级问题 指定了固有的映射路径优先级最高,如果找不到就会走默认路径

4.4部署问题

在部署的时如果有多个则会增长打包的时间,如果找不到所需要打包的组件,就刷新maven

4.5 ServletContext

web容器在启动的时候,它会为每个web程序都创建了一个对应的ServletContext对象,它代表了当前的web应用

  • 共享数据

    • 我在这个servlet存储的东西可以在别的servlet中寻找

4.6 获取初始化数据

配置一些web应用初始化参数

 <context-param>
     <param-name>url</param-name>
     <param-value>jdbc::mysql://localhost:3306/mybatis</param-value>
 </context-param>   
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     ServletContext servletContext = this.getServletContext();
     String url = servletContext.getInitParameter("url");
     resp.getWriter().print(url);
 }

4.7 请求转发

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     ServletContext servletContext = this.getServletContext();
     System.out.println("进入了方法demon4");
     RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/getparam");//转发的请求路径
     requestDispatcher.forward(req,resp);//调用forward实现请求转发
 }

/getparam覆盖了当前的路径

4.8 读取资源文件

Properties

  • 在java目录下新建properties

  • 在resoures目录下新建properties

发现:都被打包到同一个路径下:class,我们俗称这个路径为classpath

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     InputStream is = this.getServletContext().getResourceAsStream("classes/db.properties");
     Properties prop = new Properties();
     prop.load(is);
     String user = prop.getProperty("username");
     String pwd = prop.getProperty("password");
     resp.getWriter().print(user+":"+pwd);
 }

思路:需要一个文件流

##

4.9 Response与Request

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpSservletRequest对象,代表响应的一个HttpServletResponse对象

  • 如果要获取客户端请求过来的参数:找HttpServletRequest

  • 如果要给客户端响应一些信息:找HttpServletResponse

HttpServletResponse

负责向浏览器发送数据的方法

 ServletOutputStream getOutputStream() throws IOException;
 ​
 PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法

 void setCharacterEncoding(String var1);
 ​
 void setContentLength(int var1);
 ​
 void setContentLengthLong(long var1);
 ​
 void setContentType(String var1);

常见应用

  1. 向浏览器输出信息

  2. 下载文件

     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //1.获取文件下载的路径
         String realPath ="D:\\java实验\\javaweb-01-servlet\\response\\src\\main\\resources\\1.png";
         //2.获取下载文件的名字
         String filename = realPath.substring(realPath.lastIndexOf("\\") + 1);
         //3.设置想办法让浏览器能够支持(Content-Disposition)下载我们所需要的东西
         resp.setHeader("Content-Disposition","attachment;filename"+filename);
         //4.获取下载文件的输入流
         FileInputStream in = new FileInputStream(realPath);
         //5.创建缓冲区
         int len=0;
         byte[] buffer=new byte[1024];
         //6.获取OutputStream对象
         ServletOutputStream outputStream = resp.getOutputStream();
         //7.将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端
         while ((len=in.read(buffer))>0){
             outputStream.write(buffer,0,len);
         }
         in.close();
         outputStream.close();
     }

3.验证码功能

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //如何让浏览器3s自动刷新一次
     resp.setHeader("refresh","300");
     //在内存中创建一个图片
     BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
     //得到图片
     Graphics2D g = (Graphics2D) image.getGraphics();
     //设置图片的背景色
     g.setBackground(Color.white);
     g.fillRect(0,0,80,20);
     //给图片写数据
     g.setColor(Color.blue);
     g.setFont(new Font(null,Font.BOLD,20));
     g.drawString(makeNum(),0,20);
     //告诉浏览器,这个请求用图片打开的方式
     resp.setContentType("image/png");
     //网站存在缓存,不让浏览器缓存
     resp.setDateHeader("expires",-1);
     resp.setHeader("Cache-control","no-cache");
     resp.setHeader("Pragma","no-cache");
     //把图片写给浏览器
     ImageIO.write(image,"jpg",resp.getOutputStream());
 }
 //生成随机数
 private String makeNum(){
     Random random = new Random();
     String num=random.nextInt(9999999)+"";
     StringBuffer sb = new StringBuffer();
     for (int i = 0; i < 7 - num.length(); i++) {
         sb.append("0");
     }
     num=sb.toString()+num;
     return num;
 }

4.实现重定向

一个web资源收到客户端的请求后,它会通知客户端去访问另外一个web资源,这个过程叫做重定向

常见场景:

  • 用户登录

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.sendRedirect("/response_war/image");
 }

实现重定向,会跳转到resp.sendRedirect里面所指向的地址

面试题

重定向与转发之间的区别

相同点

  • 页面都会发生跳转

不同点

  • 请求转发的时候,url地址栏不会发生变化 编码 307

  • 重定向的时候,url地址栏会发生变化 编码 302

HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest中,通过这个HttpServletRequest的方法,获得所有客户端的信息

  1. 获得前端传递的参数 请求转发

     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         resp.setCharacterEncoding("utf-8");
         req.setCharacterEncoding("utf-8");
         String username = req.getParameter("username");
         String password = req.getParameter("password");
         System.out.println("----------------");
         System.out.println(username);
         System.out.println(password);
         String[] hobbies = req.getParameterValues("hobby");
         for (String hobby : hobbies) {
             System.out.print(hobby+"   ");
         }
         System.out.println("----------------");
         resp.sendRedirect("/req/success.jsp");
     }

5.Cookie与Session

5.1会话

会话:用户打开浏览器,点击了很多链接,访问多个web资源,关闭浏览器,这个过程就叫做会话

有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话

你怎么能证明你是西开的学生?

你 西开

1.发票 西开给你发票

2.学校登记 西开标记你来过了

一个网站怎么证明你来过

客户端 服务端

1.服务端给客户端一个信件,客户端下次访问服务端的时候带上信件就可以了 cookie

2.服务器登记你来过,下次你来的时候我来匹配你 session

5.2 保存会话的两种技术

cookie

  • 客户端技术(请求,响应)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在session中

5.3 Cookie

  1. 从请求中获取cookie信息

  2. 服务器响应给客户端cookie

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //解决中文乱码问题
    /* req.setCharacterEncoding("utf-8");
     resp.setCharacterEncoding("utf-8");*/
     req.setCharacterEncoding("utf-8");
     resp.setCharacterEncoding("GBK");
 ​
     PrintWriter out = resp.getWriter();
     //Cookie是服务器从客户端获取的
     Cookie[] cookies = req.getCookies();//返回数组,说明可能有多个cookie
     //判断Cookie是否存在
     if(cookies!=null){
         for (Cookie cookie : cookies) {
             //获取cookie的名字
             if(cookie.getName().equals("lastLogintime")){
                 //获取cookie的值
                 long lastlogintime = Long.parseLong(cookie.getValue());
                 Date date = new Date(lastlogintime);
                 out.write("你上一次访问该界面在"+date.toLocaleString());
             }
         }
     }else {
         out.write("这是你第一次访问该页面");
     }
     //服务器给客户端响应一个cookie
     Cookie cookie = new Cookie("lastLogintime",System.currentTimeMillis()+"");
     //设定cookie的有效期为一天
     cookie.setMaxAge(24*60*60);
     //响应给客户端一个cookie
     resp.addCookie(cookie);
 }

cookie:一般会保存在本地的用户目录下;

一个网站cookie是否存在上限?

  • 一个cookie只能保存一个信息

  • 一个web站点(即服务器)可以给浏览器发送多个cookie,最多存放20个cookie

  • 浏览器(即客户端)可以存放300个cookie

  • cookie大小有限制 4kb

删除cookie

  • 不设置有效期,关闭浏览器后cookie自动失效

  • 设置cookie的有效期为0

标签:浏览器,JavaWeb,未完结,resp,req,cookie,请求,客户端
From: https://blog.csdn.net/2303_76216371/article/details/137357090

相关文章

  • Java课程设计:基于Javaweb的图书管理系统(内附源码)
    一、项目介绍本系统由读者端和管理员端,读者端主要有主要有三大功能,借阅图书、归还图书和查看自己的借阅信息,管理员端主要有四个大的功能,对图书进行管理,对用户进行管理、对借阅信息进行管理、对图书分类进行管理。整体功能模块图,如图所示:借还图书:读者对图书进行借阅与归......
  • JavaWeb学习笔记——第十三天
    事务管理、AOP事务管理事务回顾事务是一组操作的集合,它是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败。操作开启事务(一组操作开始前,开启事务):starttransaction/begin。提交事务(这组操作全部成功后,提交事务):commit。回滚事务(中间任何一个操作出现异常,回滚事......
  • javaweb学习(day11-监听器Listener&&过滤器Filter)
    一、监听器Listener1 Listener介绍Listener监听器它是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Listener监听器、Filter过滤器Listener是JavaEE的规范,就是接口监听器的作用是,监听某种变化(一般就是对象创建/销毁,属性变化),触发对应方......
  • 【javaWeb & 功能介绍第一篇】阿里云OSS文件上传
    文件上传文件上传存储文件本地存储云服务阿里云文件上传文件上传是将本地的图片,视频,音频等文件上传到服务器,供其他用户浏览或下载的过程文件上传在项目中应用十分广泛,我们经常发微博,发微信都用到了文件上传的功能在前端的开发之中,如果需要文件上传功能,则必须在......
  • JavaWeb学习笔记——第十二天
    SpringBootWeb案例(三)登录功能LoginController:importcom.zgg1h.pojo.Emp;importcom.zgg1h.pojo.Result;importcom.zgg1h.service.EmpService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springfram......
  • JavaWeb学习笔记——第十一天
    SpringBootWeb案例(二)新增员工实现EmpController:@PostMappingpublicResultadd(@RequestBodyEmpemp){log.info("新增员工:{}",emp);empService.add(emp);returnResult.success();}EmpService:voidadd(Empemp);EmpServiceImpl:@Overri......
  • JavaWeb学习笔记——第十天
    Springboostweb案例(一)准备工作需求说明需要完成以下功能:部门管理员工管理查询部门列表查询员工列表(分页、条件)删除部门删除员工新增部门新增员工修改部门修改员工环境搭建项目架构:准备数据库表(dept、emp)。--部门管理createtabledep......
  • 一文搞懂Javaweb的响应状态码
    一、状态码大类状态码分类说明1xx响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它2xx成功——表示请求已经被成功接收,处理已完成3xx重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。4xx客户端......
  • 基于JavaWeb的家居商城系统的设计与实现论文
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于家居商城系统当然也不能排除在外,随着网络技术的不断成熟,带动了家居商城系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • JavaWeb学习笔记——第九天
    Mybatis(二)Mybatis基础操作删除根据主键删除SQL语句:deletefromempwhereid=17;接口方法:@Delete("deletefromempwhereid=#{id}")publicvoiddelete(Integerid);注意事项如果mapper接口方法形参只有一个普通类型的参数,#{…}里面的属性名可以随便写,如:#......