【J2EE笔记】2万字!我当时学习时做的笔记

0829

.java->.class->jvm->native code

高可靠高性能高并发

OSI会话模型

TLV接口

TLV(Type-Length-Value)是一种数据格式,通常用于数据通信和协议中。TLV具有以下三个主要部分:

  • Type(类型):表示数据的类型。
  • Length(长度):表示数据的长度。
  • Value(值):实际的数据。
    TLV格式常常被用于嵌入式系统中,其中,Type字段标识了数据的性质,Length字段标识了数据的长度,Value字段则是实际的数据。
    此外,某些情况下,TLV也用于网络协议的传输,比如DHCP协议的TLV就包括选项和值的定义,以及它们的具体内容。
    需要注意的是,具体的TLV实现可能会因应用场景和需求而有所不同,因此具体的实现细节可能需要参考特定的文档或规范。

0831

线程不可能无限创建,受硬件和其他因素的影响

ThreadPool 线程池,创建公共资源。

new 运算慢,服务启动慢

set是唯一性集合

list是顺序性集合

老师给的java计算机代码示例讲解

继承描述"是"的关系

聚合描述"拥有"的关系

延迟初始化:不必要在构造函数中设置初值,此时还没有实例对象,可以在set方法中初始化

线程创建第一个语句wait()

通过继承Thread,并实现run方法,创建线程实例开始一个新线程。

然后notify()是唤醒wait()的方法。

wait和notify是Object的方法

synchronized同步

如果同步访问同一数据

对共享数据的保护

用锁机制

并发:事件的发生没有因果关系

java 复制代码
Javax.servelet.http.*
public class HelloServelet extend HttpServelet(){
    init();
    还有一些其他的东西
//getServletInfo();很蠢
    sedtory();
}

0905

命名规范

BEA公司

TLV结构

TLV(Type-Length-Value)是一种常用的用于通信的结构体格式。TLV由三个部分组成:

Type(类型):表示数据的类型。

Length(长度):表示数据的长度。

Value(值):即数据本身。

这种结构的特点是,通过类型和长度可以确定值部分的数据结构,使得数据通信变得相对简单和标准化。同时,由于TLV结构具有嵌套性,可以用来包装协议的实现。

MIME类型

浏览器传输

Headers

回车换行*2

Content

tomcat

lib放库 。jar

webapp放web应用

java编译

javac -d . classpath c:\javaee\xxx.jar HelloServlet.java

-classpath <目录和 zip/jar 文件的类搜索路径>

-d

--describe-module <模块名称>

所有编译好的类放在classes文件夹下

-d指示编译后文件的放置位置

lib文件夹

URL=协议-主机地址-文件

子类不能抛出父类未声明的异常

NullPointerException 是运行时异常,可以通过编程的手段处理,是不会被检查,不被上面的约束限制。

0907

URL重写

Session

Cookie

30 单位分钟(维持会话时间默认单位)

*HTTPSESSION

内存中的java必须序列化,不然存不进去
Srtvlet
HttpServelt
ServletRequest
ServeltResponse
HttpServletRequest
HttpServletResponse
ServeltConfig
ServeltContext
getServlrtConfig().getServletContext
getServletContext()
RequestDispatcher

**forward(转发)**转发后不转发了
include转发后回来可以继续访问

RequestDispatcher的forward和include

forward重点是产生两个不同的request,include一直只有一个request

