Java学习日志Day36_Servlet里面的两个重要的对象_请求转发以及重定向的原理_jsp的基本使用

6G网络的关键技术、应用前景与挑战并存的科技征途 移动通信技术正以前所未有的速度迭代更新,而6G技术的研发进程渐渐成为了当前科技领域的热点。全球各国已纷纷将目光投向了充满想象的6G时代。本文将探讨全球6G技术研发的最新进展,以及6G技术的核心创新与潜在应用。 阅读详情

一、Servlet里面的两个重要的对象

  1. ServletConfig:某个serlvet的配置对象
    获取初始化参数

    1). 获取ServletConfig对象呢?
    GenericServlet:抽象的父类中:
    public ServetConfig getServietConfig(){return this.config}

    2). ServletConfig:获取配置参数
    ServletConfig config = this.getServletConfig();

    3). 获取初始化参数
    String getInitParameter(String var1);//参数名称获取参数值
    String value = config.getInitParameter(“encoding”);
    System.out.println(value);

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

<!--servlet基本配置-->
    <servlet>
        <servlet-name>ServletConfigDemo</servlet-name>
        <servlet-class>com.qf.servletconfig_01.ServletConfigDemo</servlet-class>
	</servlet>
<!--servlet的映射配置-->
    <servlet-mapping>
        <servlet-name>ServletConfigDemo</servlet-name>
        <url-pattern>/configDemo</url-pattern>
    </servlet-mapping>

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;
import java.util.Enumeration;

/* ServletConfig对象 :Servlet的配置对象
 */
public class ServletConfigDemo  extends HttpServlet {

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

        //ServletConfig:获取配置参数
        ServletConfig config = this.getServletConfig();
        
        //获取初始化参数
        //String getInitParameter(String var1);//参数名称获取参数值
        String value = config.getInitParameter("encoding");
        System.out.println(value);

        System.out.println("------------------------------------");
        
        //public java.util.Enumeration<E> getInitParameterNames():获取servlet的所有初始化参数名称
        Enumeration<String> ens = config.getInitParameterNames();
        while(ens.hasMoreElements()){
            String name = ens.nextElement();
            String v = config.getInitParameter(name);
            System.out.println(name+"---"+v);
        }
    }

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

4). html:超文本标记语言
书写html标签:一定存在的标签

xml:可扩展标记语言 (作为配置文件去使用的!)

早期用来代替html语言,没有替代成功!
非常注重结构(必须有开始,有结束)
作为"小型数据库"
用户可以自定义标签

特点:一个xml文件有且只能有一个根标签

  1. ServletContext: (全局对象)
    全局对象:ServletContext
    每一个web应用程序都有自己的上下文: 工程名称
    包含在url地址上
    http://localhost:8080/EE_day36_war_exploded/
    EE_day36_war_exploded:上下文路径
<!--全局参数-->
    <context-param>
        <param-name>AAA</param-name>
        <param-value>AAA'value</param-value>
    </context-param>

<!--一个servlet里面可以配置很多的初始化参数-->
        <!--初始化参数-->
        <init-param>
            <!--参数名称-->
            <param-name>encoding</param-name>
            <!--参数值-->
            <param-value>utf-8</param-value>
        </init-param>

        <init-param>
            <param-name>path</param-name>
            <param-value>d:/a.txt</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>

作用1:1)加载全局参数

	获取ServletContext对象
       抽象的父类中
      public ServletContext getServletContext() {
        return this.getServletConfig().getServletContext();
     }
   
    ServletContext context = this.getServletContext();
    
    加载全局参数(后期读取配置文件 : springmvc底层基于Servlet (前端控制器:DispatcherServlet))
        String getInitParameter(String var1);:初始化的全局参数
       Enumeration<String> getInitParameterNames();
    String value = context.getInitParameter("AAA");//参数名称获取参数内容
    System.out.println(value);///EE_day36_war_exploded

    Http协议:将获取上下文路径的方法,封装在请求对象中
    
     xx.jsp
       <a href="${域对象获取上下路径}/login.jsp">超链接</a>          浏览器行为  (当前jsp页面中 的超链接,图像加载:带上上下文路径)
