javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)

1、Tomcat总结:

1.1.文件夹的作用

javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第1张图片

1.2.启动,关闭tomcat:

javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第2张图片

1.3.访问测试:

http://localhost:8080/
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第3张图片

1.4.配置问题:

javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第4张图片

可以配置启动的端口号

<Connector port="8080" 
redirectPort="8443" 
connectionTimeout="20000" protocol="HTTP/1.1"/>

tomcat默认端口号为:8080

可以配置主机的名称

-<Host name="localhost" 
autoDeploy="true"
 unpackWARs="true" appBase="webapps">

默认的主机名为:localhost->127.0.0.1
默认网站应用存放的位置为:webapps

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


2、HTTP总结

2.1.什么是http:

HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在tcp之上。 默认端口号为:80

2.2.http的请求

客户端—发送请求(request)—服务器
例如百度:
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第5张图片

Cache-Control: private    缓存控制
Connection: keep-alive          连接
Content-Encoding: gzip            编码   
Content-Type: text/html;charset=utf-8   类型
Accept:text/html   告诉游览器,它所支持的数据类型
Accept-Encoding: gzip, deflate, br  支持哪种编码格式:GBK,UTF-8,GB2312
Accept-Language: zh-CN,zh;q=0.9 告诉游览器,他的语言环境
Cache-Control: max-age=0   缓存控制
Connection: keep-alive   告诉游览器,请求完成是断开还是保持连接

2.2.1 请求行

1)请求行中的请求方式:get
2)请求方式:get/post/head/delete/put/tract
get:请求能够携带的参数比较少,大小有限制,会在游览器的URL抵制栏显示数据的内容,不安全,但高效
post:请求能够携带的参数没有限制,大小有限制,不会在游览器的URL抵制栏显示数据的内容,安全,但不高效

2.3.http 的响应

服务器----响应()----客户端
例如百度:

Cache-Control: private    缓存控制
Connection: keep-alive          连接
Content-Encoding: gzip            编码   
Content-Type: text/html;charset=utf-8   类型

2.3.1响应体

Accept:text/html   告诉游览器,它所支持的数据类型
Accept-Encoding: gzip, deflate, br  支持哪种编码格式:GBK,UTF-8,GB2312
Accept-Language: zh-CN,zh;q=0.9 告诉游览器,他的语言环境
Cache-Control: max-age=0   缓存控制
Connection: keep-alive   告诉游览器,请求完成是断开还是保持连接
HOST:  主机..../..
Refrush: 告诉客户端,多久刷新一次
Location:   让网页重新定位

2.3.2响应状态码:

200:请求响应成功
3**:请求重定向 - [1] 重定向:你重新到我给你新的位置去;
404:找不到资源
5xx:服务器代码错误 500 502:网关错误


3、maven

3.1.maven项目架构管理工具

maven的核心思想:约定大于配置
**·**有约束,不要去违反

3.2.下载安装maven

javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第6张图片
下载后完成解压;

3.3.配置环境变量

在我们的系统环境变量中,配置如下配置:

  • M2_HOME : maven安装下的bin目录
  • MAVEN_HOME : maven目录
  • 在系统的path中配置MAVEN_HONE: %MAVEN_HOME%\bin

测试MAVEN是否安装成功:
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第7张图片

3.4.修改阿里云镜像

  • 镜像:mirrors 作用:加速我们下载
 <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

3.5本地仓库

建立一个本地仓库:localRepository

<localRepository>E:\vue\apache-maven-3.6.3\maven-repo</localRepository>

4.Servlet

4.1Servlet简介

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

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

4.2.HelloServlet

Servlet接口sun公司有两个默认的实现类:HttpServlet,GenericServlet

1.构建一个普通的maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel;

2.关于Maven父子工程的理解:
父项目中会有:

<modules>
        <module>servlet-01</module>
    </modules>

子项目汇总会有:

<parent>
        <artifactId>java-servlet-01</artifactId>
        <groupId>com.xs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

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

son extend father

3.Maven环境优化:
1)修改web.xml为最新的
2)将maven的结构搭建完整

4.编写一个Servlet程序
1)编写一个普通类
2)实现 Servlet接口,这里我们直接继承HttpServlet