log4j

    void forward(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    void include(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

0919

java注释有三种注释

  1. 单行注释

  2. 多行注释

  3. javadoc风格的注释

    /**
    上面有两个星号
    @since 1.2
    @version
    @author

    */

Annotation注解

@Override - 重载方法

@Deprecated - 已过时

public @interface MyAnnotation {
    int Value();//属性,要求加括号,但是它不是函数
    // 任何注解必须有Value属性
}

考试:

java.lang.reflect.Method

java.land.Class

java.lang.ClassLoader

Servlet

Jsp,JspPage

Tag

Filter

java 复制代码
        Class clazz = Student.class;
获取类
迭代会获取到类中所有public的方法
//        for (Method method : clazz.getMethods()) {
            System.out.println(method.toString());
//            System.out.println(method.getName());
//        }
也可获取某一个特定的方法,第一个参数是方法名,第二个参数是参数
        Method getName = clazz.getMethod("getName",null);
//        System.out.println(getName.toString());
        System.out.println(getName.getName());
        invoke执行了
        System.out.println(getName.invoke(null, null));

getServletContext().log()

Enumeration(过时)

Iterator

区别就是方法名

0921

默认情况下,只有来自客户端的请求会被过滤器拦截

dispatcher这个属性进行设置,不止客户端,换可以有转发等

REQUESTER

PORWORD

INCLUDE

@WebFilter

多Filtter顺序问题:

按从上到下顺序

url-Pattern 》 servlet-name

listener

事件处理模型

java.util.EventObject

protected source : Object

  • getSource() :Object

edm

委托模型-事件处理模型

将事件交给听众

ServletContentListener

java 复制代码
EventListener是空接口
public interface ServletContextListener extends EventListener {
    void contextInitialized(ServletContextEvent var1);

    void contextDestroyed(ServletContextEvent var1);
}

ServletContextEvent

java 复制代码
本质还是EventObject的那一套,观察者模式
public class ServletContextEvent extends EventObject {
    private static final long serialVersionUID = -7501701636134222423L;

    public ServletContextEvent(ServletContext source) {
        super(source);
    }

    public ServletContext getServletContext() {
        return (ServletContext)super.getSource();
    }
}

sec.setAttribute();

PageContext

JavaWeb一共四大域对象,Servlet可以用request,response,application。在JSP中可以用request,response,application,pagecontext。详细链接

ServletRequest

HttpSession
* sessionCreated()

在HttpSessionListener中找到了这个方法

java 复制代码
public interface HttpSessionListener extends EventListener {
    void sessionCreated(HttpSessionEvent var1);
    void sessionDestroyed(HttpSessionEvent var1);
}

ServletContext

属性监听器都是有 添加 , 移除, 替代的三个方法。

ServletContextAttributeListener

java 复制代码
public interface ServletContextAttributeListener extends EventListener {
    void attributeAdded(ServletContextAttributeEvent var1);
    void attributeRemoved(ServletContextAttributeEvent var1);
    void attributeReplaced(ServletContextAttributeEvent var1);
}

HttpSessionAttributeListener

java 复制代码
public interface HttpSessionAttributeListener extends EventListener {
    void attributeAdded(HttpSessionBindingEvent var1);
    void attributeRemoved(HttpSessionBindingEvent var1);
    void attributeReplaced(HttpSessionBindingEvent var1);
}

HttpBoundEvent

valueBound()

valueUnbound()

public interface HttpSessionBindingListener extends EventListener {
    default void valueBound(HttpSessionBindingEvent event) {
    }
    default void valueUnbound(HttpSessionBindingEvent event) {
    }
}

set

remove

注意:getValue()获取的是过去的值

实现ServletContextListener接口的两个方法,然后在web.xml中配置,监听器就可以正常运行了。

xml 复制代码
<web-app>
    <listener>
            <listener-class>
    </>
</>

framework-框架

快速开发web应用的框架

模型是视图的听众

------姜老师

0926

四个作用域

scope="application/session/request等"

application不适合网络,只适合一个人

request每次请求创建一个新的
参考

property="*"适配所有进行属性设置,匹配字段名,有则设置

MVC2

降低粒度,进行拆分

Controller , DIspatch

Servlet

public void service(ServletRequest req,ServletResponse res) throws ServletException ,IOExceptoin

Struts

Action

ActionForm

ActionForword

name= ,path=

URI进行转发,只是路由

0928

Action is an adapter

dispath

uri,path

uri:protocol,host,path

ActionForward execute(ActionMapping maipping,ActoinForm,HttpServletRequest,HttpServletResponse)

如何两个不同进程之间进行通信?

共享内存,socket

DispatchACtoin

MappingDispatchAction

path转发,parameter类名

LookupDispatchAction

i18n问题

Struts2

10月10日

戈培尔效应

谎言重复1000遍成为真理

Iaas,PaaS,SaaS

Spring 是一个框架IOC框架 控制反转

容器负责建立,以前是由A控制B(A创建B),现在将A和B都交给容器。

Servlet s = (Servlet)Beans.instantiate(getClass().getClassLoader(),servletClass())

动态实例化 在运行时创建对象

new.com.abc.servlet.HelloServlet()

xml称为元语言 创建语言的语言 meta

Java反编译

代码混淆

Google avaiator

@autowired

1012

download struts framework

spring framework

/WEB-INF/lib

deploy front controller

web.xml

servlet, servlet-mapping

*.do

    ```
    <selvlet>
        <servlet-name>
        <servlet-class>
        <init-param>
             <param-name>config
             <param-value>/WEB-INF/struts/s.xml
    ```

struts2前端控制器使用filter,不使用servlet

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

spring 创建组件 根据id控制

ServletContextListener

contextInitialized等两个方法

<context-param>
    <param-name>
    <>param-value

<listener>
getServletConfig().getInitParameter("") : ServletConfig
getInitParamter() : servletContext

<beans>

这是在xml中启用注解的代码
<mvc:annotation-driven/>

Action

所有参数都放在一个Map集合中

Controller处理函数返回数据

  1. ModelAndView
  2. Model
  3. ModelMap
  4. Map
  5. view
  6. String
  7. void
  8. @ResponseBody Object

注意jsp视图技术

配置时会有前缀和后缀

只需返回文件名

Spring View 组件

ViewResolver

Ordered接口

时序数据库

jms

1017

http component

tomcat in

JMS java消息服务

public class Action{
    ActionMapping mapping
    ActionForm form.
    HttpServeltRequest 
    HttpServletResponse 
}

ActionForward execute(ActionMapping maipping,ActoinForm,HttpServletRequest,HttpServletResponse)
  • 111

    @TRANScational(propagation)
    REQUEST
    NEVER

参考

Spring不支持分布式事务,需要第三方支持

AromikTransactionsEssentials

所有电子邮件的父类

MimeMessage

Interface Message

消息服务器软件

kafks

Interface Destination

消息目的地

最后

jsp Implicit Object JSP隐式对象9个

JSPWriter out
PageContext pa
ServletContext
参考

jsp也可以部署

jspEL隐含对象

大多是Map集合,除了一个------pageContext

<%-- 注释 --%>

<>

Servlet Annoation

SpringControl相关注解

返回值

DispatchAction

lookupDispatchAction

Fin

  1. ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); /要知道下面这条语句和上面的语句,二者有何不同?ApplicationContext ctx = new FileSystemXmlApplicationContext("beans.xml");

从类的上下文加载,一般在类的文件中,常常是不变的,故而在开发和测试环境中使用。

从文件系统中进行加载上下文,不受约束,可以改变xml文件,适用于生产环境。

附上官方的解释

ClassPathXmlApplicationContext: Useful for test harnesses as well as for application contexts embedded within JARs.

对测试框架和jars内的应用程序上下文有用

FileSystemXmlApplicationContext: Useful for test harnesses as well as for standalone environments.

对测试框架和标准环境有用
关于test harnesses的翻译与理解:(测试框架) http://www.51testing.com/html/51/10851-77900.html#:\~:text=Test harnesses should include the following capabilities%3A 1,results. 4 A standardized form of failure reporting.

  1. 如何获取ApplicationContext对象?
    有一个接口Interface ApplicationContextAware
    有一个方法void setApplicationContext(ApplicationContext applicationContext)
    用于设置当前运行的对象的上下文

有一个类WebApplicationContextUtils

可以使用这个方法public static WebApplicationContext getWebApplicationContext(ServletContext sc)

获取当前根web应用程序上下文

但是这个并不是最好的方法,一般也不用,因为有更好更快捷的。

对于java程序,可以使用一个全局的静态方法来获取ApplicationContext。

一定记住默认的bean的scope属性是singleton。只有一个bean对象实例。

  1. scope的值可以是singleton, prototype, request, session, application, 以及websocket。着重分析singleton和prototype的区别
  • singleton :【默认值】在spring IOC容器中仅存在一个bean实例,单例模式。适用于无状态的bean,如 工具类和服务类
  • prototype :【原型】每次从容器中获取bean时都返回一个新的bean。即getBean()=new XXXBean()
  • request : 每次HTTP请求都会创建一个bean,该作用域只适用于WebApplicationContext
  • session :在HTTP会话中创建一个bean,用于维持请求的状态,如用户会话。
  • application :在整个web应用中创建一个全局的bean,用于存储全局配置数据等
  • websocket : 在每个websocket中创建一个bean实例,用于通信。
  1. 如何在xml文件中声明使用注解的形式
    在beans中间加上如下即可
    这个之前我写的是错的
    context:annotation-config/
    mvc:annotation-driven/
  2. 组件类可以通过哪些注解声明?
    @Controller @Service @Component @Repository

资料复习

  1. 异常分为几类,简单讲解一下。
    java异常分为 运行时异常 和 编译时异常

运行时异常(RunTimeException)一般是程序员自己代码的问题,常见的有空指针异常(NullPointerException),除零产生的异常等。

编译时异常(CheckedException)是在编译阶段产生的异常,如关键字错误,括号不匹配等。

  1. Servlet启动都经过哪些步骤?

    Servlet是javaee的服务模块,通常其生命周期如下:

    无参构造函数-》init初始化-》service调用服务-》destory销毁

  2. https://www.bilibili.com/video/BV1J34y1u7xw/?spm_id_from=333.1007.tianma.1-1-1.click这个网址的组成成分。

    URI地址一般是由三部分构成:协议,域名,路径

    对于上面的网址

    https:代表使用https作为传输协议

    www.bilibili.com:是域名

    /video/BV1J34y1u7xw:是路径,在服务器中文件所在的位置(当然可能是虚假的)

?后面是向后端请求时的参数,以键值对的形式存在。

  1. 我们使用ServletResponse.setContextType(String)时可以有什么类型呢?

    text/html text/plain text/xml
    text/json application/json application/octet-stream
    charset=utf-8

  1. 重定向(response.sendRedirect)和转发(RequestDispatcher.forword)的区别
    重定向和转发都是跳转,但是转发是内部转发,而且可以携带参数,重定向则没限制,你可以跳转到任意的页面。
    而且重定向相当于页面重新对重定向的页面发起了请求。

自己写的,觉得挺好舍不得删:重定向是一个新的开始,我的第一个请求返回响应,将页面重新定位到我指导的位置,在这期间,页面发送了两次request请求,一次是普通的http请求,一次是根据重定向的普通http请求,在用户看来,服务端发生重定向时我网址栏会变化的,response。sendRedirect

转发则与其有这不同,我将接收到的请求进行转发,意味着这是由该次请求进行的,并不由客户端主导,只有一个req请求,在这次转发中是共享客户端携带的参数的,或者说是可以进行参数的传递的,转发者一般是对前端所传数据的处理者,被准发者才是真正的执行者。RequestDispatcher.forword(req,resp)

  1. servlet的5个函数,将其默写出来 hh无论何时我都会觉得这个很重要啊,后面有重复的
    init
    service
    destory
    getServletInfo
    getServletConfig

    void init(ServletConfig var1) throws ServletException

    void service(ServletRequest var1,ServletResponse var2) throws ServletException,java.io.IOException
    void destory()
    String getServletInfo()
    ServletConfig getServletConfig()

  2. Servlet的xml配置基本结构
    省略结束符号

    <xml version="1.0"> <web-app> <servlet> <servlet-name> hello <servlet-class> com.example.HelloServlet <servlet-mapping> <servlet-name> hello <url-pattern> /hello/a.html
     <filter>
         <filter-name>test</filter-name>
         <filter-class>com.example.j2eetask5.filter.FilterChain</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>test</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
     
     <listener>
         <listener-class>com.example.j2eetask5.ListenerTest</listener-class>
     </listener>
    
  3. HTTP的七种访问方法

    GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE

  4. ServletContext 中getContextPathgetRealPath的区别

    getContextPath获取到相对路径,并且可以使用虚拟路径。

    getRealPath获取到绝对路径,相对于盘符的路径。(绝对路径)

  5. dis ?我想干什么

  6. 我已经洞悉了JSP9大内置对象的实质!

    javax.servlet.jsp.PageContext这个类中

java 复制代码
public static final String PAGE = "javax.servlet.jsp.jspPage";
public static final String PAGECONTEXT = "javax.servlet.jsp.jspPageContext";
public static final String REQUEST = "javax.servlet.jsp.jspRequest";
public static final String RESPONSE = "javax.servlet.jsp.jspResponse";
public static final String CONFIG = "javax.servlet.jsp.jspConfig";
public static final String SESSION = "javax.servlet.jsp.jspSession";
public static final String OUT = "javax.servlet.jsp.jspOut";
public static final String APPLICATION = "javax.servlet.jsp.jspApplication";
public static final String EXCEPTION = "javax.servlet.jsp.jspException";
  1. Servlet的五个函数

    public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();
    
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    
    String getServletInfo();
    
    void destroy();
    

    }

