考完试了,就把这段时间做的笔记发布,可能会有混乱和不准确的地方。但是在这段时间学后收获也是很大的。

20230829

.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

<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

11月5号下午7,8节考试

1012

download struts framework

    spring framework

/WEB-INF/lib

deploy front controller

web.xml

servlet, servlet-mapping

\*.do

```

<servlet-name>

<servlet-class>

<init-param>

     <param-name>config

     <param-value>/WEB-INF/struts/s.xml

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

```

app

/
```

spring 创建组件 根据id控制

ServletContextListener

contextInitialized等两个方法
```

<>param-value

getServletConfig().getInitParameter(“”) : ServletConfig

getInitParamter() : servletContext

```

```

这是在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个

![](vx_images/282823913231510.png =697x)

**JSPWriter out**

**PageContext pa**

**ServletContext**

参考

jsp也可以部署

jspEL表达式语言

![](vx_images/205474413234014.png =573x)

大多是**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/

  1. **组件类可以通过哪些注解声明?**

@Controller @Service @Component @Repository

资料复习

  1. 异常分为几类,简单讲解一下。

java异常分为 运行时异常 和 编译时异常

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

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

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

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

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

  1. `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配置基本结构

省略结束符号

```

hello

com.example.HelloServlet

hello

/hello/a.html

test

com.example.j2eetask5.filter.FilterChain

test

/*

com.example.j2eetask5.ListenerTest

```

  1. HTTP的七种访问方法

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

  1. ServletContext 中`getContextPath`和`getRealPath`的区别

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

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

  1. dis ?我想干什么

  1. 我已经洞悉了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 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视图技术

配置时会有前缀和后缀

只需返回文件名

  1. 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`的内容

![](vx_images/503184716237438.png =408x)

重点先看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项

  1. `Fin.5`我没有考虑到`@Repository`这的注解也可以用于声明组件类。需要找到用处。
  2. jsp的9个隐含对象到底是什么类?全是jsp吗?
  3. javaweb的四大域对象,究竟是什么类?
  4. EL语言中applicationScope隐含对象的类型
  5. 弄明白URI和URL的区别!为什么HttpServletRequest的getRequestURI和getRequestURL的返回值不同?
  6. JSP还是得看一看啊。
  7. 关于标记库描述符文件的内容需要了解一下
  8. 关于Cookie类的相关信息
  9. ~~ServletRequest为什么返回的是一个String,他有什么用? String getProtocol();~~
  10. web.xml中 的用处有什么呢?在spring-controller.txt
  11. RequestDispatcher看看官方的说明吧,虽然简单,但还是没有那么通透。
  12. HttpSession看看函数
  13. 注释的看看那WebServlet,WebListener,WebFilter

解决

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

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

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

所以对于MVC还是用的MVC的

  1. @Respority和@Mapper很像,都是DAO层的注解,用于标识功能和便于识别。
  2. 不,你看下图

![](vx_images/279751420250273.png =324x)

  1. 参考
  2. 在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对象指定所要查找的标识符的作用域后,系统 将不再按照默认的顺序(page、request、session以及application)来查找相应的标识符。
  3. 参考
  4. 创建一个 cookie,它是由 servlet 发送到 Web 浏览器、由浏览器保存、稍后发送回服务器的少量信息。Cookie 的值可以唯一标识客户端,因此 Cookie 通常用于会话管理。

建Cookie – HttpServletResponse.addCookie(Cookie)

获取Cookie – HttpServletRequest.getCookie()

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

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

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

![](vx_images/544673516249571.png =979x)

一个说明字段是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

a

/a.jsp

```

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行为标签

![](vx_images/203855216257604.png =710x)

![](vx_images/113875515231145.png =781x)

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

```

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. 取值

`.``[]`