JavaWeb、Web核心

目录

一、JavaWeb核心介绍

 JavaWeb技术栈

二、HTTP协议

1、请求数据的格式

2、响应数据的格式

3、常见响应状态码​编辑

三、Tomcat

 1、Tomcat简介

 2、Tomcat安装

 3、tomcat部署

 4、IDEA中创建Maven Web项目

 5、IDEA中使用tomcat

四、Servlet

1、Servlet快速入门

2、Servlet执行流程

3、Servlet生命周期

4、Servlet方法介绍

5、Servlet体系结构

6、Servlet urlPattern配置

7、XML配置方式编写Servlet urlPattern

8、Request

Request继承体系 

Request获取请求数据

Request通用方式获取请求数据

解决post请求中文乱码问题

Request请求转发

9、Response

Response重定向

路径问题

 Response响应字符数据

Respose响应字节数据

五、Web核心综合案例


一、JavaWeb核心介绍

 JavaWeb技术栈

 网站请求与响应的过程:首先浏览器发送请求(HTTP协议)到服务端,请求相关的资源,资源分为动态资源(Servlet)和静态资源(三剑客),动态资源就是java代码,这些java代码遵循一定的书写规范称为Servlet、jsp等相关规范,这些java代码可以负责逻辑的处理,并且对数据库进行访问操作,获取对应的数据给到对应的静态页面,页面再进行一些css样式处理,最后将这个页面返回给浏览器,称为响应。

二、HTTP协议

1、请求数据的格式

2、响应数据的格式

3、常见响应状态码

三、Tomcat

 1、Tomcat简介

2、Tomcat安装

不建议直接使用x关闭服务器,相当于拔电源,使用Ctrl+C

3、tomcat部署

 4、IDEA中创建Maven Web项目

 5、IDEA中使用tomcat

使用插件 在IDEA中快速使用tomcat,如果设置了插件的configuration,需要通过maven中的run方法运行,直接点击运行按钮不会按照插件设置的端口和访问路径运行,只能支持到tomcat7

四、Servlet

1、Servlet快速入门

<!--配置Maven中的编译版本-->
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>



  <!--导入Servlet依赖坐标-->
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>

      <!--依赖范围:测试和编译-->
      <scope>provided</scope>
    </dependency>
  </dependencies>
@WebServlet("/demo")
public class ServletDemo1 implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    public ServletConfig getServletConfig() {
        return null;
    }

    //service会自动执行,输出结果到控制台
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello world servlet");
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

 2、Servlet执行流程

 浏览器中输入的url分为了三部分:通过第一部分的路径能够访问到Tomcat服务器,通过第二部分能够访问到这个Web项目,通过第三部分能够访问到项目中的servlet,自动执行service()方法,而要执行这个service()方法必须创建Servlet对象,通过web服务器tomcat创建

3、Servlet生命周期

4、Servlet方法介绍

@WebServlet(urlPatterns = "/demo", loadOnStartup = 1)
public class ServletDemo1 implements Servlet {
    /**
     * 初始化方法
     * 1、调用时机:默认情况下,Servlet被第一次访问时调用
            *配置参数loadOnStartup:默认为-1,默认情况下的调用时机
            *配置为0或正整数时,会在服务器启动时就初始化Servlet,而不是第一次访问时
     * 2、调用次数:1次
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
    }
    
    /**
     * 提供服务的方法
     * 1、调用时机:每一次Servlet被访问时调用
     * 2、调用次数:多次,每访问一次就调用一次
     */
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //service会自动执行,输出结果到控制台
        System.out.println("hello world servlet");
    }

    /**
     * 销毁方法
     * 1、调用时机:Servlet被销毁时(内存释放或者服务器关闭的时候)
     * 2、调用次数:1次
     */
    public void destroy() {
        System.out.println("destory");
    }

    /**
     * 返回一些作者、版本、版权等信息,一般返回空字符串
     * @return
     */
    public String getServletInfo() {
        return null;
    }
    
    /**
     * 获取Servlet配置对象
     * @return
     */
    public ServletConfig getServletConfig() {
        return null;
    }

}

5、Servlet体系结构

由于每次都是实现Servlet接口并重写五个方法,步骤过于繁琐,所以引入了Servlet实现类,使用HTTP协议封装Servlet,使得只需要继承HttpServlet实现类就能实现Servlet接口,重写HttpServlet的doGet()方法和doPost()方法即可。

