1. 基本概念

1.1 前言

web开发:

  • web,网页的意思
  • 静态web
    • html,css
    • 数据不会变化
  • 动态web
    • 现在网站几乎都是动态的
    • 数据会变化
    • 技术栈:servlet/JSp,ASP,PHP

在java中,动态web资源开发统称为javaweb

1.2 web应用程序

web应用程序:可以提供浏览器访问的程序

  • a.html,b.html…多个web资源,对外界提供服务
  • URL
  • web资源统一放在一个文件夹下,web应用程序->Tomcat:服务器
  • 一个web应用由多部分组成
    • html,css,js
    • jsp,servlet
    • java程序
    • jar包
    • 配置文件

web应用程序编写完毕后,若想提供给外接访问,需要一个服务器统一管理

1.3 静态web

*.html,服务器存在这些,可以直接访问

  • 静态web缺点

    • 无法动态更新,所有用户看到的都一样

      • 轮播图,点击特效:伪动态
      • JavaScript
      • VBScript
    • 无法与数据库交互(数据无法持久化,用户无法交互)

1.4 动态web

页面会动态展示:web的页面样子因人而异

  • 动态web缺点

    • 动态资源出现错误没需要重新编写后台程序(停机维护)

2. web服务器

2.1 技术讲解

  • ASP

    • 微软:国内最早流行的就是ASP
    • 在HTML中嵌入VB脚本 ASP+COM
    • 维护成本高
    • C#
  • PHP

    • 开发速度快,跨平台,代码简单
    • 无法承载大访问量的情况(局限性)
  • JSP/Servlet

    • B/S
    • C/S
    • sun公司主推B/S
    • 基于java语言的(所有大公司或者开源组件,都是用java写的)
    • 可以承载三高问题(高可用,高性能,高并发)带来的影响

2.2 web服务器

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

  • Tomcat

    • 开源,免费,简单好用
  • IIS
    • 微软的,ASP。windows自带
  • 其他

下载Tomcat

  • 安装或者解压
  • 了解配置文件和目录结构
  • 这个东西的作用

3. Tomcat

3.1 安装

Tomcat官网:https://tomcat.apache.org

  • 下载Tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-grZ29A97-1610288368360)(image-20210106223955501.png)]

  • 解压Tomcat压缩包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prCSPWmg-1610288368364)(image-20210106224609100.png)]

3.2 启动关闭Tomcat

bin文件夹下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KhdF1oP-1610288368366)(image-20210106224905003.png)]

访问测试:localhost:8080

可能遇到的问题

  1. java环境变量没有配置
  2. 闪退问题
  3. 乱码

3.3 配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKH6aMlY-1610288368367)(image-20210108005952166.png)]

3.4 发布web网站

  • 把网站放在webapps文件夹下,就可以访问了

网页结构

–webapps

​ --自己的网站文件夹

​ --WEB-INF

​ --classes :java程序

​ --lib :web依赖的jar包

​ --web.xml

​ --index.html

4. HTTP

4.1 什么是HTTP

HTTP默认端口:80

Https默认端口:443

5. Maven

maven核心思想:约定大于配置

  • 有约束,不要去违反

Maven会规定好如何编写java代码,必须按照规范来

5.1 下载安装

5.2 环境变量

  • MAVEN_HOME
  • M2_HOME
  • path中加**%MAVEN_HOME%\bin**

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pf1ZCZuC-1610288368369)(image-20210108013525564.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uv3dCGRz-1610288368371)(image-20210108013635219.png)]

5.3 阿里云镜像

      <mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

5.4 本地仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZcPdiQM-1610288368373)(image-20210108015833202.png)]

5.5 在idea中使用maven

  • 使用maven的模板创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxvVS0t2-1610288368375)(image-20210108020333045.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj7JYdtX-1610288368376)(image-20210108020545665.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JIEY5kf-1610288368377)(image-20210108020715970.png)]

  • 创建一个普通的maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCxzpOpa-1610288368378)(image-20210108021423592.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JMb1s1QI-1610288368379)(image-20210108021804852.png)]

5.6标记文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccciPaZo-1610288368381)(image-20210108022307201.png)]