举例:
	<servlet>
        <servlet-name>ServletContextDemo</servlet-name>
        <servlet-class>com.qf.servletcontext_02.ServletContextDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContextDemo</servlet-name>
        <url-pattern>/contextDemo</url-pattern>
    </servlet-mapping>

public class ServletContextDemo extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            
        String path = request.getContextPath();
        System.out.println(path);///EE_day36_war_exploded
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }
}

作用2:2)可以获取上下路径

<%--
pageContext
    getReuqest()---->Request对象
        request--->称为 pageContext的bean对象(javabean导航)

        HttpServletRequest
            public String getContextPath()    getXXX() ----xXX:就称为bean属性
                    contextPath--->称为HttpServletRequest的bean属性
	--%>
<%-- <a href="${pageContext.request.contextPath}/login.jsp">登录</a>--%>
举例:
	<servlet>
        <servlet-name>ServletContextDemo2</servlet-name>
        <servlet-class>com.qf.servletcontext_02.ServletContextDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContextDemo2</servlet-name>
        <url-pattern>/contextDemo2</url-pattern>
    </servlet-mapping>

public class ServletContextDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //1)获取Servletcontext对象
        ServletContext servletContext = this.getServletContext(); //全局对象

        //2)String getContextPath():获取上下文路径
        String path = servletContext.getContextPath();
        System.out.println(path);
    }

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

作用3:3)可以作为"域对象"
传递的数据可以在不同servlet之间通过域对象进行数据共享!

举例:
	<servlet>
        <servlet-name>ServletContextDemo3</servlet-name>
        <servlet-class>com.qf.servletcontext_02.ServletContextDemo3</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>ServletContextDemo3</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

/* 域对象:可以在不同的servlet之间进行数据共享!
 */
public class ServletContextDemo3 extends HttpServlet {

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

        //获取全局对象
        ServletContext servletContext = this.getServletContext();
        //给当前域对象添加属性和内容
        //void setAttribute(String var1, Object var2);
        List<String> list = new ArrayList<String>() ;
        list.add("高圆圆") ;
        list.add("文章") ;
        list.add("马伊琍") ;

        servletContext.setAttribute("list",list);//存储的属性名称 "见名知意"
        System.out.println("保存成功...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
举例:
	<servlet>
	    <servlet-name>ServletContextDemo4</servlet-name>
	    <servlet-class>com.qf.servletcontext_02.ServletContextDemo4</servlet-class>
	 </servlet>
    <servlet-mapping>
        <servlet-name>ServletContextDemo4</servlet-name>
        <url-pattern>/demo2</url-pattern>
    </servlet-mapping>

public class ServletContextDemo4 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //获取全局对象
        ServletContext servletContext = this.getServletContext();
        // Object getAttribute(String var1);
        List<String> list = (List<String>) servletContext.getAttribute("list");
        for(String str:list){
            System.out.println(str);
        }
        System.out.println("获取成功....");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

作用4:4)有请求转发的作用

							子实现类:
	HttpServletRequest				HttpServletRequestWrapper
    HttpServletResponse				HttpServletResponseWrapper

原理:
    1)获取全局对象
    ServletContext servletContext = this.getServletContext();
    
    2)获取分发对象
    RequestDispatcher getRequestDispatcher(String var1)
    	参数:客户端发送的请求 通过分发对象访问服务器的内部资源文件(servet,jsp,html)
    	服务器行为:通过服务器进行内部转发  		路径: 无需带上下文路径
    RequestDispatcher rd = servletContext.getRequestDispatcher("/WEB-INF/hello.html");
    void forward(ServletRequest var1, ServletResponse var2)		转发到上面的地址上
    rd.forward(request,response);
    
   3).因为request对象本身域对象
    request.setAttribute("XXX","XXX");

    4).简写方式:ServletRequest接口中
    RequestDispatcher getRequestDispatcher(String var1); 获取分发对象
举例:
	<servlet>
        <servlet-name>ServletContextDemo5</servlet-name>
        <servlet-class>com.qf.servletcontext_02.ServletContextDemo5</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContextDemo5</servlet-name>
        <url-pattern>/demo3</url-pattern>
    </servlet-mapping>

public class ServletContextDemo5 extends HttpServlet {

