SpringBoot3

简介: SpringBoot3

需要先掌握IOC和Servlet

ioc:就是类的继承,接口一些东西,就是java基础里的类的继承那些

Servlet:电脑先给web服务器Tomcat(就是小老虎图标) 传一个http请求这个Tomcat里面有个Servlet:容器,这个容器初始化servlet将你的HTTP请求转化为:requst对象,转发requst对象对requst对象相应的servlet进行处理,处理成功后会返回一个response,然后tomcat把这个response转化成http相应再发回电脑

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类

Servlet是Java的4个jar包里的一堆接口

Serclet接口,SercletRequest接口,SercletRespose接口,SercletContext接口,SercletConf SercletDispatcher接口,Filter接口,GenericServlet抽象类来实现Serclet接口

它是所有Servlet类必须直接或者间接实现的一个接口

1.需要现有Servlet的jar包需要小老虎,如果没有的话按照网上教程整一个,然后再导入小老虎再把需要的jar包弄出来,然后就整个类继承Servlet的这个接口,在实现里面的方法

效果如下

package lianxi;
import javax.servlet.*;
import java.io.IOException;
public class deom implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("正在被初始化");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //这个是专门为客户提供响应的方法,
        System.out.println("Service正在提供服务");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("Service正在呗销毁");
    }
}


ServletRequset接口

Servlet容器对于接受到的每一个Http请求,都会创建一个ServletRequest对象,并把这个对象传递给Servlet的Sevice( )方法。其中,ServletRequest对象内封装了关于这个请求的许多详细信息。

Servlet 的其它两个方法

getServletInfo( ),这个方法会返回Servlet的一段描述,可以返回一段字符串。
getServletConfig( ),这个方法会返回由Servlet容器传给init( )方法的ServletConfig对象
int getContentLength();//返回请求主体的字节数
String getContentType();//返回主体的MIME类型
String getParameter(String var1);//返回请求参数的值
//getParameter是在ServletRequest中最常用的方法,可用于获取查询字符串的值。


ServletResponse接口

ServletResponse接口表示一个Servlet响应,在调用Servlet的Service( )方法前,Servlet容器会先创建一个ServletResponse对象,并把它作为第二个参数传给Service( )方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

public interface ServletResponse {
String getCharacterEncoding();
String getContentType();
//向浏览器发送一个二进制数据
ServletOutputStream getOutputStream() throws IOException;
//*它返回了一个可以向客户端发送文本的的Java.io.PrintWriter对象*
PrintWriter getWriter() throws IOException;
void setCharacterEncoding(String var1);
void setContentLength(int var1);
//在发送任何HTML之前,这个方法,设置响应的内容类型
void setContentType(String var1);
void setBufferSize(int var1);
int getBufferSize();
void flushBuffer() throws IOException;
void resetBuffer();
boolean isCommitted();
void reset();
void setLocale(Locale var1);
Locale getLocale();
}


ServletConfig接口

当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init( )方式传入一个ServletConfig对象。  
public class deom implements ServletConfig {
    @Override
    public String getServletName() {
        return null;//获得Servlet在web.xml中配置的name值
    }
    @Override
    public ServletContext getServletContext() {
        return null;
    }
    @Override
    public String getInitParameter(String s) {
        return null; //获得Serclet初始化参数的
    }
    @Override
    public Enumeration<String> getInitParameterNames() {
        return null;//获得所有Servlet的初始化参数的名称
    }
}


ServletContext对象

ServletContext对象表示Servlet应用程序。每个Web应用程序都只有一个ServletContext对象。在将一个应用程序同时部署到多个容器的分布式环境中,每台Java虚拟机上的Web应用都会有一个ServletContext对象。

通过在ServletConfig中调用getServletContext方法,也可以获得ServletContext对象。

那么为什么要存在一个ServletContext对象呢?存在肯定是有它的道理,因为有了ServletContext对象,就可以共享从应用程序中的所有资料处访问到的信息,并且可以动态注册Web对象。前者将对象保存在ServletContext中的一个内部Map中。保存在ServletContext中的对象被称作属性。

GenericServlet抽象类


Servlet一直是通过实现Servlet接口来编写的,但是,使用这种方法,则必须要实现Servlet接口中定义的所有的方法,实现Servlet是比较麻烦的。