5.7 在idea中配置tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8d5xcvw-1610288368382)(image-20210108023026267.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BdW7F2M-1610288368384)(image-20210108023053258.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3KWgdYsW-1610288368385)(image-20210108023207559.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLaFiYyI-1610288368387)(image-20210108023456778.png[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmeltaWI-1610288369737)(image-20210108023924612.png)]]


解决警告问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0I1eRgA-1610288368388)(image-20210108024040452.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3cWldgC-1610288368389)(image-20210108024100244.png)]

为什么会有这个问题:我们访问一个网站,需要指定一个文件夹的名字

启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJMdYmOt-1610288368391)(image-20210108024616545.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFrJtY0D-1610288368392)(image-20210108024837068.png)]


6. Servlet

6.1 Servlet简介

  • 是sun公司开发动态web的一门技术
  • sun这公司在这些API中提供了一个接口叫做:Servlet,如果开发一个Servlet程序,只需要两个步骤
    • 编写一个类,实现Servlet接口
    • 把开发好的java类部署到web服务器中
  • 把实现了Servlet接口的java程序叫做Servlet

6.2 HelloServlet

  1. 删掉IDEA中的src目录,以后学习就在这个项目里面建立Moudel,这个空的工程就是maven的主工程.

  2. 关于maven父子工程的理解:

    • 在父项目中会有
    <modules><module>servlet子项目1</module>
    </modules>
    
    • 子项目中会有
    <parent><artifactId>Servlet学习01</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent>

父项目的java子项目可以直接使用


1. 主工程添加依赖

    <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version></dependency>
</dependencies>

2. 在主工程文件夹中创建moudel子工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYvNS5in-1610288368394)(image-20210108150926355.png)]

3. 将子工程中的web.xml替换为最新的

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true">
</web-app>

4. 在main中创建java和resources文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDekiAEx-1610288368396)(image-20210108151332963.png)]

5. 创建一个Servlet类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltbGlv9r-1610288368398)(image-20210108151749287.png)]

6. 实现Servlet接口,可以直接继承HttpServlet(sun公司实现好接口了)

package com.tgk.servlet;import javax.servlet.http.HttpServlet;public class HelloServlet extends HttpServlet {}

继承树如下(子到父):

自己编写的Servlet类->HttpServlet->GenericServlet->Servlet接口

7. 重写父类方法

idea快捷键,alt+insert或者在class内单击右键-Generate

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ashJ4D0U-1610288368399)(image-20210108165310875.png)]

重写doGet和doPost方法

package com.tgk.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.io.PrintWriter;public class HelloServlet extends HttpServlet {// 由于get和post只是请求实现的不同方式,可以相互调用,业务逻辑都一样@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {PrintWriter writer = resp.getWriter(); //响应流writer.print("Hello Servlet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);  // 这里改了}
}

8. 编写Servlet的映射

为什么要映射,我们写的是java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径

    <!--注册Servlet--><servlet><servlet-name>hello</servlet-name><servlet-class>com.tgk.servlet.HelloServlet</servlet-class></servlet>
<!--    servlet的请求路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>

9. 配置Tomcat

10. 启动测试

6.3 运行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Ttw9f1Q-1610288368400)(image-20210108202329884.png)]

6.4 mapping问题

  1. 一个Servlet可以指定一个映射路径
<!--    servlet的请求路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
  1. 一个Servlet可以指定多个映射路径
<!--    servlet的请求路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello2</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello3</url-pattern></servlet-mapping>
  1. 一个Servlet可以指定通用映射路径
<servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping>
  1. 指定一些后缀或者前缀等等。。。。
<!--*前面不能加任何路径-->
<servlet-mapping><servlet-name>hello</servlet-name><url-pattern>*.jsp</url-pattern>
</servlet-mapping>

6.5 ServletContext

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

1 共享数据

  • 我在这个Servlet保存的数据,可以在另一个Servlet拿到

  • public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();String name = "tgk";servletContext.setAttribute("name",name);System.out.println("Hello");}
    }
    
  • public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();String name = "tgk";servletContext.setAttribute("name",name);System.out.println("Hello");}
    }
    
  • <servlet><servlet-name>hello</servlet-name><servlet-class>com.tgk.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern>
    </servlet-mapping><servlet><servlet-name>getc</servlet-name><servlet-class>com.tgk.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping><servlet-name>getc</servlet-name><url-pattern>/getc</url-pattern>
    </servlet-mapping>
    

2 获取初始化参数

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

