当前位置: 首页 > article >正文

【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同步
如果同步访问同一数据
对共享数据的保护
用锁机制

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

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

        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

EventListener是空接口
public interface ServletContextListener extends EventListener {
    void contextInitialized(ServletContextEvent var1);

    void contextDestroyed(ServletContextEvent var1);
}

ServletContextEvent

本质还是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中找到了这个方法

public interface HttpSessionListener extends EventListener {
    void sessionCreated(HttpSessionEvent var1);
    void sessionDestroyed(HttpSessionEvent var1);
}

ServletContext

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

public interface ServletContextAttributeListener extends EventListener {
    void attributeAdded(ServletContextAttributeEvent var1);
    void attributeRemoved(ServletContextAttributeEvent var1);
    void attributeReplaced(ServletContextAttributeEvent var1);
}

HttpSessionAttributeListener

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中配置,监听器就可以正常运行了。

<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%20harnesses%20should%20include%20the%20following%20capabilities%3A%201,results.%204%20A%20standardized%20form%20of%20failure%20reporting.

  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()
  1. 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>
  1. HTTP的七种访问方法
    GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE

  2. ServletContext 中getContextPathgetRealPath的区别
    getContextPath获取到相对路径,并且可以使用虚拟路径。
    getRealPath获取到绝对路径,相对于盘符的路径。(绝对路径)

  3. dis ?我想干什么
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  4. 我已经洞悉了JSP9大内置对象的实质!
    javax.servlet.jsp.PageContext这个类中

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();
}
  1. 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接口

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

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

    default void destroy() {
    }
}
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很容易让人理解。
13. RqequestDispatcher 接受来自客户端的请求并将请求发送到服务器上任意位置
forward将请求从 Servlet 转发到服务器上的其他资源(Servlet、JSP 文件或 HTML 文件)。
include在响应中包含资源(servlet、JSP 页面、HTML 文件)的内容。
14. HttpSession
主要是getset Attribute的方法,还有获取时间相关,标识符等。
15. 注释

@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

<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个隐式变量(内置变量)

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

考试重点JspWriter,PageContext

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;
    }
}
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. 取值
    .``[]

最后

你看到了这里,感谢你愿意看这些碎碎念,不成体系而且很随意的内容。
我们都是普通人咯,现在时间也不多了呢,但是未来到底如何还是迷雾一团啊,
我希望在今年能取得我自己满意的成绩啊,身边的同学都有自己的强势,我真的是孤身一人在打拼呢。哎,总感觉不是为自己而活,是为父母的期望而活,为了自己的后辈开路而活。
总会有悲伤的时候呢,别影响你了,加油。


http://www.kler.cn/a/234088.html

相关文章:

  • 数据库范式、MySQL 架构、算法与树的深入解析
  • Mybatis配置文件的增删改查功能
  • 华为机试HJ41 称砝码
  • STM32 51单片机设计半导体制冷片温控设计
  • ssm114基于SSM框架的网上拍卖系统的设计与实现+vue(论文+源码)_kaic
  • 【CSS】什么是BFC?
  • vue3 之 商城项目—项目搭建起步
  • JAVA学习笔记9
  • 力扣[面试题 01.02. 判定是否互为字符重排(哈希表,位图)
  • 使用client-only 解决组件不兼容SSR问题
  • 【十四】【C++】list 的常见用法
  • 【Qt 学习之路】在 Qt 使用 ZeroMQ
  • Rust基础拾遗--核心功能
  • 深入探究 HTTP 简化:httplib 库介绍
  • 用EXCEL从地址(上海)中提取各区(浦东新区等区)信息
  • 【笔记】Harmony学习:下载安装 DevEco Studio 开发工具IDE
  • Stable Diffusion 模型下载:GhostMix(幽灵混合)
  • 海外云手机——平台引流的重要媒介
  • NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由
  • Solidworks:平面草图练习
  • 前端小案例——动态导航栏文字(HTML + CSS, 附源码)
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • 机器学习2--逻辑回归(案列)
  • 大数据Flume--入门
  • C 语言学习七:指针
  • 【MySQL题】——基础概念论述(二)