所以出现了GenericServlet抽象类的出现很好的解决了这个问题。本着尽可能使代码简洁的原则,GenericServlet实现了Servlet和ServletConfig接口,

public abstract class deom implements Servlet,ServletConfig, Serializable {
//它里面提供了所有默认方法,就是不用挨个继承,想用哪个用哪个
private static final String LSTRING_FILE = "javax,servlet.LocalStrings";
private  static ResourceBundle lStrings = ResourceBundle.getBundle("javax,servlet.LocalStrings");
private transient ServletConfig config;
public void destroy(){}
public String getInitParameter(String name){
    ServletConfig sc = this.getServletConfig();
    if (sc == null){
        throw new IllegalStateException(lStrings.getString("err.servllet_config_not_initialized"));
    }else {return sc.getInitParameter(name);}
}
public Enumeration<String> getInitParameterNames(){
    ServletConfig sc = this.getServletConfig();
    if (sc == null){
        throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }else {return sc.getInitParameterNames();}
}
public ServletConfig getServletConfig(){
    return this.config;
}
public ServletContext getServletContext(){
    ServletConfig sc = this.getServletConfig();
    if (sc == null){
        throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    } else { return sc.getServletContext();}
}
public String getServletInfo(){
    return "";
}
public void init(ServletConfig config)throws ServletException {
    this.config = config;
    this.init();
}
public void init() throws ServletException{}
public void log(String msg) {
    this.getServletContext().log(this.getServletName() + ":" + msg);
}
public void log(String massage,Throwable t) {
    this.getServletContext().log(this.getServletName() + ":" + massage,t);
}
public abstract void service(ServletRequest var1,ServletResponse var2) throws ServletException,IOException;
public String getServletName(){
    ServletConfig sc = this.getServletConfig();
    if (sc == null){
        throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }else {
        return sc.getServletName();
    }
}
}


HttpServletRequest接口

HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口,并添加了几个方法。

String getContextPath();//返回请求上下文的请求URI部分

Cookie[] getCookies();//返回一个cookie对象数组

String getHeader(String var1);//返回指定HTTP标题的值

String getMethod();//返回生成这个请求HTTP的方法名称

String getQueryString();//返回请求URL中的查询字符串

HttpSession getSession();//返回与这个请求相关的会话对象

HttpServletRequest内封装的请求


通过request获得请求行,请求头,请求体,

//获得请求行

/获得请求行
假设查询字符串为:username=zhangsan&password=123
获得客户端的请求方式:String getMethod()
获得请求的资源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
————————————————————————————————————————————————
//获得请求头
long getDateHeader(String name)
String getHeader(String name)
Enumeration getHeaderNames()
Enumeration getHeaders(String name)
int getIntHeader(String name)
————————————————————————————————————————————————
//获得请求体
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username      [zhangsan]
password        [123]
hobby       [football,basketball]                                       
以上面参数为例,通过一下方法获得请求参数:
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()
————————————————————————————————————————————————


Request和Response乱码问题的解决方法

在service中使用的编码解码方式默认为:ISO-8859-1编码,但此编码并不支持中文,因此会出现乱码问题,所以我们需要手动修改编码方式为UTF-8编码



相关文章
|
12月前
|
SQL Java 数据库连接
|
12月前
|
存储 缓存 安全
89.【SpringBoot-02】(六)
89.【SpringBoot-02】
49 0
|
2月前
|
Java 数据库 Spring
springBoot 整合 hikari
springBoot 整合 hikari
78 6
|
12月前
|
XML Java 数据格式
87.【SpringBoot-01】(二)
87.【SpringBoot-01】
47 0
|
12月前
|
存储 监控 Dubbo
91.【SpringBoot-03】(三)
91.【SpringBoot-03】
68 0
|
12月前
|
负载均衡 Java 应用服务中间件
87.【SpringBoot-01】(一)
87.【SpringBoot-01】
78 0
|
12月前
|
XML Java 数据格式
87.【SpringBoot-01】(五)
87.【SpringBoot-01】
62 0
|
12月前
|
JSON JavaScript Java
87.【SpringBoot-01】(七)
87.【SpringBoot-01】
50 0
|
前端开发 Java 测试技术
SpringBoot相关知识
SpringBoot相关知识
43 0
|
druid Java 关系型数据库
SpringBoot | 整合
SpringBoot | 整合
109 0