JAVA_web学习笔记

1.Web应用程序

可以提供浏览器访问的程序

html/b.html多个web资源,这些web资源可以被外界访问,对外界提供服务。

我们能访问到的任何一个页面或则资源都是再某个计算机上。

URL请求服务

这个统一的web资源会被放在同一个文件夹下,web应用程序-->tomcat:服务器

一个web应用由多部份组成(静态web,动态web)

Html,css,js

Jsp,servlet

Java程序

Jar包

Properties配置文件

Web应用程序编写完后,想要提供外界访问:需要一个服务器来统一管理。

1.2静态web

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

静态web一次请求过程

1.在页面上client发出一次请求

2.在web service接受请求

3.web service将index.html返回给client

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

​ 轮播图:点击特效:伪动图技术:javascript(实际开发用使用最多)/VBScript

他无法与数据库交互(数据无法持久化,用户无法交互)

1.3动态web

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

缺点:

​ 假如服务器的动态web资源出现错误。我们需要重新编写我们的后台程序,重新发布。(称为停机维护)

优点:

​ 页面可以动态更新,所有用户看到的不是同一个页面

​ 它可以与数据库交互(持久化:注册账户,商品,用户信息等)。

新手村:--魔鬼训练(分析原理,看源码)--》pk场

2.web服务器

2.1技术讲解

了解 ASP

(国内最早流行的)在html中嵌入了VB脚本,ASP+COM,在ASP技术中写java代码需要用<%这里面写java代码%>

PHP:

​ 开发速度很快,功能很强大,跨平台,代码很简单。(大部分网站都用PHP)。劣势就是无法承载大访问量的情况,存在局限性。

JSP/Servlet:

​ sun公司主推的B/S架构(C/S,客户端和服务器,B/S浏览器和服务器)基于java语言的(所有的大公司或则一些开源的组件都是用java写的)

​ 可以承载三高问题带来的影响(三高:高并发,高可用性,高性能)语法很像ASP。

2.2web服务器

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

IIS(微软的)

ASP...windows中自带的

3.Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

下载Tomc装or解压

2.了解配置文件及目录

3.这个东西的作用

3.1下载Tomcat

解压到当前文件夹。其中文件夹的作用:

bin//启动,关闭脚本等。

conf//配置

lib//依赖包,jar包

logs//日志

webapps//存放网站

work//工作目录

开启:在lib中使用start.bat打开Tomcat服务

关闭:使用shutdown进行关闭。

测试:就可以使用localhost:8080进行访问。

可能遇到的问题:

1.java环境变量没有配置

2.闪退问题:需要配置兼容性

3.乱码问题:配置文件中设置

3.2配置

1.服务器核心配置文件:server.xml

修改了配置文件后需要重启生效。

2.更改主机名

先在Tomcat配置文件中的//修改主机名.默认的主机名为localhost==本机ip

再到 C:\Windows\System32\drivers\etc\hosts

在最底下添加一个

​ 127.0.0.1 主机名

1.主机名==2.主机名(保持一致)

一些常用的默认端口号:

tomcat的默认端口号为:8080

mysql:3306

http:80

https:443

默认网站应用存放的位置为:webapps

3.4发布一个web网站

将自己写的网站,放在服务器tomcat中,指定web应用的文件夹webapps下,就可以访问了。

网站应该有结构

--webapps:Tomcat服务器的web目录
	-ROOT
	-kuangstudy:网站的目录名
		-class:java程序
		-lib:web应用所依赖的jar包
		-web.xml:网站配置文件
	-index.xml默认页面
	-static
		-css
			-style.css
		-js
		-img
		....

4.HTTP

超文本传输协议//超文本包括图片,音频,视频,定位,地图....

Https:安全的

​ 端口443

4.1Http请求

请求是:client->server

Request Method: GET//请求类型
Status Code: 200 OK//请=状态码
Remote Address: 14.215.177.39:443//远程地址

响应:server->client

1.请求行

请求方式:get,post,head,put。

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

post:请求能够携带的参数没有限制,大小不限制,不会在浏览器的URL地址栏显示数据内容,安全。

2.消息头

Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式,GBK,UTF-8
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存数据
Connection:告诉浏览器,请求完成时是断开还是保持连接
HOST:主机...

4.2响应

1.响应体

Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式,GBK,UTF-8
Accept-Language:告诉浏览器,它的语言环境
Cache-Control:缓存数据
Connection:告诉浏览器,请求完成时是断开还是保持连接
HOST:主机...
Refresh:告诉客户端多久刷新一次
Location:让网页重新定位

2.响应状态码(重点)

200:请求相应成功200

3xx:请求重定向

​ 重定向:你重新到我给你的新位置

4xx:找不到资源404

​ 资源不存在

5xx:服务器代码错误!500

​ 502:网关错误

