常用注解

官方文档:https://docs.oracle.com/javaee/7/api/toc.htm

WebServlet

@WebServlet用于定义一个Servlet,等价于下面的xml配置

<servlet>
<servlet-name>LogServlet</servlet-name>
<servlet-class>log.LogServlet</servlet-class>
<init-param>
<param-name>email</param-name>
<param-value>965019948@qq.com</param-value>
</init-param>
<init-param>
<param-name>zipcode</param-name>
<param-value>225800</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>LogServlet</servlet-name>
<url-pattern>/log</url-pattern>
</servlet-mapping>

WebFilter

@WebFilter用于定义一个Filter,等价于下面的xml配置

<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>filter.LoggingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>logFileName</param-name>
<param-value>log.txt</param-value>
</init-param>
<init-param>
<param-name>prefix</param-name>
<param-value>URI:</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

WebListener

@WebListener用于定义一个Listener,等价于下面的xml配置

<listener>
<listener-class>listener.SessionListener</listener-class>
</listener>

WebInitParam

指定Servlet或Filter的初始化参数

ServletConfig和ServletContext的区别

  • ServletConfig:

    • Servlet容器初始化Servlet时,Servlet容器会给该Servlet传入一个ServletConfig对象

      void init (ServletConfig var1) throws ServletException

    • 该Servlet的配置

  • ServletContext:

    • ServletContext表示Servlet应用程序,每个Web应用程序只有一个上下文

Attribute

相关方法

  • void setAttribute(String name, Object o)
  • Object getAttribute(String name)
  • Enumeration getAttributeNames()
  • removeAttribute(String name)

范围

pageContext < request < session < application

  • pageContext:当前JSP页面
  • request:当前请求
  • session:一次会话
  • application:当前web应用

JSP脚本片断

<%
for (Customer customer : customers){
/*此处“{ }”断开,使得JSP页面能将customers遍历并以表格的方式展示*/
%>
<tr>
<td><%= customer.getId()%></td>
<td><%= customer.getName()%></td>
<td><%= customer.getAddress()%></td>
<td><%= customer.getPhone()%></td>
<td>
<a href="delete.do?id=<%= customer.getId()%>" class="delete">Delete</a>
<a href="">Update</a>
</td>
</tr>
<%
}
%>

对应的Java源代码如下

for (Customer customer : customers){

      out.write("\n");
out.write(" <tr>\n");
out.write(" <td>");
out.print( customer.getId());
out.write("</td>\n");
out.write(" <td>");
out.print( customer.getName());
out.write("</td>\n");
out.write(" <td>");
out.print( customer.getAddress());
out.write("</td>\n");
out.write(" <td>");
out.print( customer.getPhone());
out.write("</td>\n");
out.write(" <td>\n");
out.write(" <a href=\"delete.do?id=");
out.print( customer.getId());
out.write("\" class=\"delete\">Delete</a>\n");
out.write(" <a href=\"\">Update</a>\n");
out.write(" </td>\n");
out.write(" </tr>\n");
out.write(" "); }

请求转发和重定向

转发

request.getRequestDispatcher("/index.jsp").forward(request,response);

重定向

response.sendRedirect("query.do");

302 Move temporarily

​ 请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

​ 上文有提及。

​ 如果这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。

​ 注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。

https://baike.baidu.com/item/HTTP状态码/5053660?fr=aladdin#3_3

区别

转发 重定向
地址栏是第一次发出请求的地址 地址栏是最后响应的地址
在Servlet中request对象没有变化 在Servlet中request对象发生了变化
只能转发给当前web应用的资源 可以重定向到任意地方(比如百度)

Servlet基础知识点整理的更多相关文章

  1. HTML&&CSS基础知识点整理

    HTML&&CSS基础知识点整理 一.WEB标准:一系列标准的集合 1. 结构(Structure):html 语言:XHTML[可扩展超文本标识语言]和XML[可扩展标记语言] 2. ...

  2. TypeScript 基础知识点整理

    一.TypeScript的特点 1.支持ES6规范 2.强大的IDE支持(集成开发环境) 允许为变量指定类型,减少你在开发阶段犯错误的几率. 语法提示,在IDE编写代码时,它会根据你所处的上下文把你能 ...

  3. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

  4. Python基础知识点整理(详细)

    Python知识点整理(详细) 输出函数 print()可以向屏幕打印内容,或者在打开指定文件后,向文件中输入内容 输入函数 input([prompt])[prompt] 为输入的提示字符.该函数返 ...

  5. python 基础知识点整理 和详细应用

    Python教程 Python是一种简单易学,功能强大的编程语言.它包含了高效的高级数据结构和简单而有效的方法,面向对象编程.Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言 ...

  6. PHP初入,基础知识点整理(样式表&选择器的使用整理)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. Servlet基础知识点

    一.web.xml 的加载顺序是: ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间 ...

  8. java基础知识点整理

    1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. &&:短路与,如果第一个表达式为false时,第二 ...

  9. python基础知识点整理

    序列 描述 sequence(序列)是一组有顺序的元素的集合.序列可以包含一个或多个元素,也可以没有任何元素.我们之前所说的基本数据类型,都可以作为序列的元素. 序列有两种:tuple(定值表: 也有 ...

随机推荐

  1. 三、winForm-DataGridView操作——DataGridView 操作复选框checkbox

    一.添加复选框 ArrayList arr = new ArrayList(); public string checkboxName = "选择"; void StandLibW ...

  2. 迁移桌面程序到MS Store(6)——.NET Portability Analyzer

    上一篇我们简单介绍了.NET Standard,本篇我们来实践.NET Framework 4.5 Class Library到.NET Standard 2.0的转换.        首先让我们来做 ...

  3. 分布式锁实现思路及开源项目集成到springmvc并使用

    分布式锁顾名思义就是在分布式系统下的锁,而使用锁的唯一目的就是为了防止多个请求同时对某一个资源进行竞争性读写 在使用多线程时,为了让某一资源某一时刻只能有一个操作者,经常使用synchronized, ...

  4. Redis---Hash(字典)

    1. 概述 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿). ...

  5. 锐捷客户端下虚拟机VMware无法联网的问题

    打开VMware,选择右下角的网络适配器,设置为NAT模式. 如果还不能上网,则打开电脑的任务管理器,保证VMwate的服务保持开启. 但是锐捷客户端,会自动检测并且关闭VMware NAT Serv ...

  6. 10分钟打造强大的gvim

    感谢Ruchee的共享精神,让我等vim新手省去了配置vim的麻烦(教程地址:配置文件使用指南). 只需要简单的6个步骤,就可以配置完成一个强大的gvim神器,下图是我的最终配置效果图. (另外,我的 ...

  7. CLR关于语言文化的类型一CultureInfo类和字符串与线程的关联

    .Net Frameword使用System.Globalization.Culture类型表示一个"语言/国家"对(根据RFC 1766标准).例如,'en-US'代表美国英语, ...

  8. Word在转PDF的过程中如何创建标签快速方便阅读(图文详解)

    不多说,直接上干货! 选择如下 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客:    http://www.cnbl ...

  9. unsigned/signed int/char类型表示的数值范围

    一个32位的signed int类型整数表示的范围:-2^31~2^31-1 一个32位的unsigned int类型整数表示的范围: 0~2^32-1 一个8位的signed char类型整数表示的 ...

  10. MutationObserver DOM变化的观察

    简单的给MutationObserver做个测试及总结笔记. MutationObserver,window上的一个(构造)函数,可以通过其创建的观察者(观察对象)达到观察DOM的变化的效果. 可适用 ...