HttpServlet 为什么要根据请求的方式不同,调用不同的方法?

由于get和post请求的请求方式不一样,所以需要分别处理

不同的方法如何调用?

先获取请求方式,然后采用不同的逻辑判断,是get请求就使用get方法,是post请求就使用post方法。

6、Servlet urlPattern配置

7、XML配置方式编写Servlet urlPattern

8、Request

@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、使用request对象 获取请求数据
        String name = request.getParameter("name");  //url?name=zhangsan

        //2、使用response对象 设置响应数据
        response.setHeader("content-type","text/html;charset=UTF-8");
        response.getWriter().write("<h1>"+name+",欢迎您!</h1>");
    }

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

    }
}

Request继承体系 

Request获取请求数据

@WebServlet("/req1")
public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //request获取请求行 GET/servlet1/req1?username=zhangsan HTTP/1.1
        //1、获取请求方式 GET
        String method = req.getMethod();
        System.out.println(method);

        //2、获取虚拟目录(项目访问路径,项目名) /servlet1
        String contextPath = req.getContextPath();
        System.out.println(contextPath);

        //3、获取请求的URL(统一资源定位符) http://localhost:8080/servlet1/req1
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL.toString());

        //4、获取请求的URI(统一资源标识符) /servlet1/req1
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);

        //5、获取请求参数(GET方式) username=zhangsan
        String queryString = req.getQueryString();
        System.out.println(queryString);


    }
}

Request通用方式获取请求数据

使用通用的方式获取GET和POST请求参数,而不用对GET和POST使用不同的方法分别获取请求参数。

@WebServlet("/req2")
public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用通用方式获取GET 和 POST 请求数据
        System.out.println("get....");
        //1、获取所有参数的map集合
        Map<String, String[]> maps = req.getParameterMap();
        //2、对map集合的键进行遍历
        for (String key : maps.keySet()) {
            System.out.print(key + ":");

            //3、获取到的键对应的可能是一个数组,遍历这个值数组
            String[] values = maps.get(key);
            for (String value : values) {
                System.out.print(value + " ");
            }
            System.out.println();
        }
        System.out.println("----------------------");

        //4、根据key获取参数值(获取数组)
        String[] hobbys = req.getParameterValues("hobby");
        for (String hobby : hobbys) {
            System.out.println(hobby);
        }

        //5、根据key获取单个值
        String username = req.getParameter("username");
        System.out.println(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //直接调用GET请求的方法,避免代码重复
        this.doGet(req,resp);
    }
}

解决post请求中文乱码问题

@WebServlet("/req3")
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理post方式中文字符乱码问题
        req.setCharacterEncoding("UTF-8");
        //获取单个值
        String username = req.getParameter("username");
        System.out.println(username);


    }

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

Request请求转发


@WebServlet("/req4")
public class ServletDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("req4...");
        //存储共享数据
        req.setAttribute("msg","hello");
        req.getRequestDispatcher("/req5").forward(req,resp);
    }

@WebServlet("/req5")
public class ServletDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("req5...");
        //获取共享数据
        Object msg = req.getAttribute("msg");
        System.out.println(msg);

    }

9、Response

Response重定向

浏览器向资源A请求数据时,资源A无法处理,向浏览器返回状态码302,并告诉浏览器去请求资源B,提供资源B的地址。

@WebServlet("/resp1")
public class ResponseDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("resp1.....");
        resp.sendRedirect("resp2");
    }
}


@WebServlet("/resp2")
public class ResponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("resp2.....");
    }
}

路径问题

 Response响应字符数据

@WebServlet("/resp3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应头及编码
        resp.setContentType("text/html;charset=utf-8");
        //获取字符输出流
        PrintWriter writer = resp.getWriter();
        writer.write("你好");
        writer.write("<h1>你好</h1>");
    }

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

Respose响应字节数据

@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、获取文件输入流
        FileInputStream fs = new FileInputStream("\\C:\\Users\\misGood\\Desktop\\图片\\1.jpg");

        //2、获取字符输出流管道
        ServletOutputStream os = resp.getOutputStream();

        //3、复制文件对象到输出流管道
        IOUtils.copy(fs,os);

    }

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

    }
}

五、Web核心综合案例

JavaWeb核心、综合案例(详细!Web开发流程)_飞翔的企鹅i的博客-CSDN博客

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值