常用注解

官方文档: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. C#序列化与反序列化以及深拷贝浅拷贝

    基于二进制数据流的序列化和反序列化 /// <summary> /// 序列化 /// </summary> /// <typeparam name="T&qu ...

  2. node.js实现WebSocket

    最近在学习“HTML5游戏开发实战”,其中第8章内容是使用WebSocket来构建多人游戏---<你画我猜>.然而在实现过程中,却一直出错: 客户端请求时,服务器端会报错并终止: 而浏览器 ...

  3. Python 爬虫(二十五) Cookie的处理--cookielib库的使用

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持. 该模块主要功能是提供可存储cookie的对象.使用此模块捕获cookie并 ...

  4. webstorm “Unterminated statement”

    使用webstorm的时候,写console.log,或者一些其他语句的时候  偶尔会出现这种提示,不是报错,就是看着别扭,应该是写法规范问题. 解决办法: 在下面空一行就行了

  5. MySQL赋权

    MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利.grant select ...

  6. eclipse上搭建mybatis

    1..在help中打开 2.搜索mybatipse 3:功能简介 1:要查找某一个方法        在dao接口中某一个方法中 按住 Ctrl键 鼠标指到方法名称上 选择open xml 就会自动跳 ...

  7. [每天解决一问题系列 - 0002] Xcopy cannot copy file with long directory

    现象: 当xcopy的文件的全名(包括目录和文件名)的长度超过255字符时,会copy失败,得到insufficient memory错误 解决方法: 在Server 版的OS中,有robcopy命令 ...

  8. 剑指offer十三之调整数组顺序使奇数位于偶数前面

    一.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路 此题可 ...

  9. (转)python之from_bytes、to_bytes

    原文:https://blog.csdn.net/PYTandFA/article/details/78741339 https://python3-cookbook.readthedocs.io/z ...

  10. Jenkins使用TFS部署

    之前发表过一篇Jenkins的文章 使用Jenkins部署.Net应用程序 里面是使用GIT做的版本管理 今天更新下使用TFS做版本管理 首先在插件管理中搜索tfs,我这里因为已经装了,所以在已安装列 ...