JavaWeb

JavaWeb

一. 基本概念

1.1 前言

  • 技术栈 Servlet/JSP,ASP,PHP

  • java中动态web中开发统称为JavaWeb

  • web程序包括

    • html、css、js
    • jar
    • jsp,servlet
    • java程序
    • 配置文件(.properties)

Web程序完成后需要给服务器统一管理后才能被外界访问

1.2 静态web

资源是死的

1.3 动态Web

与数据库连接,实现用户增删改查,

二. Web服务器

2. 主要实现

2.1 ASP:
  • 微软、
  • C#
  • IIS
  • JSP
2.2 php:
  • 开发速度快,功能强大,跨平台
  • 无法处理大批量访问量
2.3 JSP/Servlet

B/S:浏览/服务器

C/S:客户端/服务器

  • sun公司推出
  • 开源组件大多基于java
  • 雨大和ASP相似

三. 服务器

被动处理用户请求、返回响应

3.1 IIS

微软自带

3.2 tomcat

轻量级应用服务器

3.3 补充

插入一个java内容

JRE中的核心在rt.jre(包含String.class等众多包)

四. Tomcat

​ 通过ROOT文件中的index.jsp文件可以修改Tomcat默认访问页面

初始页面

修改后

修改配置文件可以改变访问端口号

修改后

改变系统配置文件hosts可以实现本机域名访问

4.1 默认端口号

Tomcat默认端口号:8080

mysql:3306

http:80

https:443

4.2 网站访问过程

  • 输入域名
  • 检查本机配置文件是否有域名映射
    • yes 直接访问
    • no 调用DNS查找(三次握手还是啥的,死去的操作系统又开始攻击我)

4.3 访问本地服务器

五. HTTP

4.1 什么是HTTP
//打电动去了	大晚上的学锤子学

超文本传输协议(Hyper Text Transfer Protocol)是一个简单的请求-响应协议,运行在TCP之上,指定客户端发送什么消息以及得到什么回复,请求和响应头以ASCII(二进制编码)形式给出

4.2 作用

规定www服务器与浏览器信息传递规范,二者共同遵守的协议

4.3 Http请求

Request URL: https://www.baidu.com/
Request Method: GET	//get方法/post方法
Status Code: 200 OK	//状态码
Remote Address: //远程地址(ip
Referrer Policy: strict-origin-when-cross-origin

请求行

  • 请求方式 GET/POST
    • GET 请求携带的参数少,大小有限制,URL栏会显示数据内容,安全性低,高效
    • POST 请求携带的参数没限制,URL栏不显示数据内容,安全,低效

4.4Http响应

响应

Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 04 Jan 2023 01:51:53 GMT

请求

Accept: text/html,application/xhtml+xml,application/xml;
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive

HTTPS

超文本传输安全协定(英语:H yper T ext T ransfer P rotocol S ecure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种透过计算机网络进行安全通讯的传输协定。HTTPS经由HTTP进行通讯,但利用SSL/TLS加密封包。HTTPS开发的主要目的,是提供对网站伺服器的身份认证,保护交换资料的私隐与完整性。这个协定由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。

响应状态码

200:请求成功

3xx:请求重定向

4xx:找不到资源

5xx:服务器代码错误

六. Maven

6.1 Maven项目架构管理工具

功能:自动导入和配置jar包

​ 环境安装及配置

很奇怪,不知道什么时候配了

配置阿里云镜像

     <mirror>
    	<id>aliyunmaven</id>
    	<mirrorOf>*</mirrorOf>
    	<name>阿里云公共仓库</name>
    	<url>https://maven.aliyun.com/repository/public</url>
    </mirror>

6.2 建立本地仓库

<localRepository>D:\jdk\apache-maven-3.8.6\maven-repo</localRepository>

6.3idea配置

这里要记得勾上,不然新建项目时还会默认idea自带的maven属性

新建maven项目

idea崩了o(╥﹏╥)o

受不了了!!!

创建成功长这样

要新建web项目的话需要打开项目结构

成功后可以看见生成web文件

这里可以将目录标记为源代码目录和测试目录

6.4 pom文件

数据库那会遇到的神秘文件,这回终于开始学了

<?xml version="1.0" encoding="UTF-8"?>
<!--版本头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--配置的项目文件,项目组id,工件名称,版本-->
    <groupId>org.example</groupId>
    <artifactId>java_02_webapp</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--配置-->
    <properties>
<!--    编码版本    -->
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

maven导入jar包时可以自动添加此jar包所依赖的其他包

    <dependencies>
<!--        maven可以自动导入导入的jar包所依赖的其他jar-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.0.3</version>
        </dependency>
    </dependencies>

6.5 解决moven导出资源失败方法

在build中配置resources

<!--在 build 中配置 resources,解决资源导出失败问题-->
<!--include 标签指定哪些文件将被匹配,以*作为通配符-->
<!--exclude 标签指定哪些文件将被忽略,以*作为通配符-->
<!--filtering 构建过程中是否对资源进行过滤,默认false-->
<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>

如果遇到maven中tomcat无法正确配置,可以将idea自动生成的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/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

改为和本地tomcat中的ROOT文件的配置

<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/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
</web-app>

Maven本地仓库

项目初始没severlet文件时可以去tomcat中的lib中查看相关的jar包,然后上Maven仓库查找所需的jar包,可以选择直接下载jar包,也直接选择Maven的方式导入

    <dependencies>
<!--        maven可以自动导入导入的jar包所依赖的其他jar-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
<!--          <scope>provided</scope> //作用域(范围),这里保留idea会自动报错-->
        </dependency>
    </dependencies>

此时就可以在class文件中直接导入所需类

成功导入

修改web.xml遇到的问题

<web-app>
  <filter-mapping>
    <filter-name>CustomFilter</filter-name> // 错误:应定义 servlet-name 或 url-pattern 子标记
  </filter-mapping>
  <servlet-mapping>
    <servlet-name>CustomServletName</servlet-name>
    <url-pattern>/ baseUrl</url-pattern> // 错误:URI 模式不得包含空格
  </servlet-mapping>
</web-app>

这里如果servlet不是自动生成的需要自己去工件中添加maven的lib包

再回到xml文件发现没爆红了

tomcat上复制的代码

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Hello World!</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Hello World!</h1>");
            out.println("</body>");
            out.println("</html>");

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

对应的web.xml配置

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.yorha.servlet.HelloServlet</servlet-class>
</servlet>
<!--    一个servlet对应一个映射    -->
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <!--    请求路径    -->
    <url-pattern>/yorha</url-pattern>
</servlet-mapping>

成功运行

测试输出乱码

神奇,我也乱码

解决办法,在class文件中加入

response.setCharacterEncoding("utf-8");

乱码解决

响应方式跟class文件对应

添加库

配置好moven依赖包后pom.xml文件会多出这个

七 . Servlet

这里super保留的话在url栏直接访问会报错

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
//        super.doGet(req, resp);
    }
    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
        doGet(req, resp);
    }

修改方法如上

7.1mapping
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    //<url-pattern>/*</url-pattern>
    //默认请求路径,会跳过index页面
    //<url-pattern>*.do</url-pattern> 前面没/后缀可以直接修改
</servlet-mapping>

自定义404

简单的前端页面显示

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html");
    PrintWriter writer = resp.getWriter();
    writer.print("<h1>404</h1>");
}

xml映射文件

    <servlet>
        <servlet-name>Errors</servlet-name>
        <servlet-class>com.yorha.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Errors</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

就这样吧,太长看不过来,明天再赶servlet使用
下次再也不弄介么多图片辣!!!!!!

posted on   lsyorha  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示