5.Maven

我为什么要学这个技术

​ 1.在javaweb开发中,需要使用大量的jar包,我们手动去导入

​ 2.如何能够让一个东西自动帮我们导入和配置这些jar包

​ 由此:Maven诞生了?(他只是一个架构管理工具)

5.1Maven项目架构管理工具

我们目前用它来就是为了方便我们导入jar包!

Maven的核心思想:约定大于配置

​ 有约束就不要去违反

Maven会规定好你该如何去编写java代码,必须按照这个规范来

5.2下载Maven

https://maven.apache.org/download.cgi

建议:电脑上的所有环境都放在一个文件夹下面。

5.3配置环境变量

在我们的系统环境变量中

配置如下:

​ M2_HOME maven目录下的bin目录

​ MAVEN_HOME maven的目录

​ 在系统的path中配置MAVEN_HOME// %MAVEN_HOME%\bin

5.4修改镜像

​ 镜像:加速我们的下载

5.5本地仓库

建立仓库:在本地的仓库

远程仓库。

现在自己的MAVEN目录下建立maven-repo

在找到配置文件中的刚才建立的目录路径

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

5.6在IDEA中使用MAVEN

1.创建一个mavenapp项目

2.com.liu

javaweb_maven01

5.7文件夹功能

第一种方式:右击文件夹-》Mark Directory as-》选择标记项目类型

5.9Tomcat配置

4.4

Tomcat启动的端口号

4.5

警告:没有一个artifacts。没有一个项目。我们必须要创建一个项目

4.6在这个选项卡下面添加一个artifacts。添加第一个

为什么会有警告问题:我们访问网站,需要指定一个文件夹名称。我们需要手工配置且是必须的

4.7

选写;不写默认路劲为localhost:8080,如果写了一个路径如text。则访问需要localhost:8080/text。

这个过程叫做虚拟映射路径

5.10 pom配置文件

pom.xml是maven的核心配置文件

maven由于约定大于配置。//我们之后可能会遇到我们写的配置文件无法被导出或则生效 的问题,解决方案:

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

5.11解决遇到的问题

1.Maven3.6.2版本问题

IDEA查看日志在help选项卡中的show login in explorer//显示日志

2.Tomcat闪退

3.IDEA中每次都要重复配置Maven

4.Maven项目中Tomcat无法配置

6.Servlet

6.1Servlet简介:

Servlet是html和web前端数据交互的一个中间件

​ 编写一个类,实现Serblet接口

​ 把开发好的java类部署到web服务器中

把实现了Servlet接口的java程序叫做,Servlet

6.2HelloServlet

1.新建一个空MAVEN项目

File->New->project->Maven-Next-Finish
image

image

2.建立web项目

右击刚才创建的项目-New-Module->
image

image

Next-finish

image

此时的目录结构是这个样子的,到这里我们的基本项目已经创建好了。

image

现在我们需要配置Tomcat。

image

点击之后是这个样子的,然后点击左上角的“+”号添加部署方式,一定不要在Templates下面直接选

image

我们第一个hello sevlet就选择发布本地

image

然后是这个样子的

image

最后点击Deployment选择发布路径,HTTP可执行的是war包。

image

然后选择发布建立的web app项目名称的war exploded,我这里是sun2:war exploded,然后OK就完事

image

现在我们就直接启动Tomcat 就可以了。

image

我们的Hello Servlet就完成了

image

最后分析一下整个web App的工作流程

image

6.3ServletContext

servlet上下文

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

6.3.1属性(attribute)

属性是在后台servlet中设置并获取的 , 用方法setAttribute(name, o) 和 getAttribute(name)实现

1.共享数据

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext servletContext = this.getServletContext();
    String username="liulang";
    servletContext.setAttribute("username",username);//往username里面放一个值
  }

获取数据

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html");
    ServletContext servletContext = this.getServletContext();
    String username = (String) servletContext.getAttribute("username");//取出username里面的值
    resp.getWriter().write(username);
  }

HTTP content-type

​ Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。

Content-Type 标头告诉客户端实际返回的内容的内容类型。

2.初始化页面参数

<!--设置初始化参数-->
  <context-param>
    <param-name>url</param-name>//名
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>//值
  </context-param>

3.请求转发

进行请求转发后,你在url上面的路径不会变,但是在方法里面处理完后,页面会调用到被转发的页面

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();//获取servlet上下文
    RequestDispatcher requestDispatcher = context.getRequestDispatcher("/get_context");//请求转发,传入需要转发的地址
    requestDispatcher.forward(req, resp);//调用forward实现请求转发,传入req,resp
  }

这里我请求的是fwd页面,而获取的内容确实init页面的内容,url地址栏也没有变为init页面但内容是init页面内容,这就是转发。

image

*请求转发和重定向的区别

转发:image

