javaweb整理资料

javaweb整理资料,第1张

servlet
  • 什么是servlet对象

    1. serlvet对象的创建,对象上方法的调用,对象的最终的销毁,Javaweb程序员是无权干预的
    2. serlet对象生命周期是由Tomcat服务器负责的
    3. 自己实例化的serlvet是不同tomcat管理的
    4. tomcat创建的serlvt对象,这些servlet对象都会被被放到一个集合当中(HashMap),只有梵高HashMap集合中的servlet才能够被tomcat管理,自己实例化的servlet对象不会被tomcat容器管理
Servlet接口
package com.atguigui.servlet;

import javax.servlet.*;
import java.io.IOException;

/**Servlet的声明周期
 * 1.执行servlet构造器方法
 * 2.执行init初始化方法
 * 第一、第二 是在第一次访问的时候创建servlet程序会调用
 * 3.执行servlet方法
 * 第三步,每次访问都会执行
 * 4.执行destroy方法
 * 第四步 再web工程停止的使用调用
 */
public class HelloServlet implements Servlet {
    public HelloServlet(){
        System.out.println("1. 默认调用无参构造函数");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 .执行初始化");
    }
    /**
     * service方法是专门用来处理请求和响应的
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3. 调用service方法");
    }
    @Override
    public void destroy() {
        System.out.println("4 调用destroy 销毁方法");
    }
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

web.xml


<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">

    <welcome-file-list>
        <welcome-file>index.jspwelcome-file>
        <welcome-file>index.htmlwelcome-file>
    welcome-file-list>

    <servlet>

        <servlet-name>HelloServletservlet-name>

        <servlet-class>com.atguigui.servlet.HelloServletservlet-class>
    servlet>

    <servlet-mapping>

        <servlet-name>HelloServletservlet-name>

        <url-pattern>/hellourl-pattern>
    servlet-mapping>
web-app>
package com.atguigui.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**Servlet的声明周期
 * 1.执行servlet构造器方法
 * 2.执行init初始化方法
 * 第一、第二 是在第一次访问的时候创建servlet程序会调用
 * 3.执行servlet方法
 * 第三步,每次访问都会执行
 * 4.执行destroy方法
 * 第四步 再web工程停止的使用调用
 */
public class HelloServlet implements Servlet {
    public HelloServlet(){
        System.out.println("1. 默认调用无参构造函数");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 .执行初始化");

    }
    /**
     * service方法是专门用来处理请求和响应的
     */
    @Override
    public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
        System.out.println("3. 调用service方法");
        HttpServletRequest httpServletRequest=(HttpServletRequest) req;
        String method=httpServletRequest.getMethod();
        System.out.println(method);
        if ("GET".equals(method)){
           doGet();
        }else{
            doPost();
        }
    }
    @Override
    public void destroy() {
        System.out.println("4 调用destroy 销毁方法");
    }
//自定义方法 这样做的目的是代码看起来简洁
public void doGet(){
    System.out.println("做出doGet请求");
    System.out.println("做出doGet请求");
    System.out.println("做出doGet请求");
}
//自定义方法 这样做的目的是代码看起来简洁
public void doPost(){
    System.out.println("做出doPost请求");
    System.out.println("做出doPost请求");
    System.out.println("做出doPost请求");
}
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<form action="http://localhost/hello" method="post">
    <input type="submit" value="提交了">
form>
body>
html>
HttpSerlvet
package com.atguigui.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpServlet2 extends HttpServlet {
    /**
     * 在get请求来时会自动调用doGet()方法
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HttpServlet2 的doGet方法");
    }

    /**
     * 在post方法来时会自动调用dopost请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HttpServlet2 的doPost方法");
    }
}
整个Serlvlet类的继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KI0HpXO9-1650591322569)(D:\typora\image\image-20220408235936099.png)]

SerletConfig

三大作用:

  1. 获取Serlvet程序的别名Servlet-name的值
  2. 获取初始化参数init-pararm
  3. 获取ServletContext对象

    <servlet>

        <servlet-name>HelloServletservlet-name>

        <servlet-class>com.atguigui.servlet.HelloServletservlet-class>

        
        <init-param>
            
            <param-name>usernameparam-name>
            
            <param-value>rootparam-value>
        init-param>
        <init-param>
            <param-name>passwordparam-name>
            <param-value>1234param-value>
        init-param>
    servlet>

    <servlet-mapping>

        <servlet-name>HelloServletservlet-name>

        <url-pattern>/hellourl-pattern>
    servlet-mapping>

<servlet>
package com.atguigui.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**Servlet的声明周期
 * 1.执行servlet构造器方法
 * 2.执行init初始化方法
 * 第一、第二 是在第一次访问的时候创建servlet程序会调用
 * 3.执行servlet方法
 * 第三步,每次访问都会执行
 * 4.执行destroy方法
 * 第四步 再web工程停止的使用调用
 */
public class HelloServlet implements Servlet {
    public HelloServlet(){
        System.out.println("1. 默认调用无参构造函数");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 .执行初始化");

        //1.可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet的名称"+servletConfig.getServletName());
        //2. 获取初始化参数init-param
        System.out.println("username的初始化值:"+servletConfig.getInitParameter("username"));
        System.out.println("password的初始化值:"+servletConfig.getInitParameter("password"));
        //3. 获取ServletContext对象
        System.out.println(servletConfig.getServletContext());



    }
    /**
     * service方法是专门用来处理请求和响应的
     */
    @Override
    public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
        System.out.println("3. 调用service方法");
        HttpServletRequest httpServletRequest=(HttpServletRequest) req;
        String method=httpServletRequest.getMethod();
        System.out.println(method);
        if ("GET".equals(method)){
           doGet();
        }else{
            doPost();
        }
    }
    @Override
    public void destroy() {
        System.out.println("4 调用destroy 销毁方法");
    }
//自定义方法 这样做的目的是代码看起来简洁
public void doGet(){
    System.out.println("做出doGet请求");
    System.out.println("做出doGet请求");
    System.out.println("做出doGet请求");
}
//自定义方法 这样做的目的是代码看起来简洁
public void doPost(){
    System.out.println("做出doPost请求");
    System.out.println("做出doPost请求");
    System.out.println("做出doPost请求");
}
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}
servletconfig类

servletconfig类从类名上来看,就知道是serlvlet程序的配置信息类。

Selvlet程序和SevletConfig对象都是由tomcat负责创建,我们负责使用。

Serlvet程序默认是第一次访问的时候创建,sevletConfig是每个Servlet程序创建时,就创建了一个对应的ServletConfig对象。

serlertConfig类的三大作用