3 请求转发

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/getp");//转发的请求路径requestDispatcher.forward(req,resp);// 调用forward实现请求抓发System.out.println("进来了demo01");

4 读取资源文件

properties类

  • 在java目录下新建properties
  • 在resources目录下新建properties

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCvWR9JH-1610288368401)(image-20210109180012607.png)]

获取资源:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); //第一个斜杠代表当前web工程Properties properties = new Properties();properties.load(inputStream);String username = properties.getProperty("username");String password = properties.getProperty("password");resp.getWriter().print(username+password);}

6.6 HttpServletRequest

代表客户端的请求,用户通过http协议访问服务器,http请求的所有信息会被封装到HttpServletRequest。

6.6.1 获取前端传递的参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-20sGTV8S-1610288368403)(image-20210110041611444.png)]

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");String name = req.getParameter("name");String ps = req.getParameter("ps");String[] parameterValues = req.getParameterValues("hobbys");System.out.println(name);System.out.println(ps);System.out.println(Arrays.toString(parameterValues));//通过请求转发req.getRequestDispatcher("/success.jsp").forward(req,resp);
}

6.7HttpServletResponse

6.7.1常见状态码

int SC_CONTINUE = 100;
int SC_SWITCHING_PROTOCOLS = 101;
int SC_OK = 200;
int SC_CREATED = 201;
int SC_ACCEPTED = 202;
int SC_NON_AUTHORITATIVE_INFORMATION = 203;
int SC_NO_CONTENT = 204;
int SC_RESET_CONTENT = 205;
int SC_PARTIAL_CONTENT = 206;
int SC_MULTIPLE_CHOICES = 300;
int SC_MOVED_PERMANENTLY = 301;
int SC_MOVED_TEMPORARILY = 302;
int SC_FOUND = 302;
int SC_SEE_OTHER = 303;
int SC_NOT_MODIFIED = 304;
int SC_USE_PROXY = 305;
int SC_TEMPORARY_REDIRECT = 307;
int SC_BAD_REQUEST = 400;
int SC_UNAUTHORIZED = 401;
int SC_PAYMENT_REQUIRED = 402;
int SC_FORBIDDEN = 403;
int SC_NOT_FOUND = 404;
int SC_METHOD_NOT_ALLOWED = 405;
int SC_NOT_ACCEPTABLE = 406;
int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
int SC_REQUEST_TIMEOUT = 408;
int SC_CONFLICT = 409;
int SC_GONE = 410;
int SC_LENGTH_REQUIRED = 411;
int SC_PRECONDITION_FAILED = 412;
int SC_REQUEST_ENTITY_TOO_LARGE = 413;
int SC_REQUEST_URI_TOO_LONG = 414;
int SC_UNSUPPORTED_MEDIA_TYPE = 415;
int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
int SC_EXPECTATION_FAILED = 417;
int SC_INTERNAL_SERVER_ERROR = 500;
int SC_NOT_IMPLEMENTED = 501;
int SC_BAD_GATEWAY = 502;
int SC_SERVICE_UNAVAILABLE = 503;
int SC_GATEWAY_TIMEOUT = 504;
int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

6.7.2**. 常见应用**

  • 向浏览器输出消息
  • 下载文件
    1. 获取下载文件的路径
    2. 下载的文件名
    3. 设置想办法让浏览器支持下载需要的下载的东西
    4. 获取下载文件的输入流
    5. 创建缓冲区
    6. 获取OutputStream对象
    7. 将FileOutputStream流写入buffer缓冲区
    8. 使用OutputStream将缓冲区的数据输出到客户端
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        1. 获取下载文件的路径String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/image.png");System.out.println("下载文件的路径:"+realPath);
//        2. 下载的文件名String filename = realPath.substring(realPath.lastIndexOf("\\") +1);
//        3. 设置想办法让浏览器支持下载需要的下载的东西resp.setHeader("Content-Disposition","attachment;filename="+filename);
//        4. 获取下载文件的输入流FileInputStream fileInputStream = new FileInputStream(realPath);
//        5. 创建缓冲区int len = 0;byte[] buffer = new byte[1024];
//        6. 获取OutputStream对象ServletOutputStream outputStream = resp.getOutputStream();
//        7. 将FileOutputStream流写入buffer缓冲区,使用OutputStream将缓冲区的数据输出到客户端while ((len=fileInputStream.read(buffer))>0){outputStream.write(buffer,0,len);}fileInputStream.close();outputStream.close();}

