Servlet基础知识点整理
常用注解
官方文档: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基础知识点整理的更多相关文章
- HTML&&CSS基础知识点整理
HTML&&CSS基础知识点整理 一.WEB标准:一系列标准的集合 1. 结构(Structure):html 语言:XHTML[可扩展超文本标识语言]和XML[可扩展标记语言] 2. ...
- TypeScript 基础知识点整理
一.TypeScript的特点 1.支持ES6规范 2.强大的IDE支持(集成开发环境) 允许为变量指定类型,减少你在开发阶段犯错误的几率. 语法提示,在IDE编写代码时,它会根据你所处的上下文把你能 ...
- 【Android 面试基础知识点整理】
针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...
- Python基础知识点整理(详细)
Python知识点整理(详细) 输出函数 print()可以向屏幕打印内容,或者在打开指定文件后,向文件中输入内容 输入函数 input([prompt])[prompt] 为输入的提示字符.该函数返 ...
- python 基础知识点整理 和详细应用
Python教程 Python是一种简单易学,功能强大的编程语言.它包含了高效的高级数据结构和简单而有效的方法,面向对象编程.Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言 ...
- PHP初入,基础知识点整理(样式表&选择器的使用整理)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Servlet基础知识点
一.web.xml 的加载顺序是: ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间 ...
- java基础知识点整理
1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. &&:短路与,如果第一个表达式为false时,第二 ...
- python基础知识点整理
序列 描述 sequence(序列)是一组有顺序的元素的集合.序列可以包含一个或多个元素,也可以没有任何元素.我们之前所说的基本数据类型,都可以作为序列的元素. 序列有两种:tuple(定值表: 也有 ...
随机推荐
- MVVM Light 新手入门(1):准备阶段
1.新建WPF空白项目. 2.NuGet 程序包中安装 3.根据MVVM分层结构,建立包含Model.View.ViewModel三层文件夹 如图: 1.View负责前端展示,与ViewModel进行 ...
- 背水一战 Windows 10 (43) - C# 7.0 新特性
[源码下载] 背水一战 Windows 10 (43) - C# 7.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 7.0 新特性 介绍 C# 7.0 的新特性 示例 ...
- cad.net的undo返回操作
这是提供给许多从lisp转移到c#的开发人员的一个函数,这个函数利用后绑代码实现undo返回操作. 本代码由edata提供: edata博客 /// <summary> /// 命令动作编 ...
- GITLAB安装笔记
CentOS 7 最小安装后操作 设置时区timedatectl set-timezone Asia/Shanghai 添加 Gitlab 清华源 vi /etc/yum.repos.d/gitlab ...
- POJ 2860
#include<iostream> #define MAXN 20 using namespace std; int a_1[MAXN]; int a_2[MAXN]; int main ...
- oracle RAC 跨网段客户端访问 报ORA-12170
场景描述: 服务器所在网段为20,在同一网段的机器客户端远程连接SCAN IP 可以正常访问,当时更换了网段之后,15网段的机器通过oracle客户端连接服务器SCAN ip 无法正常访问,telne ...
- xamarin 编译出现Xamarin.Build.Forms.Tasks.GetTaskAbi 无法加载的错误解决方法
最新升级最新的vs2017后发现编译xamarin forms 会出现错误 Xamarin.Forms.Build.Tasks.GetTasksAbi task could not be loaded ...
- Vue图片懒加载插件 - vue lazyload的简单使用
Vue module for lazyloading images in your applications. Some of goals of this project worth noting i ...
- github绑定自己的域名
1.进入需要绑定域名的项目里面,然后新建一个文件CNAME,没有后缀的. 2.在文件里面输入你的域名,然后保存.github这边就完成了. 3.然后去你购买域名的网站,进入控制台,找到域名,然后域名解 ...
- 在Idea2017.1中编译时发生如下的错误
错误 在Idea2017.1中编译时发生如下的错误 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8 Information:java: Errors ...