一、Servlet详解
1.Servlet基本概念
每一个jsp页面就是一个java类,该类继承自:HttpJspBase -> HttpServlet。
所以说一个jsp页面本质上就是一个servlet。
Servlet的使用步骤
1>.定义Servlet:
添加一个普通的Java类,然后继承HttpServlet类。
最后重写doGet和doPost方法。
以get方式发送的请求进入doGet方法处理;以Post方式发送的请求进入doPost方法处理。
2>.在web.xml中配置servlet。
<servlet>
<servlet-name>welcome_servlet</servlet-name>
<servlet-class>jsp_charpter3_0908.Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome_servlet</servlet-name>
<url-pattern>/welcome.html</url-pattern>
</servlet-mapping>
注意:每个servlet都要配置两个xml节点:servlet、servlet-mapping;
两个节点中servlet-name必须一样;
url-pattern:用于指定映射的url地址
2.Content-Type
内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码。
决定文件接收方将以什么形式、什么编码读取这个文件。
常见的Content-Type
text/css 层叠样式表
text/javascript js代码
text/html html代码
text/plain 纯文本
image/jpeg 图片jpg
application/msword word文档
application/vnd.ms-excel excel文档
application/json
response.setContentType("content-type");
3.基于注解配置Servlet
在添加的Servlet类上面添加注解:WebServlet
name:设置servlet的名称
urlPatterns:设置servlet的Url映射地址
示例:
@WebServlet(name="delete_goods", urlPatterns={"/goods/delete.html"})
public class AddGoods extends HttpServlet{...}
4.其他
如何在Servlet中获取session
HttpSession session = request.getSession();
二、EL表达式
1.基本概念
全名:Expression Language,即表达式语言。
作用:它提供了在 JSP 中简化表达式的方法,让Jsp代码更加简化。代替JSP页面中复杂的JAVA代码。
语法:EL表达式总是用大括号括起,而且前面有一个美元符($)前缀:${expression}。
2..[]与.运算符
EL 提供.和[]两种运算符来存取数据。
点号操作符允许使用一个Map键或一个bean属性名来访问值。
例如:使用${foo.bar}可以得到bar属性的值。
注意:放在点号操作符右边的东西必须遵循Java的标识符命名规则!
[]操作符比点号功能更强大,因为利用[]可以访问数组和List。
例如,如果musicList是一个ArrayList,可以用${musicList[0]}或${musicList["0"]}来访问列表的第一个值。
注意:当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如:${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用[]来做,而.无法做到动态取值。
例如:${sessionScope.user[data]}中data 是一个变量。
3.EL隐式(隐含)对象
与范围有关的隐含对象
pageScope、requestScope、sessionScope 和applicationScope。
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。例如:我们要取得session中储存一个属性username的值,java代码为:session.getAttribute("username")。而在EL中则使用下列方法:${sessionScope.username}。如果获取的对象为null,使用el表达式则不会输出null,但是通过getAttribute会在页面中输出Null。
${...Scope.name} 也可以这样写${name};
此时el会依次从pageScope>requestScope>sessionScope>applicationScope中查找name。
与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。
例如:我们要取得用户的请求参数时,可以利用下列方法:
request.getParameter(String name)和request.getParameterValues(String name) 。
在EL中则可以使用param和paramValues两者来取得数据。
语法格式为:${param.name}和${paramValues.name}。
4.其他隐含对象
1>.cookie
例:要取得cookie中名称为userCountry的值,可以使用${cookie.userCountry}来取得它。
2>.header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
5.EL运算符
1>.算术运算符有五个:+、-、*或$、/或div、%或mod
2>.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3>.逻辑运算符有三个:&&或and、||或or、!或not
4>.其它运算符有三个:Empty运算符、条件运算符、()运算符
例:${empty param.name}、${A?B:C}、${A*(B+C)}
6.其他
在JSP页面中可以动态的启用或者禁用EL表达式
<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言.
三、JSTL
1.JSTL简介
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签
格式化标签
SQL 标签
XML 标签
JSTL 函数
2.JSTL 库安装
Apache Tomcat安装JSTL 库步骤如下:
从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。
下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
下载jakarta-taglibs-standard-1.1.1.zip 包并解压,将standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。
注意:使用任何库,必须在每个JSP文件中的头部包含<taglib>标签。
3.核心标签
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 描述
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL
forEach标签讲解:
<c:forEach var="" items="" varStatus="" begin="" end="" step=""></c:forEach>
【参数解析】:
I、var设定变量名用于存储从集合中取出元素。
II、items指定要遍历的集合。
III、varStatus设定变量名,该变量用于存放集合中元素的信息。
IV、begin、end用于指定遍历的起始位置和终止位置(可选)。
V、step指定循环的步长。
【varStatus有4个状态属性】:
index:当前循环的索引值
count:循环的次数
frist:是否为第一个位置
last:是否为最后一个位置
4.格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy hh:mm aa"/>
四、过滤器
1.过滤器
概念:过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
过滤器就是一个实现了Filter接口的Java类。
在客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
2.如何使用过滤器
1>.定义一个类,实现接口Filter
2>.重写init、destroy、doFilter方法。
init(FilterConfig arg0)方法在初始化过滤器时被调用,在生命周期内只执行一次。
doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
拦截请求的核心方法。
//参数1:请求对象
HttpServletRequest request = (HttpServletRequest)req;
//参数2:响应对象
HttpServletResponse response = (HttpServletResponse)resp;
//参数3:过滤器链 chain
destroy()方法,在过滤器被销毁时调用。
3.课堂案例
编码过滤器:解决post提交时,中文乱码问题
权限过滤器:解决未登录状态下,拒绝访问系统资源。
@WebFilter(filterName="login_filter", urlPatterns={"/*"})
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
//参数1:请求对象
HttpServletRequest request = (HttpServletRequest)req;
//参数2:响应对象
HttpServletResponse response = (HttpServletResponse)resp;
//排除登录
String url = request.getRequestURL().toString();
if(url.toLowerCase().contains("login.html")){
//继续后续操作
chain.doFilter(request, response);
return;
}
//判断是否已经登录
if(request.getSession().getAttribute("user")==null){
//跳转到登录
response.sendRedirect(request.getContextPath() + "/login.html");
}else{
//继续后续操作
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
获取请求消耗的时间的过滤器:查看系统中的性能瓶颈点。
4.过滤器的应用场合:
身份验证过滤器(Authentication Filters)。
数据压缩过滤器(Data compression Filters)。
加密过滤器(Encryption Filters)。
触发资源访问事件过滤器。
图像转换过滤器(Image Conversion Filters)。
日志记录和审核过滤器(Logging and Auditing Filters)。
MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。
标记化过滤器(Tokenizing Filters)。
五、文件上传
1.在JSP中实现文件上传
1>.解决方案:Apache提供的文件上传组件。
2>.将下面的两个jar包拷贝到lib目录。
commons-fileupload-***.jar
commons-io-***.jar
3>.修改jsp页面中的form标记
method属性一定要设置为post。
将enctype属性的值设置为multipart/form-data
注意:enctype="multipart/form-data",form表单将以二进制流的形式提交到web服务器。
分享到:
相关推荐
Servlet 详解 Servlet 是 Java 语言中的一种服务器小程序,它可以与运行于客户端的 Applet 进行交互,也可以直接与 HTML 页进行交互。Servlet 的功能包括: 1. 与客户端 Applet 进行交互 2. 直接与 HTML 页进行...
### Servlet详解 #### 1. Servlet工作原理 Servlet是一种服务器端的小程序,主要用来处理HTTP请求并返回HTTP响应。Servlet由Servlet容器(如Tomcat、Jetty等)管理其生命周期,这种容器通常作为Web服务器的一部分...
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
Servlet是Java Web开发中的核心组件,它是一种运行在服务器端的Java程序,专门用来处理客户端的请求并生成响应。Servlet的主要职责是实现客户端与服务器之间的数据交互,这在构建动态Web应用时至关重要。Servlet不仅...
Servlet是Java平台上的一个核心技术,用于开发动态Web应用程序。它是Java EE(企业版)的一部分,主要用于处理HTTP请求,提供服务器端的功能。本教程将深入讲解Servlet的基本概念、工作原理以及如何通过示例来实现一...
struts1之ActionServlet详解 struts1框架中的ActionServlet是Struts1架构的核心组件之一,负责处理用户请求、交互ActionForm、ActionMapping和Action等组件,以完成用户请求。下面将详细介绍ActionServlet的工作...
### 使用Servlet接口手动开发Servlet详解 #### 一、概述 本文档将详细介绍如何通过实现`Servlet`接口的方式,从零开始构建一个简单的Servlet程序。这个Servlet不仅会显示“Hello World”,还会显示当前的时间。这...
`@WebServlet` 是Java Servlet API 3.0引入的一个注解,它简化了Servlet的配置,使得开发者无需在web.xml文件中手动配置Servlet。本篇文章将深入解析`@WebServlet` 注解的使用方法和它提供的各种特性。 首先,`@Web...
### 手动编译与部署Servlet详解 #### 一、Servlet简介 Servlet是Java Web开发中的一个重要组成部分,它主要用于处理客户端请求并生成动态响应。Servlet技术由Servlet规范定义,Servlet容器(如Tomcat)负责执行...
#### 二、Servlet详解 **Servlet**是Java EE的一个关键技术,它是运行在服务器端的小程序,主要用于处理客户端请求并生成响应。 - **Servlet生命周期:** - 初始化:通过`init()`方法完成; - 请求处理:通过`...
Servlet基础教程 http原理 request, response
### HttpServlet 详解 #### 1. 绪言 本文档主要介绍了Java Servlet API 2.1版本的相关内容,特别关注于`HttpServlet`类及其在实际应用中的作用。`HttpServlet`是Java Servlet API中一个重要的类,它为HTTP协议提供...
### Spring管理Filter与Servlet详解 在现代Web应用开发中,Spring框架因其强大的依赖注入和面向切面编程功能而被广泛采用。特别是在Java EE环境中,如何有效地整合Spring与Servlet、Filter等核心组件,对于构建高...
### Servlet与JSP深入详解:基于Tomcat的Web开发 #### 一、Servlet技术概述 Servlet是一种用Java编写的服务器端应用程序接口(API),它扩展了Java Web开发的功能。Servlet可以响应HTTP请求,并且能够处理复杂的...
2. **Servlet详解**: Servlet是Java EE平台中用于处理HTTP请求的服务器端组件。它通过实现Servlet接口或HttpServlet抽象类来扩展其功能。Servlet生命周期包括加载、初始化、服务、销毁四个阶段,而doGet和doPost...