转发过程是A想要访问C的内容,但是A又直接获取不到C的内容,他就向B发出请求,然后B没有C的内容,然后B就代替A去请求到了C的内容以后,再返回给A

重定向:image

重定向是A向B发出一个请求,但是B没有A需要的内容,B告诉A,C的地址,然后A重新向C发出请求。

4.读取配置资源

Properties

Properties.load(资源路径);

classpath//类路径

​ 在java目录下新建properties

​ 在resources目录下新建properties

发现:都会被打包到同一个路径下:classes;我们成为类路径classpath.

6.4HttpServletRespose

web服务器接收到客户端的Http请求,针对这个请求,分别创建一个代表请求的HTTPServletRequest和HttpsServletResponse;

  • 获取客户端请求过来的参数使用HTTPServletRequest
  • 给客户端响应一些信息使用HTTPServletResponse

1、简单分类

负责向浏览器发送消息的方法

getOutputStream、getWriter

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

void setCharacterEndcoding(String var1)

vpod setContentLength(int var1)

void setContentLengthLong(long var1)

void setContentType(String var1)

2、常见应用

1.下载文件

​ 步骤:获取下载文件的路径,获取下载文件的名称,设置想办法让浏览器能够支持我们下载需要的东西,获取下载文件的输入流,创建缓冲区,获取OutputStream对象,将fileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端。

2.验证码功能

前端实现:jsp判断

后端实现:需要用到java的图片类,生成一个图片。

3.实现重定向

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

应用场景:用户登录

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        resp.setCharacterEncoding("utf-8");
//重定向路径
        resp.sendRedirect("/init");
    }

使用重定向对页面进行请求的时候我们可以看到url地址也发生了变化,而转发的地址栏不会发生变化

重定向的原理等同于resp.setHeader("Location","/init");resp.setStatus(302);

image

简单写一下登录:

1.这是index.jsp页面,有一个form表单.

<body>
<%--这里提交的路径,需要寻找到项目的路径--%>
<%--${pageContext.request.contextPath}代表当前项目--%>
<form action="${pageContext.request.contextPath}/login">
    <p>账号:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <input type="submit">
</form>
</body>

2.在写一个java类实现表单登录后的重定向

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        resp.setCharacterEncoding("utf-8");
        System.out.println("进入该请求");
//        处理请求
//        getParameter获取参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username:"+username+"\npassword:"+password);
        //进行重定向
        resp.sendRedirect("/success.jsp");
    }

3.然后在写一个登录进去的页面success.jsp

<body>
<h1>登陆成功!</h1>
</body>

4.web.xml配置类

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.liu.Servlet.Request_test</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

5.启动tomcat

image

点击提交跳转到success.jsp

image

我们在form表单中输入了账号和密码,可以在后端获取这两个参数

String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username:"+username+"\npassword:"+password);

image-20210530160710132

6.5HttpServletRequest

HttpServletRequest代表客户端的请求,用户可以通过http协议访问服务器,http请求中的所有信息都会被封装到HttpServletRequest,通过HttpServletRequest的方法,我们可以获得客户端的所有信息。

1.获取前端传递的参数

 String username = req.getParameter("username");
    String password = req.getParameter("password");
    String[] hoopies = req.getParameterValues("hoppy");
//转发页面
this.getServletContext().getRequestDispatcher(req.getContextPath()+"/success.jsp").forward(req,resp);
//注意!注意!注意!req.getContextPath()+"/success.jsp")这里的斜杠代表当前目录。
//req.getContextPath()获取当前目录的路径
@Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    String[] hoopies = req.getParameterValues("hoppy");
    System.out.println("=====================");
    System.out.println(username);
    System.out.println(password);
    System.out.println(Arrays.toString(hoopies));
    System.out.println("=====================");
    resp.setCharacterEncoding("utf-8");
    this.getServletContext().getRequestDispatcher("/success.jsp").forward(req,resp);
  }

2.请求转发

7.Cookie、Session

7.1会话

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

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

你怎么能够证明你是三峡学院的学生。

​ 你 三峡学院

​ 1.发票 学校给的发票

​ 2.学校登记 学校标记你入学了

一个网站怎样证明你来过了?

​ 客户端 服务器

​ 1.服务器给客户端一个信件,下次再访问待上信件就可以了

​ 2.服务器登记你来过了,然后下来再来直接匹配你

7.2保存会话的两种技术

cookie:

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

session

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

常见:网站登录后,下次在访问就不用在登录了。

7.4Session

  • 服务器会为每一个用户创建一个session
  • 一个session独占一个浏览器,只要浏览器没有关闭, 这个session就存在
  • 用户登录之后,整个网站他都可以访问。保存用户的信息,保存购物车的信息
posted @ 2021-05-10 07:16  时倾1001  阅读(104)  评论(0编辑  收藏  举报