    protected void doGet(HttpServletRequest request,  HttpServletResponse response)
            throws ServletException, IOException {

        //因为request对象本身域对象
        request.setAttribute("name","高圆圆");

        //简写方式:ServletRequest接口中
        //RequestDispatcher getRequestDispatcher(String var1); 获取分发对象
        request.getRequestDispatcher("/get.jsp").forward(request,response);

        System.out.println("请求转发已完成....");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}
  1. 域对象:从小到大
    pageContext :page域 (在某个jsp页面下有效)
    HttpServletRequest :request域 在一次请求有效
    HttpSession session域: 在一次会话中有效
    ServletContext applcation域 :范围最大的
    域对象

二、请求转发的原理以及重定向原理

  1. 请求转发的原理:
    web容器: 请求对象获取分发对象: RequestDispatcher里面的forward()来完成转发的请求
    请求转发
  <%--  <%
        String str = (String) request.getAttribute("name");
        //System.out.println(str);
        out.write(str);
    %>--%>

优化:${requestScope.name}

扩展:
Request&&Response
2. 重定向的原理—本质:响应头:location + 302(进一步请求)
1). 重定向:后台跳转页面的一种方式
2). 重定向原理(属于浏览器行为:需要带上下文路径)

      设置使用响应头location头
      void setHeader(String var1, String var2);
      response.setHeader("location",request.getContextPath()+"/adv.html");
      
      加上一个响应的状态:302(在一次请求)
      void setStatus(int var1);
      response.setStatus(302); 		//再次发送请求

   	  优化:
      在响应对象:ServletRseonse中
      void sendRedirect(String var1) throws IOExceptio

重定向

举例:
	<servlet>
        <servlet-name>ResponDemo1</servlet-name>
        <servlet-class>com.qf.response_03.ResponDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ResponDemo1</servlet-name>
        <url-pattern>/resDemo1</url-pattern>
    </servlet-mapping>

public class ResponDemo1 extends HttpServlet {

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

        System.out.println("开始解析...");

        response.sendRedirect(request.getContextPath()+"/adv.html");
        
        System.out.println("解析完成,准备通过浏览器再一次发送请求");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
  1. 响应头:
    定时刷新头:refresh

    有定时刷新和经过多少秒后进行页面跳转
    
举例:
	<servlet>
        <servlet-name>ResponseDemo2</servlet-name>
        <servlet-class>com.qf.response_03.ResponseDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ResponseDemo2</servlet-name>
        <url-pattern>/resDemo2</url-pattern>
    </servlet-mapping>

public class ResponseDemo2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
       // response.setHeader("refresh","3");//每3秒页面刷新

        //经过多少秒后进行页面跳转
        response.getWriter().write("注册成功!3秒后跳转主页");
        response.setHeader("refresh","3;"+request.getContextPath()+"/index.jsp");
        System.out.println("定时刷新");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doGet(request,response);
    }
}
  1. 注解的本质就是一个接口:interface
    当前接口中的方法名----在注解中 叫"注解的属性"

    jdk提供很多的内置注解

@Override: 标记某个方法是否是否重写的方法(重写的类还是重写接口的方法)
@Deprecated:标记某个方法是否是过时的
@FunctionalInterface :标记某个接口是否是函数式接口
@SuppressWarnings:压制警告 (项目部署上线的时候:代码不能出现黄色警告线问题)

内置注解中会依赖于元注解

       @Target:标记当前内置注解能够在哪个范围上使用
           public @interface Target {
                    ElementType[] value();        返回值类型:枚举数组
                           ElementType:    枚举规定的范围
                                       TYPE,       类/接口上使用
                                       FIELD,      成员变量上使用
                                       METHD       成员方法上使用
    		 }
       @Retention:规定的注解的保留阶段(三个阶段)
               public @interface Retention {

                           RetentionPolicy value();
                }
                			RetentionPolicy:枚举
                       		SOURCE, 编译阶段
                       		CLASS,  类的加载阶段
                       		RUNTIME 运行阶段   (我们自定义注解的时候:考虑运行阶段)
        @Documented:文档相关的注解

注解中的属性----接口的方法名

定义注解中的属性的类型可以分为哪些?
基本数据类型
String类型
枚举类型
注解类型
以上类型的数组方式

