javaweb

Javaweb

狂神笔记:JavaWeb(狂神笔记) - 且听_198 - 博客园 (cnblogs.com)

 

 

基本概念

 

静态页面

在这里插入图片描述

 

动态页面

img

 

 

 

 

web服务器

 

技术:

ASP、php、jSP/Servlet

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

 

 

 

tomcat

在这里插入图片描述

可以配置启动的端口号

  • tomcat的默认端口号为:8080

  • mysql:3306

  • http:80

  • https:443

 

 

 

 

 

 

http

 

HTTP是超文本传输协议

超文本:图片、音乐、视频、定位、地图

https:安全的

 

两个时代

  • http1.0

    • HTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接

  • http2.0

    • HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源。

 

 

Http请求(Request)

  • 客户端---发请求(Request)---服务器

 

请求行

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

  • 请求方式:

    Get,Post

    ,HEAD,DELETE,PUT,TRACT…

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

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

 

消息头

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

 

 

Http响应

  • 服务器---响应-----客户端

 

响应体

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

 

 

响应状态码(***)

200:请求响应成功 200

3xx:请求重定向

  • 重定向:你重新到我给你新位置去;

4xx:找不到资源 404

  • 资源不存在;

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

 

 

 

 

Maven

 

阿里云镜像

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

 

本地仓库

<localRepository>D:\Environment\apache-maven-3.6.2\maven-repo</localRepository>

 

 

无法导出问题

maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题

解决方案:

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<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>

 

 

webapp4.0代码

<?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"
        metadata-complete="true">



</web-app>

 

 

Maven仓库

地址:https://mvnrepository.com/

 

 

 

Servlet

 

简介

  • Servlet就是sun公司开发动态web的一门技术

  • Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:

    • 编写一个类,实现Servlet接口

    • 把开发好的Java类部署到web服务器中。

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

 

实现Servlet接口

public class HelloServlet extends HttpServlet {
   
  //由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样;
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //ServletOutputStream outputStream = resp.getOutputStream();
      PrintWriter writer = resp.getWriter(); //响应流
      writer.print("Hello,Serlvet");
  }

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

 

 

编写Servlet的映射


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

 

 

Servlet原理

1567913793252

 

 

 

Mapping问题

 

  • 一个Servlet可以指定一个映射路径

    <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello</url-pattern>
      </servlet-mapping>

     

  • 一个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>
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello4</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello5</url-pattern>
      </servlet-mapping>

     

  • 一个Servlet可以指定通用映射路径

    <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello/*</url-pattern>
      </servlet-mapping>

     

  • 默认请求路径:优先级高,会把首页干掉

       <!--默认请求路径-->
      <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/*</url-pattern>
      </servlet-mapping>

     

  • 指定一些后缀或者前缀等等….

    <!--可以自定义后缀实现请求映射
      注意点,*前面不能加项目映射的路径
      hello/sajdlkajda.qinjiang
      -->
    <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>*.qinjiang</url-pattern>
    </servlet-mapping>

     

  • 优先级问题 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;

    <!--404-->
    <servlet>
      <servlet-name>error</servlet-name>
      <servlet-class>com.kuang.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>error</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>

     

 

ServletContext

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

 

 

 

共享数据

我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;

public class HelloServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
      //this.getInitParameter()   初始化参数
      //this.getServletConfig()   Servlet配置
      //this.getServletContext() Servlet上下文
      ServletContext context = this.getServletContext();

      String username = "秦疆"; //数据
      context.setAttribute("username",username); //将一个数据保存在了ServletContext中,名字为:username 。值 username

  }

}

 

public class GetServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      ServletContext context = this.getServletContext();
      String username = (String) context.getAttribute("username");

      resp.setContentType("text/html");
      resp.setCharacterEncoding("utf-8");
      resp.getWriter().print("名字"+username);

  }

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

 

  <servlet>
      <servlet-name>hello</servlet-name>
      <servlet-class>com.kuang.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.kuang.servlet.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>getc</servlet-name>
      <url-pattern>/getc</url-pattern>
  </servlet-mapping>

 

 

获取初始化参数

在web.xml中写

<!--配置一些web应用初始化参数-->
  <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 context = this.getServletContext();
  String url = context.getInitParameter("url");
  resp.getWriter().print(url);
}

 

 

请求转发

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

 

image-20220712164514313

 

 

 

 

读取资源文件

  • 在resources目录下新建db.properties

username=root12312
password=zxczxczxc
public class ServletDemo05 extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      ServletContext context = this.getServletContext();
      InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/classes/db.properties");
      Properties properties = new Properties();
      properties.load(resourceAsStream);
      String username = properties.getProperty("username");
      String password = properties.getProperty("password");
      resp.getWriter().print(username);
      resp.getWriter().print(password);

  }

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

 

 

 

HttpServletResponse

 
posted @ 2022-07-12 18:34  小墩墩^  阅读(66)  评论(0)    收藏  举报