6.7.3验证码功能

验证怎么来的?

  • 前端实现
  • 后端实现,需要用到java的图片类,生成一个图片
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 浏览器3秒自动刷新一次resp.setHeader("refresh","3");//在内存中创建一个图片BufferedImage bufferedImage = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);//得到图片Graphics2D g = (Graphics2D)bufferedImage.getGraphics(); //笔g.setColor(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/jpeg");// 网站存在缓存,不让浏览器缓存resp.setDateHeader("expires",-1);resp.setHeader("Cache-control","no-cache");resp.setHeader("Pragma","np-cache");//把图片写给浏览器ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());}private String makeNum(){Random random = new Random();String num = random.nextInt(9999)+"";StringBuffer stringBuffer = new StringBuffer();for (int i = 0; i < 5-num.length(); i++) {stringBuffer.append(0);}String s = stringBuffer.toString()+num;return s;}

6.7.4 重定向

什么是重定向:

​ 一个web资源受到客户端的请求后,它会通知客户端访问另一个web资源。

常见常见:

  • 用户登录
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 一定要注意路径问题,否则出现404问题  resp.sendRedirect("/response_learn_war/img");
}

7. Cookie、Session

7.1 会话

**会话:**用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器。这个过程称为会话。

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

怎么证明你是大学生?

你 学校

  1. 学费缴费单 学校给的
  2. 学校登记 学校标记你来过了

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

客户端 服务端

  1. 服务端给客户端一个cookie,客户端下次访问服务端带上cookie就行了;cookie
  2. 服务器登记你来过了,下次你来的时候我来匹配你;session

7.2 保存会话的两种技术

cookie

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

session

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

常见场景:网站登录之后,你下次不用再登录了。

7.3 Cookie

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得cookie,返回数组,说明可能存在多个cookie
String name = cookie.getName();//获得cookie的key
cookie.getValue(); //获得cookie的值
Cookie cookie = new Cookie("LoginTime", System.currentTimeMillis()+"");// 新建一个cookie
cookie.setMaxAge(5); // 设置有效期
resp.addCookie(cookie);  //响应给客户端

cookie一般保存在本地的用户目录下的appData里面

一个网站cookie是否存在上限?(聊聊细节)

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,每个站点最多存放20个cookie
  • 浏览器的cookie上限大概为300个

删除cookie

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

编码解码,网络传输防止中文乱码的常用方法

String encode = URLEncoder.encode("中文字符", "utf-8"); // 编码,防止中文乱码
String decode = URLDecoder.decode(encode, "utf-8");  // 解码

7.4 Session(重点)

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
  • 用户登录之后,整个网站都可以访问–>保存用户信息;保存购物车信息。。。

Session和cookie的区别

  • cookie是把用户的数据写给用户的浏览器。浏览器保存
  • Session是吧用户的数据写到用户独占的Session中,服务器保存(保存重要的信息,减少服务器资源浪费)

使用场景:

  • 保存一个用户的信息;
  • 购物车信息
  • 在整个网站中经常会使用的数据,保存在Session中

使用Session:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 解决乱码req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给Session存东西Person xms = new Person("小魔兽", 21);session.setAttribute("name",xms);//获取Session的idString id = session.getId();//判断Session是不是新创建if (session.isNew()){resp.getWriter().write("Session创建成功,id为:"+id);}else {resp.getWriter().write("Session已经存在,id为:"+id);}
}

手动注销Session

session.removeAttribute("name");
session.invalidate();

自动注销

web.xml配置

<session-config><!--1分钟后Session自动失效--><session-timeout>1</session-timeout>
</session-config>

8. JSP

Response resp) throws ServletException, IOException {
// 解决乱码
req.setCharacterEncoding(“UTF-8”);
resp.setCharacterEncoding(“UTF-8”);
resp.setContentType(“text/html;charset=utf-8”);

//得到Session
HttpSession session = req.getSession();
//给Session存东西
Person xms = new Person("小魔兽", 21);
session.setAttribute("name",xms);
//获取Session的id
String id = session.getId();
//判断Session是不是新创建
if (session.isNew()){resp.getWriter().write("Session创建成功,id为:"+id);}
else {resp.getWriter().write("Session已经存在,id为:"+id);
}

}