注意事项:
如果当前注解有且仅有一个属性的时候,
并且名称value,那么给value属性是可以省略名称value,直接返类型赋值

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {

    int age() ;  //age属性:返回值类型 基本类型
    String name() ; //name属性:返回值String类型
    MyEnum my() ; //my属性:返回值枚举类型

    String[] strs() ;//strs属性:返回值 数组
}

//抽象的人类
public abstract class Person {

    public abstract  void work() ;
}

@SuppressWarnings("all")
public class Worker extends Person {
    @Override //内置注解
    public void work() {
        System.out.println("工人都需上班...");
    }

    /*@MyAnno()
    public void eat(){

    }*/


    /*@Override   //eat()并非重写方法
    public void eat(){
        System.out.println("工人都需要吃饭");
    }*/
}

//如果某个接口中只有一个抽象方法的时候,标记这个接口为函数式接口
@FunctionalInterface
public interface Love {

     void love() ;
    // void method() ;
}

public enum MyEnum {

    LEFT,  //左
    RIGHT;//右
}

//要使用MyAnno注解
@MyAnno(age=21,name="高圆圆",my=MyEnum.LEFT,strs = {"a","b","c"})
public @interface MyAnnotation2 {

}

使用注解优化:好处将相关的属性信息定义在注解中—通过反射执行

    如何解析自定义注解呢?反射的方式完成
    
    注解作用在哪个类上,获取当前字节码文件对象
     Class clazz = Test.class ;

     解析注解
    Class类中public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
    参数为:当前注解类型的字节码文件对象
    返回值:相当于获取到了MyAnnotation注解(接口)获取子实现类对象
    MyAnnotation myAnnotation = (MyAnnotation) clazz.getAnnotation(MyAnnotation.class);
    String className = myAnnotation.className(); //调用方法(注解中的属性)
    String methodName = myAnnotation.methodName();

    通过Class.forName(className)
    Class myClazz = Class.forName(className);
    System.out.println(myClazz);		//class com.qf.annotation_05.Student
    直接创建该类实例
    Object obj = myClazz.newInstance();
	System.out.println(obj);

    myClazz获取成员方法Method
    Method method = myClazz.getMethod(methodName);
    调用
    method.invoke(obj) ;
举例:
@Target(ElementType.TYPE) //作用在类上
//保留的运行阶段
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    //定义两个 属性
    String className() ;
    String methodName() ;
}

public class Student {
    public void love(){
        System.out.println("love Java...");
    }
}

public class Worker {
    public void love(){
        System.out.println("love Java,love Life...");
    }
}

/* jdk提供的内置注解或者他们依赖的元注解 或者开发者自定义的注解都继承自己公共接口 Annotation
 */
@SuppressWarnings("all")
@MyAnnotation(className = "com.qf.annotation_05.Worker",methodName = "love")
public class Test {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {

        //创建一个学生类
        Student s = new Student() ;
        s.love();

        //工人类
        Worker w = new Worker();
        w.love();
        System.out.println("---------------------------------");

        //使用注解优化:好处将相关的属性信息定义在注解中---通过反射执行
        //如何解析自定义注解呢?反射的方式完成
        //注解作用在哪个类上,获取当前字节码文件对象
         Class clazz = Test.class ;

         //解析注解
        //Class类中public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
        //参数为:当前注解类型的字节码文件对象
        //返回值:相当于获取到了MyAnnotation注解(接口)获取子实现类对象
        MyAnnotation myAnnotation = (MyAnnotation) clazz.getAnnotation(MyAnnotation.class);
        String className = myAnnotation.className(); //调用方法(注解中的属性)
        String methodName = myAnnotation.methodName();

        //通过Class.forName(className)
        Class myClazz = Class.forName(className);
        //System.out.println(myClazz);//class com.qf.annotation_05.Student
        //直接创建该类实例
        Object obj = myClazz.newInstance();
		//System.out.println(obj);

        //myClazz获取成员方法Method
        Method method = myClazz.getMethod(methodName);
        //调用
        method.invoke(obj) ;
    }
}

三、jsp的基本使用

jsp脚本注释 是不会被解析的
而html注释:是会被解析