参考链接

  1. ServletConfig的函数

    public interface ServletConfig {
    String getServletName();

    ServletContext getServletContext();
    
    String getInitParameter(String var1);
    
    Enumeration<String> getInitParameterNames();
    

    }

  2. Java四大域对象
    page
    request
    response
    application
    参考
    参考
    PageContext

JavaWeb一共四大域对象,Servlet可以用request,response,application。在JSP中可以用request,response,application,pagecontext。详细链接

  1. Controller处理函数返回数据
  • ModelAndView
  • Model
  • ModelMap
  • Map
  • view
  • String
  • void
  • @ResponseBody Object
  1. 注意jsp视图技术

    配置时会有前缀和后缀

    只需返回文件名

  2. filter接口和FilterChain接口

java 复制代码
public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}
java 复制代码
public interface FilterChain {
    void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}
  1. Spring Controller的8个返回数据
  • void 返回void可以直接进行重定向,如果没有重定向的话,那么-
  • String -可以返回String,这个String是视图的逻辑名字,通过视图解析器解析为对应的物理视图地址。返回视图。
  • Module
  • ModuleAndView
  • View
  • ModuleMap
  • Map
  • @Response Object 返回JSON
  1. javax.servlet.annotation的内容

重点先看WEBServlet,WEBListener,WEBFilter吧