**手动注销Session**```java
session.removeAttribute("name");
session.invalidate();

自动注销

web.xml配置

<session-config><!--1分钟后Session自动失效--><session-timeout>1</session-timeout>
</session-config>

8. JSP

javaweb技术笔记相关推荐

  1. javaweb入门笔记(4)-request和response

    2019独角兽企业重金招聘Python工程师标准>>> javaweb入门笔记(4)-request和response 标签: javaweb [TOC] API: Interfac ...

  2. javaweb入门笔记(5)-cookie和session

    2019独角兽企业重金招聘Python工程师标准>>> javaweb入门笔记(5)-cookie和session 标签: javaweb [TOC] Cookie是客户端技术:Se ...

  3. JavaWeb自学笔记(一)

    JavaWeb自学笔记(一) 学习视频:BV12J411M7Sj 文章目录 JavaWeb自学笔记(一) 1.基本概念 1.1 web应用程序 1.2 静态web 1.3 动态web 2.web服务器 ...

  4. JavaWeb学习笔记2 —— Web服务器简介

    JavaWeb学习笔记2 -- Web服务器简介 参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj 相关技术 ASP: 微软:国内最早流行的就是A ...

  5. B站狂神说JavaWeb学习笔记

    JavaWeb学习笔记(根据b站狂神说java编写) 1.基本概念 1.1 前言 静态Web: 提供给所有人看数据不会发生变化! HTML,CSS 动态Web: 有数据交互,登录账号密码,网站访问人数 ...

  6. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  7. 黑马程序员Javaweb学习笔记01

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆 文章目录 一 . BS架构,HTTP协议 http请求数据格式和相应数据格式 二 . web服务器 2.1 tomca ...

  8. 【javaweb学习笔记】servlet-api,filter和Listener

    javaweb学习笔记 1. servlet-api 1.1 servlet初始化 1.2 ServletContext和context-param 2. 什么是业务层 3. IOC 3.1 耦合/依 ...

  9. Javaweb学习笔记(一)

    目录 1.Html 和 Css 1.1.B/S 软件的结构 1.2.网页的组成部分 1.3.HTML简介 1.4.HTML文件的书写规范 1.5.HTML标签 1.6.标签的语法 1.7.常用标签 1 ...

最新文章

  1. jquery 数组的调用
  2. mysql分组后去重复数据_mysql去掉重复数据只保留一条,以及取分组后的一条数据...
  3. 分布式锁之Redis6+Lua脚本实现原生分布式锁
  4. java magic number_避免JDBC查询中的CheckStyle magic number错误
  5. Android 获取联系人的公司,android-如何从设备的联系人列表中获取用户...
  6. java 3d模型插件_3D模型整合插件 Kitbasher V1.2 支持3DS MAX 2012~2018
  7. SAP License:谁能透露你的信息
  8. AcWing1064.骑士(状压DP)题解
  9. 如何基于AngularJS部分视图动态更改标头?
  10. 【ML入门系列】(一)训练集、测试集和验证集
  11. 适配器模式(Adapter模式)
  12. HDR到底是干什么的?建模的时候有什么用处?
  13. endnote 参考文献加序号_两招搞定参考文献自动编号与格式编排
  14. meta中的http-equiv = X-UA-Compatible
  15. 关于innerText和value的区别 2020-10-21
  16. Web功能设计:登录与退出
  17. java国际化程序_Java 国际化标准程序实现
  18. 服务器开机显示b7,服务器启动B7提示
  19. 大数据入门--带你快速了解大数据
  20. cd src make install make[1]: Entering directory `/home/xuweiliang/redis/r 错误解析

热门文章

  1. 字符串绕圈 找最小的字典序开始的位置(C++)
  2. matlab剖面图_海洋要素如温盐等
  3. 超级搞笑~`记得转噢
  4. Winrar 3.8 版 破解
  5. 华为设备配置远程登录(ssh)
  6. 联想为什么放弃电视盒子?
  7. 进行回转体挠度方面的动态模拟RotorInsa.v3.4.2有限元软件
  8. 孟郎诗词网1.0版本前端部分总结
  9. 计算机图形学是用计算机,计算机图形学作业
  10. 如何制作一个纯净无广告无捆绑安装的Windows10重装系统的U盘启动盘?看这篇文章就够了!