jsp:Java Server Page :Java服务页面(能够书写java代码的html页面)

jsp应用场景:主要通过servlet获取业务数据,在jsp做数据展示的!

jsp经历两个阶段 ----- 都有web容器来完成
1)翻译阶段
hello.jsp----->翻译成hello_jsp.java文件
2)编译阶段
hello_jsp.java---->通过jvm 进行编译hello_jsp.class

idea默认部署的web工程的所有的jsp文件:
C:\Users\zhangyang.IntelliJIdea2019.1\system\tomcat\Unnamed_EE_day36\work\Catalina\localhost\EE_day36_war_exploded\org\apache\jsp

举例:
<%--jsp的脚本

    --%>
<%
        //创建日期对象
          Date date = new Date() ;
          //后台输出
    System.out.println(date); //日期格式
        //向浏览器打印内容
        out.println(date);
%>
CDD数据库文件制作(二)——DTC配置 1.DTC库 2.新建DTC DTC相关介绍:https://blog.youkuaiyun.com/LOVE135149/article/details/122565443 ① 选择DTC数据库 ② 点击新建DTC ③ DTC参数编辑 3.将DTC库中的DTC加载到Variant中 找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy … Reference from Available DTCs…,即可将DTC库中的故障码加载至Variant中。 虽然选择Co 阅读详情

相关推荐

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

简单了解Servlet中的请求转发

一.请求转发的原理 转发即为请求处理器(ServletA)将请求交给另一个处理器处理(ServletB),再讲结果返回的过程。 二.请求转发的过程 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在...

cdfdddcs的博客 1530

doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法

摘要:客户Doris数据库报错"ERROR 1203 (42000): Reach limit of connections"的解决过程。发现AI提供的解决方案存在错误:1)查询命令应为SHOW FRONTEND CONFIG而非show variables;2)参数名称应为qe_max_connection而非max_connections。正确解决步骤:1)用admin账户登录查看连接数限制和当前连接数;2)通过SHOW PROPERTY命令检查用户资源限制;3)针对不同情况修改参数

Brent的专栏 1762

Servlet中的几个关键对象

ServletContext全局作用域对象:当http服务器开启时会自动创建一个全局作用域对象,相当于一个map集合。一个web服务只有一个全局作用域对象。http服务器关闭之后会自动销毁全局作用域对象。全局作用域对象贯穿http服务器的整个生命周期。 Session会话作用域对象:网站会为每一个用户(浏览器)创建一个Session对象。Session底层数据结构是Map集合。会话作用域对象相当于用户在网站中的私人保险箱。 Cookie:当一个用户(浏览器)访问一个网站时,网站会在响应的时候在响应头上添

zjs1201的博客 880

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8069

初识YUV,实战NV21格式数据转换为Bitmap

初识YUV,并使用YUV数据生成Bitmap图像一、初识YUV二、采样方式2.1、YUV 4:4:42.2、YUV 4:2:22.2、YUV 4:2:2 一、初识YUV 说到YUV我们就必须先从RGB说起了,如下图所示,请各位把每个色块当成一个像素点。通常一个像素点由RGB(Alpha我们先不考虑)三原色组成。 如下图中第一个像素点,其RGB值分别为(236,102,93),而这三个值就组成了我们看到的 红色 。 然而上图中除了RGB值外,我还标出了每个像素点的YUV的值,YUV的值是怎么来的呢?直接给公

乐翁龙 7127

IDEA spring boot 项目启动报异常:java.lang.ClassNotFoundException: javax.servlet.ServletContext 的解决办法!

异常详情: 这是我遇到的异常控制台截图,如下: 异常解释: 在Intellij IDEA中默认所有 scope 为 provided 的依赖不会被加入到 classpath; 所以在编译器启动 spring boot 项目时,会由于某些依赖加载不到而报 javax.servlet.ServletContext 异常。 解决办法: 方法一、 修改【IDEA】- Edit Configurations 的配置项: 步骤1:菜单栏 -> Run -> Edit Configuration.

cnn489282795的博客 2966

【全网最新】使用 1panel面板 部署若依系统( springboot 和 vue)项目