填空题主要部分

竟然都是Struts的内容,且与分发有关,过时的技术也有学习的必要。

毕竟现在流行的技术框架或多或少的都借鉴过前人的思路。

现在也许看不出什么,等以后就会突然茅塞顿开。

DIspatchAction

分发有个函数

public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response   
)throws Exception

通常来说我们如果要实现简单的CRUD,可以对每一个操作都继承DispatchAction,但是会产生四个类,看起来非常不简洁美观。

我们可以将这些操作组合到一个类中,通过一些标识去决定使用什么方法。

我们这里使用Struts的配置函数,为每一个操作提供唯一标识。

在前端配置的唯一标识通过getParameter(mapping,form,request,response)``getMethodName(mapping,form,request,response,parameter)获取(先获取键,再获取值,在配置中是键值对的形式。

获取到后就可以根据反射机制来invoke执行一下了。

挺复杂,逻辑挺简单

LookupDispatchAction

修补上一个抽象类的缺陷

无法应对特殊字符(中文,空格等)

无法抱枕安全性,前端的提交即是实际的名称,URI暴露。

这里通过一个配置文件.properties进行键值对的映射,值当然可以是任何字符了。

同时前端的提交是键,也不会直接暴露实际名称。

在类的实际实现中利用一个HashMap做函数字典,put了键以及对应的函数名,这样也保证了对应的正确性。lookup查找也体现在这里

MappingDispatchAction

很简短,感觉没get到什么东西,好像是为一个后端控制器指定了多个路径?进行了聚合?

问题待解决

  1. 对于Fin.2.``如何获取ApplicationContext对象这一问题我需要在看看源码,在有网的时候看看。
  2. 考虑<context:annotation-config/></mvc:annotation-driven>的关联,因为我之前在总结的时候把这两个总结到一起了。
    估计是配置注解的xml项
  3. Fin.5我没有考虑到@Repository这的注解也可以用于声明组件类。需要找到用处。
  4. jsp的9个隐含对象到底是什么类?全是jsp吗?
  5. javaweb的四大域对象,究竟是什么类?
  6. EL语言中applicationScope隐含对象的类型
  7. 弄明白URI和URL的区别!为什么HttpServletRequest的getRequestURI和getRequestURL的返回值不同?
  8. JSP还是得看一看啊。
  9. 关于标记库描述符文件的内容需要了解一下
  10. 关于Cookie类的相关信息
  11. ServletRequest为什么返回的是一个String,他有什么用? String getProtocol();
  12. web.xml中 的用处有什么呢?在spring-controller.txt
  13. RequestDispatcher看看官方的说明吧,虽然简单,但还是没有那么通透。
  14. HttpSession看看函数
  15. 注释的看看那WebServlet,WebListener,WebFilter

解决

  1. ApplicationContext是Springboot的IOC容器,有时候我们需要获取到该容器,一个方法就是实现ApplicationContextAware,它有个方法setApplicationContext可以获取到该容器。

  2. 参考

    mvc:annotation-driven/用于MVC的注解开启,自动加载了一些类。

    context:annotation-config/会为已经注册过的bean进行装配

    所以对于MVC还是用的MVC的

  3. @Respority和@Mapper很像,都是DAO层的注解,用于标识功能和便于识别。

  4. 不,你看下图

  5. 参考

  6. 在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对象指定所要查找的标识符的作用域后,系统 将不再按照默认的顺序(page、request、session以及application)来查找相应的标识符。

  7. 参考

  8. 创建一个 cookie,它是由 servlet 发送到 Web 浏览器、由浏览器保存、稍后发送回服务器的少量信息。Cookie 的值可以唯一标识客户端,因此 Cookie 通常用于会话管理。

    建Cookie -- HttpServletResponse.addCookie(Cookie)

    获取Cookie -- HttpServletRequest.getCookie()

    描述,域名,最大过期时间,名,值,安全性,版本等getset方法

  9. 在ServletRequest中,getProtocol返回的是协议号

    正如名字所示,获取协议,在一个网络请求中包括请求头和请求体,在请求头中有说明协议版本的字段。

一个说明字段是String很容易让人理解。

  1. RqequestDispatcher 接受来自客户端的请求并将请求发送到服务器上任意位置

forward将请求从 Servlet 转发到服务器上的其他资源(Servlet、JSP 文件或 HTML 文件)。

include在响应中包含资源(servlet、JSP 页面、HTML 文件)的内容。

  1. HttpSession

主要是getset Attribute的方法,还有获取时间相关,标识符等。

  1. 注释

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WebServlet {
    String name() default "";servlet 的 name

    String[] value() default {};servlet 的 URL 模式
    
    String[] urlPatterns() default {};servlet 的 URL 模式
    
    int loadOnStartup() default -1;servlet 的启动时加载顺序
    
    WebInitParam[] initParams() default {};servlet初始化参数
    
    boolean asyncSupported() default false;声明 Servlet 是否支持异步操作方式。
    
    String smallIcon() default "";
    
    String largeIcon() default "";
    
    String description() default "";
    
    String displayName() default "";Servlet 的显示名称
    

    }

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WebListener {
    String value() default "";声明一个Listener
    }
    此注解用于声明 WebListener。任何使用 WebListener 批注的类都必须实现一个或多个 ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener 或 HttpSessionAttributeListener 或 HttpSessionIdListener 接口。

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WebFilter {
    String description() default "";

    String displayName() default "";
    
    WebInitParam[] initParams() default {};
    
    String filterName() default "";
    
    String smallIcon() default "";
    
    String largeIcon() default "";
    
    String[] servletNames() default {};应用过滤器的 Servlet 的名称。
    
    String[] value() default {};筛选器应用的 URL 模式 默认值为空数组。
    
    String[] urlPatterns() default {};筛选器应用的 URL 模式 默认值为空数组。
    
    DispatcherType[] dispatcherTypes() default应用过滤器的转发程序类型 {DispatcherType.REQUEST};
    /*   FORWARD,
    INCLUDE,
    REQUEST,
    ASYNC,
    ERROR;
    

    */
    boolean asyncSupported() default false;
    }

JSP简单学习

jsp是在html中嵌入java代码

jsp也是在j2ee服务端中的java组件

第一次运行

在第一次运行jsp代码时会经历以下步骤,将jsp转为java代码,将java代码转为class文件。

所以通常会比较慢,编译后就好多了。

四大作用域

  • request
  • session
  • page
  • application

部署jsp

xml 复制代码
<servlet>
    <servlet-name>a<servlet-name/>
    <jsp-file>/a.jsp<jsp-file/>
    <servlet-mappiing>
        <servlet-name>
        <url-pattern>
<servlet/>

jsp作为servlet的继承者,自然是可以部署的,但是一般不会这么做。

内嵌java语法

  • <%@ %>jsp指令的语法
  • <%= %>jsp表达式的语法
  • <%! %>jsp声明的语法
  • <%-- --%>jsp注释的语法
  • <% %>jsp中可以放置任何合法的java代码,其最终会被转换到service代码内。

jsp指令

  • <%@ page 属性列表%> 定义页面的依赖属性,如脚本语言,error页面,缓存需求等
  • <%@ include file="afile" %> 包含其它文件
  • <%@ taglib uri="" prefix="a" %> 标签库的定义

例子

<%@ page import="java.util.*,java.net.*,java.io.*" session="true" isErrorPage="false" errorPage="/error.jsp"%>
<%@ include file="copyright.html" %>

Jsp声明

声明函数或变量,供后续使用。

<%! int i = 0;%>
<%! Circle a = new Circle(2.0);%>

或者

<jsp:declaration>
    int i = 0;
<jsp:declaration/>

Jsp的action行为标签

9个隐式变量(内置变量)

java 复制代码
HttpServletRequest request
HttpServletEesponse response
ServletContext application
PageContext pagecontext
ServletConfig config
HttpSession session
JspWriter out
Exception exception
page,等价于this

考试重点JspWriter,PageContext

java 复制代码
package javax.servlet.jsp

public abstract class JspWriter extends Writer {
    public static final int NO_BUFFER = 0;
    public static final int DEFAULT_BUFFER = -1;指示 Writer 已缓冲并使用实现默认缓冲区大小的常量。
    public static final int UNBOUNDED_BUFFER = -2;常量表示 Writer 是缓冲的并且是无界的;这在 BodyContent 中使用。
    protected int bufferSize;
    protected boolean autoFlush;

    protected JspWriter(int bufferSize, boolean autoFlush) {
        this.bufferSize = bufferSize;
        this.autoFlush = autoFlush;
    }

    public abstract void newLine() throws IOException;

    public abstract void print(boolean var1) throws IOException;

    public abstract void print(char var1) throws IOException;

    public abstract void print(int var1) throws IOException;

    public abstract void print(long var1) throws IOException;

    public abstract void print(float var1) throws IOException;

    public abstract void print(double var1) throws IOException;

    public abstract void print(char[] var1) throws IOException;

    public abstract void print(String var1) throws IOException;

    public abstract void print(Object var1) throws IOException;

    public abstract void println() throws IOException;

    public abstract void println(boolean var1) throws IOException;

    public abstract void println(char var1) throws IOException;

    public abstract void println(int var1) throws IOException;

    public abstract void println(long var1) throws IOException;

    public abstract void println(float var1) throws IOException;

    public abstract void println(double var1) throws IOException;

    public abstract void println(char[] var1) throws IOException;

    public abstract void println(String var1) throws IOException;

    public abstract void println(Object var1) throws IOException;

    public abstract void clear() throws IOException;

    public abstract void clearBuffer() throws IOException;

    public abstract void flush() throws IOException;

    public abstract void close() throws IOException;

    public int getBufferSize() {
        return this.bufferSize;
    }

    public abstract int getRemaining();此方法返回缓冲区中未使用的字节数。

    public boolean isAutoFlush() {
        return this.autoFlush;
    }
}
java 复制代码
package javax.servlet.jsp

public abstract class PageContext extends JspContext {
    public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;
    public static final String PAGE = "javax.servlet.jsp.jspPage";
    public static final String PAGECONTEXT = "javax.servlet.jsp.jspPageContext";
    public static final String REQUEST = "javax.servlet.jsp.jspRequest";
    public static final String RESPONSE = "javax.servlet.jsp.jspResponse";
    public static final String CONFIG = "javax.servlet.jsp.jspConfig";
    public static final String SESSION = "javax.servlet.jsp.jspSession";
    public static final String OUT = "javax.servlet.jsp.jspOut";
    public static final String APPLICATION = "javax.servlet.jsp.jspApplication";
    public static final String EXCEPTION = "javax.servlet.jsp.jspException";

    public PageContext() {
    }

    public abstract void initialize(Servlet var1, ServletRequest var2, ServletResponse var3, String var4, boolean var5, int var6, boolean var7) throws IOException, IllegalStateException, IllegalArgumentException;

    public abstract void release();

    public abstract HttpSession getSession();

    public abstract Object getPage();页面对象的当前值(在 Servlet 环境中,这是 javax.servlet.Servlet 的实例)。

    public abstract ServletRequest getRequest();请求对象 (ServletRequest) 的当前值。

    public abstract ServletResponse getResponse();响应对象 (ServletResponse) 的当前值。

    public abstract Exception getException();

    public abstract ServletConfig getServletConfig();

    public abstract ServletContext getServletContext();

    public abstract void forward(String var1) throws ServletException, IOException;

    public abstract void include(String var1) throws ServletException, IOException;

    public abstract void include(String var1, boolean var2) throws ServletException, IOException;

    public abstract void handlePageException(Exception var1) throws ServletException, IOException;

    public abstract void handlePageException(Throwable var1) throws ServletException, IOException;

    public BodyContent pushBody() {
        return null;
    }

    public ErrorData getErrorData() {
        return new ErrorData((Throwable)this.getRequest().getAttribute("javax.servlet.error.exception"), (Integer)this.getRequest().getAttribute("javax.servlet.error.status_code"), (String)this.getRequest().getAttribute("javax.servlet.error.request_uri"), (String)this.getRequest().getAttribute("javax.servlet.error.servlet_name"));
    }
}

JSP EL表达式

<%
    request.setAttribute("a","hello")
%>
${a}

会在四大作用域中依次搜索a这个键名。

显示hello

变量定义使用setAttribute()方法进行设置,可以设置在四大作用域中的任意一个域中。

预定义11个对象

为了方便使用,定义了可以直接供我们使用的11个对象。

大多是都是用Map存储,采用键值对的形式。

  • pageContext
  • param
  • paramValues
  • header
  • headerValues
  • cookie
  • initParam
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

只有pageContext是PageContext类型。

运算

  1. 取值
    .``[]

最后

你看到了这里,感谢你愿意看这些碎碎念,不成体系而且很随意的内容。

我们都是普通人咯,现在时间也不多了呢,但是未来到底如何还是迷雾一团啊,

我希望在今年能取得我自己满意的成绩啊,身边的同学都有自己的强势,我真的是孤身一人在打拼呢。哎,总感觉不是为自己而活,是为父母的期望而活,为了自己的后辈开路而活。

总会有悲伤的时候呢,别影响你了,加油。

相关推荐
Bunny021221 分钟前
SpringMVC笔记
java·redis·笔记
blammmp23 分钟前
Java EE 进阶:Spring MVC(1)
spring·java-ee·mvc
架构文摘JGWZ1 小时前
FastJson很快,有什么用?
后端·学习
量子-Alex3 小时前
【多视图学习】显式视图-标签问题:多视图聚类的多方面互补性研究
学习
乔木剑衣3 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合
练小杰4 小时前
Linux系统 C/C++编程基础——基于Qt的图形用户界面编程
linux·c语言·c++·经验分享·qt·学习·编辑器
皮肤科大白4 小时前
如何在data.table中处理缺失值
学习·算法·机器学习
皮肤科大白4 小时前
“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““
学习
汤姆和佩琦5 小时前
2025-1-21-sklearn学习(43) 使用 scikit-learn 介绍机器学习 楼上阑干横斗柄,寒露人远鸡相应。
人工智能·python·学习·机器学习·scikit-learn·sklearn
qq_544329175 小时前
下载一个项目到跑通的大致过程是什么?
javascript·学习·bug