public class HelloServlet extends HttpServlet{
    public HelloServlet() {
        super();
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //ServletOutputStream outputStream = resp.getOutputStream();
        PrintWriter writer = resp.getWriter();
        writer.print("hello,servlet");
        
    }

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

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

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

6.配置Tomcat

7.启动测试

4.3.Servlet原理

Servlet是由Web服务器调用,web服务器在收到游览器请求之后,会:
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第8张图片

4.4.Mapping问题

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

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

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

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

3.一个Servlet可以指定通用映射路径:

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

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

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

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

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

4.5.ServletContext

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

1. 共享数据
在一个servlet中的数据,在另一个servlet中可以获得;

在HelloServlet中doGet中引用servletContext:

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String name="行帅";
        servletContext.setAttribute("name", name)

在GetServlet中调用在HelloServlet中写入的内容,从而实现两个Servlet的数据共享 :

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext(); 
        //调用getServletContext()函数从来获得别的Servlet中的数据
        String name = (String) context.getAttribute("name");
		//获得另个一个Servlet中的数据name
        resp.setContentType("text/html");   //将中文方式输出
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().print("名字"+name);
    }

2.获取初始化参数
ServletDemo中Doget中:

  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String url = servletContext.getInitParameter("url");
        resp.getWriter().print(url);

xml文件中:

  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
  </context-param>

3.请求转发
在ServletDemo04中实现请求转发函数:

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.getRequestDispatcher("/gp").forward(req,resp);
        //getRequestDispatcher("/gp")转发的请求路径,调用forward实现请求转发
    }


4.6.HttpServletResponse

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

  • 如果要获取客户端请求过来的参数:HttpServletRequest
  • 如果要给客户端响应一些信息:HttpServletResponse

1.简单分类
负责向游览器发送数据的方法:

1.   ServletOutputStream getOutputStream() throws IOException;
       //数据流
2.   PrintWriter getWriter() throws IOException; //数据值

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

 1.  void setCharacterEncoding(String var1);

 2.   void setContentLength(int var1);

3.    void setContentLengthLong(long var1);

 4.   void setContentType(String var1);
 
 5.  void setDateHeader(String var1, long var2);

  6. void addDateHeader(String var1, long var2);

  7.  void setHeader(String var1, String var2);

  8.  void addHeader(String var1, String var2);

   9. void setIntHeader(String var1, int var2);

 7.  void addIntHeader(String var1, int var2);

负责响应的状态码:

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;

2.常见应用
1.向游览器输出消息(例如getWrite())
2.下载文件
1)要获取下载文件的路径
2)下载的文件名是啥
3)设置想办法让游览器能够支持下载我们需要的东西
4)获取下载文件的输入流
5)创建缓冲区
6)获取OutputStream对象
7)将FileOuputStream流写入到buffer缓冲区
8)使用OutputStream将缓冲区中的数据输出到客户端

3.验证码功能
验证怎么来?

  • 前端实现
  • 后端实现,需要用到java的图片类,生产一个图片

4.实现重定向
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第9张图片
一个web资源收到客户端请求后,他会通过客户端去访问另一个web资源,这个过程叫做重定向。
方法:

  void sendRedirect(String var1) throws IOException;

sendRedirect()函数的作用是重定向网页,向浏览器发送一个特殊的Header,然后由浏览器来做重定向,转到指定的页面。
测试:

//RedirectServlet
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("/s3/getc");


//xml
  <servlet>
    <servlet-name>RedirectServlet</servlet-name>
    <servlet-class>com.xs.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RedirectServlet</servlet-name>
    <url-pattern>/red</url-pattern>
  </servlet-mapping>

resp.sendRedirect("/s3/getc");作用:重定向
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第10张图片
重定向与转发的区别:
相同点: 页面都会发生跳转
不同点: 请求转发的时候,url不会产生变化;重定向的时候,url地址栏会发生变化。


4.7.HttpServletRequset

HttpServletRequset代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到Request,通过这个HttpServletRequset的方法,可以获得客户端的所有信息。
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第11张图片
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第12张图片
1.获取前端传递的参数,并且转发
javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet)_第13张图片
Servlet:

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

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        req.getRequestDispatcher("/success.jsp").forward(req,resp);
//进行请求转发
    }

1.String getParameter(String name):根据参数名称获取参数值()

2.request.getRequestDispatcher()有两种跳转:(请求转发)

  (1)跳转到一个servlet
`  request.getRequestDispatcher("想跳转的servlet名").forward(request, response);`
 
(2)跳转到一个页面
  `request.getRequestDispatcher("文件路径").forward(request, response);`

你可能感兴趣的:(javaweb学习心得总结(一)(Tomcat,Http,Maven,Servleet))