打开前端项目的vue.config.js文件,检查devServer下的proxy代理部分,然后将下面这个端口修改为你要在打包后访问的端口,即使用nginx代理前的接口。这个端口默认是80端口,这里把其修改为不会冲突的8010端口,后台接口的地址配置为9080,不过感觉这里设置的8010和9080可能没有用,因为部署前端静态页面是,也配置了一次网页的外部接口和api的接口,后期有空了再验证。打开右侧的Maven,点击:生存期->package,然后点击运行,等待打包成功,包在如图所示的文件夹中。

老薛的专栏 1756

ServletConfig和ServletContext的简单使用

ServletConfig对象 ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多) 在Servlet的配置文件中,可以使用一个或多个init-param>标签为servlet配置一些初始化参数。当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对

琦彦 1万+

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

文章摘要:零件平均测试(PAT)是半导体制造中基于统计学的质量控制方法,分为静态和动态两种类型。静态PAT通过预先设定的固定限值(每6-8批次更新)筛选异常芯片,计算采用稳健平均值和四分位间距。动态PAT则根据实时数据调整限值,能更精确识别异常而不误判合格芯片。两种方法均采用"均值±6倍标准差"的计算公式,但动态PAT具有更好的适应性和准确性。该方法通过统计分析提高了芯片产品的质量和可靠性。

歌颂苦难的行为是无耻的; 1191

静态时序分析—伪路径(set_false_path)

set_false_path应用场景

m0_61544122的博客 2万+

谈谈getInitParameter(String name)

对于jsp中的application和config对象,都有getInitParameter(String name)这个方法,那他们有什么区别了!对于application中的,他是获得整个应用的初始化参数,参数定义在中.对于config中的,他是获得某个servlet的初始化参数,参数定义在中的中.对于el表达式中的initParam,他对应的是application中的....

ynw520的专栏 751

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java ajax跳转页面_机械狗的Java之路——第四篇

"Why it still can't run successfully ?!"这么快就到第四篇日志了......送上知识清单:Day 317月7日,第31天课程内容:1. Servlet总结:发展史及生命周期(创建,工作,销毁),url-pattern配置(完全路径,目录,扩展名)2. HTTP协议:作用,特点(先请求后响应),组成(请求行头体,响应行头体),服务器缓存清理3. XML...

weixin_42322782的博客 342

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java ajax window.location.href 不跳转_机械狗的Java之路——第四篇

"Why it still can't run successfully ?!"这么快就到第四篇日志了......送上知识清单:Day 317月7日,第31天课程内容:1. Servlet总结:发展史及生命周期(创建,工作,销毁),url-pattern配置(完全路径,目录,扩展名)2. HTTP协议:作用,特点(先请求后响应),组成(请求行头体,响应行头体),服务器缓存清理3. XML...

weixin_29007135的博客 215

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

springmvc

三层架构表现层: 接收请求响应用户 servlet – springMVC业务层:处理业务,事务 自己写业务层 – spring 管理业务层持久层: 对数据库进行增删改查操作 jdbc – dbutils --jdbcTemplate – mybatis – spring dataMVC设计模式M:model 模型:封装数据 广义:业务模型层 = dao + service + domainV:view 视图:展示数据 广义:能展示数据都是视图:jsp, html ,pdf ,f

梦想是很难很难的,所以先勇敢一点 575

Spring Boot 学习笔记

spring官网:https://spring.io/spring的生态:https://spring.io/projects/spring-boot能快速创建生产级别的Spring应用翻译过来即是:总结:springboot 是整合 spring 技术栈的一站式框架,springboot 是简化 spring 技术栈的快速开发的脚手架当然 sprinboot 也有一些缺点:版本迭代快,需要时刻关注变化。封装太深,内部原理复杂,不容易精通。简单来说一旦我们将大型应用拆分成各个小的微服务之后,必然会产生分布式

持续进步! 1567

Servlet的配置@传递初始化的参数值

传递初始化的参数值 (一) 涉及到生命周期方法的 init(ServletConfig) 其中的ServletConfig表示配置对象,可以获取配置信息 String getInitParameter(String var1); 根据 参数名 获取配置的对应的参数值 返回值是String 需要自己处理类型 Enumeration getInitParameterNames(); 返回配置的所有参数名的 迭代器 。代码就可以遍历到所有参数名 (二) 涉及到web.xml中的子标签