  1. 可以获取servlet程序的别名servlet-name的值
  2. 可以获取初始化参数init-param
  3. 获取ServletContext对象
package com.atguigui.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// httpServlet2只能获取在web.xml中配置的相应信息
public class HttpServlet2 extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        //必须继承父类的init()
        super.init(config);
        System.out.println("重写了init初始化方法");
    }

    /**
     * 在get请求来时会自动调用doGet()方法
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HttpServlet2 的doGet方法");
        //在web.xml中配置的servlet 只能访问自己类下的初始化方法
        System.out.println(getServletConfig().getServletName());
        String username = getInitParameter("username");
        String password = getInitParameter("url");
        System.out.println(username+": "+password);
    }

    /**
     * 在post方法来时会自动调用dopost请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HttpServlet2 的doPost方法");
    }
}
ServletContext类
  1. servletcontext是一个接口,他表示上下文对象
  2. 一个web工程,只有一个ServletContext对象实例。
  3. ServletContext对象是一个域对象

什么是域对象

  1. 域对象,是可以像Map一样存取数据的对象,叫域对象
  2. 这里的域指的是存取数据的 *** 作范围。
存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()
ServletContext类的四个作用

获取web.xml中配置的上下文参数 context-param

获取当前的工程路径,格式/工程路径

获取工程部署后在服务器硬盘上的绝对路径

像Map一样存取数据

web.xml


<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">

    <welcome-file-list>
        <welcome-file>a.htmlwelcome-file>
    welcome-file-list>

    <context-param>
        <param-name>usernameparam-name>
        <param-value>yangkuiparam-value>
    context-param>
    <context-param>
        <param-name>passwordparam-name>
        <param-value>yangkuiparam-value>
    context-param>
package com.atguigui.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

/**
 * 获取web.xml中配置的上下文参数 context-param
 *
 * 获取当前的工程路径,格式/工程路径
 *
 * 获取工程部署后在服务器硬盘上的绝对路径
 *
 * 像Map一样存取数据
 */

public class ContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        //获取web.xml中配置的上下文参数 context-param
        ServletContext context = getServletConfig().getServletContext();
        String username=context.getInitParameter("username");
        System.out.println(username);
        String password=context.getInitParameter("password");
        System.out.println(password);
        //获取当前的工程路径,格式/工程路径
        String contextPath = context.getContextPath();
        System.out.println("获取当前工程路径"+contextPath);
        //获取工程部署后在服务器硬盘上的绝对路径
        //这里的 “/”代表着被服务器解析地址为http://ip:port/工程名/ 映射IDEA代码的web目录
        String realPath=context.getRealPath("/");
        System.out.println("真实路径"+realPath);
        String realCssPath=context.getRealPath("/css");
        System.out.println(realCssPath);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