weixin_47371330的博客 389

servlet的两个重要对象:servletConfig和servletContext

servlet 是一个单实例多线程的普通的java类。         ——校验多线程的安全问题的标准 Servlet 中的域对象: 对象 类型 context PageContext(jsp中的域对象:仅限于当前jsp) request HttpServletRequest session H...

近未来 1086

在使用spring时出现javax/servlet/ServletContext错误

错误显示 java.lang.NoClassDefFoundError: javax/servlet/ServletContext at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at ...

qq_45647792的博客 3224

Servlet请求转发、域对象

1、请求转发:是指定服务器中的某一个资源(Servlet或JSP)在处理请求的过程中,将请求转发给另外的资源(比如是一个Servlet/jsp/html等),让其他资源来处理请求。 实现请求转发的代码: Request.getRequestDispatcher(“所转发到的资源路径”).forward(request,response); 请求转发的特点: (1)转发前后地址栏地址不会发...

solo的博客 715

Servlet 请求转发

目录 请求转发 RequestDispatcher 接口 请求转发的工作原理 请求转发的特点 request 域对象 示例 Web 应用在处理客户端的请求时,经常需要多个 Web 资源共同协作才能生成响应结果。但由于 Serlvet 对象无法直接调用其他 Servlet 的 service() 方法,所以 Servlet 规范提供了 2 种解决方案: 请求转发 请求包含(了解即可) 下面我们主要对请求转发进行介绍。 请求转发 请求转发属于服务器行为。容器接收请求后,Servlet 会先

swadian2008的博客 2840

Java学习日志Day34_框架标签_常用css选择器_dbutils

一、框架标签 框架标签使用frame表示 一个frame就包含一个html页面 格式: <frameset rows="20%,*,10%"> //横行比例:20% : 70% : 10% <frame src="header.html"/> //横行页面——头页面 <frameset cols="15%,*"> //竖行比例:15% : 75%

igfff的博客 1221

Java学习日志Day3_逻辑双与与逻辑双或、位运算符、三元运算符(三目)、流程控制语句(顺序结构语句和选择结构语句)

一、扩展的逻辑运算符(逻辑双与、逻辑双或) 逻辑双与&&和逻辑单与&的区别: ①. 共同点:当多个条件,有一个不满足,就不成立!并列关系:有false,则false。 ②. 区别: 逻辑单与&:无论符号左边的表达式是true还是false,右边都需要执行! 逻辑双与&&: 具有短路效果!如果符号左边的表达式为false,则右边的表达式不会执行了! 总结:双与&&比单与&的逻辑性更强一些,开发经常使用逻辑双&& ! 逻

igfff的博客 963

Java学习日志Day5_百钱买百鸡、方法

一、实战:百钱买百鸡 example: 5文钱可以买1只公鸡, 3 文钱可以买一只母鸡, 1文钱可以买3 只小鸡。 用100 文钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只? /* 分析: 当前公鸡,母鸡,小鸡三个变量:分别使用x,y,z x,y,z 三个未知数:使用传统比较麻烦 公鸡的数量: 5文钱一只(100元钱----公鸡) :20 母鸡的数量: 3文钱一只(100元素----母鸡) :33 小鸡的数量: z = 100 -x - y ; for循环遍历:将

igfff的博客 611

Java学习日志Day12_抽象类_方法重写_接口_接口、抽象类、多态综合问题

一、抽象类注意事项 二、方法重写注意事项 三、接口 四、接口中的成员特点 五、类与类,类与接口,接口与接口的区别 六、抽象类与接口区别 七、综合问题 八、行参与返回值问题的研究

igfff的博客 466

Java学习日志Day39_javascript的使用

一、js的引入 js的引入举例: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>引入javavscript</title> <!-- <script type="text/jscript"></script> <script type="text/text/javascript"></scr

igfff的博客 427
上一篇: Java学习日志Day35_CSS中伪类选择器_常见CSS的样式属性_盒子模型_Servlet
下一篇: Java学习日志Day37_Jsp使用_jsp中核心标签库中常见的标签_jsp+servlet最佳实践
igfff
博客等级 码龄6年 2粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

igfff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值