package com.atguigui.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "ContextServlet1", value = "/ContextServlet1")
public class ContextServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletContext();
        context.setAttribute("key","value1");
        //在其他类中也可以访问到context.getAttribute("key")属性,随着程序结束而释放
        System.out.println("获取servletContext的值为"+context.getAttribute("key"));
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
    }
}
HTTP ServletRequest类
  1. HttpServletRequest类

    HttpServletRequest类有什么作用

    1. 每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后出传递到service(doGet和doPost)方法中给我们使用,我们可以通过HttpSerlvetRequest对象,获取到所有请求的信息
HttpServletRequest类的常用方法
  1. getRequestURI() 获取请求的资源路径
  2. getRequestURL() 获取请求的同一资源定位符(绝对路径)
  3. getRemoteHost() 获取客户端的IP地址
  4. getHeader() 获取请求头
  5. getParameter() 获取请求的参数
  6. getParameterValues() 获取请求的参数(多个值的时候使用)
  7. getMethod() 获取请求的方法GET或POST
  8. setAttribute(key,value) 设置域数据
  9. getAttribute(key) 获取域数据
  10. getRequestDispatcher() 获取请求转发的对象
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<form action="http://localhost/parameterServlet" method="get">
    用户名 <input type="text" name="username">
    密 码<input type="password" name="password">
    爱好 <input type="checkbox" name="hobby" value="java">java
    <input type="checkbox" name="hobby" value="c++">c++
    <input type="checkbox" name="hobby" value="js">js
    <input type="submit">
form>
body>
html>
public class ParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用getParameter可以获取前端页面传入的属性值
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        //checkbox多属性 要使用getParameterValues()方法接受
        String[] hobby=req.getParameterValues("hobby");
        System.out.println("用户名"+username);
        System.out.println("密码"+ password);
        System.out.println("爱好"+ Arrays.asList(hobby));
    }
请求转发:

​ 请求转发是指,服务器受到请求后,从一次资源跳转到另一个资源的 *** 作叫请求转发

请求转发的特点

  1. 浏览器地址栏没有发生任何变化
  2. 他们是一次请求
  3. 他们共享Request域中的数据
  4. 可以转发到WEB-INF下
  5. 不能访问工程下以外的地方
public class Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是serlvet1");
        String username=req.getParameter("username");
        req.setAttribute("key1","柜台一的章");
        //getRequestDispatcher("/转发位置").forward(req,resp);
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        requestDispatcher.forward(req,resp);
    }
public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是serlvet2");
        String username=req.getParameter("username");
        Object key1 = req.getAttribute("key1");
        System.out.println("检验柜台一的章"+key1);
        //处理自己的业务
        System.out.println("写serlvet2里面自己的东西");
    }
base标签

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转

<head>
    <meta charset="UTF-8">
    <title>不是首页title>

    <base href="http://localhost/a/b/c.html">
head>
<body>

    <a href="../../index.html">c跳转到indexa>
<p>不是首页p>
body>
HttpServletResponse类

HttpSerletResponse类的作用

HttpServletResponse类和HttpServlet类一样,每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有相应的信息,

我们如果需要设置返回个客户端的信息,都可以通过HttpServletResponse对象进行设置

两个输出流的说明

字节流 getOutputStream(); 常用于下载(传递二进制数据)

字符流 getWriter() ; 常用于回传字符串(常用)

两个流同时只能使用一个

使用了字节流,就不能在使用字符流,反之亦然,否则就会报错

public class ResponseIoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      要求,往客户端回传 字符串 数据
        //输出流是UTF-8 同时也要告诉浏览器要使用UTF-8设置
        resp.setHeader("Content-type", "text/html;charset=UTF-8");
        resp.setCharacterEncoding("UTF-8");
        //设置setContentType()它会同时设置服务器和客户端都使用UTF-8字符集,还设置了相应头
        resp.setContentType("text/html;charset=UTF-8");

        PrintWriter writer = resp.getWriter();
        writer.write("我是大傻逼");
    }
}
请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)

请求重定向的特点

  1. 浏览器地址栏会放生变化
  2. 两次请求
  3. 不能共享Request域中的数据
  4. 不能访问WEB-INF下的资源
  5. 可以访问工程外的资源
//方案一  
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("到此一游Response1");
        //设置状态码 表示重定向
        resp.setStatus(302);
        //设置响应头,说明新的地址在哪里
        resp.setHeader("location","http://localhost/response2");
//方案而      
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("到此一游Response1");
	    resp.sendRedirect("http://localhost/response2");
      }

public class Response2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这里是Response2,重定向来的");
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存