一、注解
1. @WebServlet
开发 servlet 项目,使用@WebServlet 将一个继承于javax.servlet.http.HttpServlet 的类定义为 Servlet 组件。在
Servlet3.0 中, 可以使用@WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为可以处理用户请求的 Servlet。
用注解配置 Servlet也可以配置多个 urlPatterns 来指定多个访问路径
//@WebServlet("/Servlet02")
//@WebServlet(name="Servlet01",value="/Servlet001")
//@WebServlet(name="Servlet01",value={"/Servlet001","/Servlet0001"})
//@WebServlet(urlPatterns="/S01")
2. @WebFilter
@WebFilter 用来配置过滤器
@WebFilter("/*"),可以过滤乱码问题.
使用注解时:过滤器链按照类名的字母排序(大部分情况)
3. @WebListener
Servlet3.0 提供@WebListener 注解将一个实现了特定监听器接口的类定义
为监听器。将 实现了 ServletContextListener 接口的 MyServletContextListener
标注为监听器。
4. @MultipartConfig
使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。
Servlet3.0 将 multipart/form-data 的 POST 请求封装成 Part,通过 Part 对上传的文件进行操作。
// 得到Part对象
request.getPart(name):name代表的是前台文件域的name属性值
Part part = request.getPart("myfile");
// 得到上的文件名
String fileName = part.getSubmittedFileName();
// 通过上传的文件名是否为空可以判断是否上传了文件
if (fileName == null || "".equals(fileName)) {
// 未上传文件
return;
}
// 得到文件存放路径
String realPath = request.getServletContext().getRealPath("/");
// 上传文件到指定路径
part.write(realPath + fileName);
二、jsp
1. 注释
1)、显式注释
客户端可以看到的注释
1、继承HTML风格的注释 <!-- html注释 -->
2)、隐式注释
客户端无法看到的注释
1、JSP自己的注释 <%-- jsp注释 --%>
2、继承Java风格注释 // 单行注释 /*多行注释*/
2.Scriptlet(脚本小程序)
所有嵌入在 HTML 代码中的 Java 程序都必须使用 Scriptlet 标记出来.
三种Scriptlet代码:
--%>
1)、<% %>
java脚本段,生成的代码在servlet的service方法体中,变量是局部变量
--%>
2)、<%! %>>
声明全局变量、方法、类等,生成的代码在servlet类体中
--%>
3)、<%= %>
表达式,输出表达式,可以输出变量名、字面量,生成的代码在servlet的service方法体中
int num = 1;
System.out.println(num);
out.print(num);
out.print(str);
request.setAttribute("abc", "ABC");
%>
int a = 10;
String str = "Hello";
%>
4.jsp指令标签
page指令
language:支持的语言,目前只有java
contentType:响应类型及编码格式
pageEncoding:字符编码
import:导包,只有该属性可以同时设置多次
errorPage:当页面报错时要跳转的页面,一般与isErrorPage属性一起使用,且跳转的页面的isErrorPage属性设置为true
isErrorPage:是否是处理错误的页面,默认是false。一般与errorPage属性一起使用
注:页面的编码以charset的值为准;若charset未设置,则以pageEncoding为准;若两者都未设置,则使用默认编码ISO-8859-1
5.include
1). include静态包含
格式: 相对路径
file属性支持表达式去取值
特点:
只会生成一个源码文件,相当于直接将内容拷贝进来,所以不能有同名变量。
运行效率高一点点。耦合性较高,不够灵活。
2). include动态包含
语法:
page属性支持表达式去取值
特点:
生成多个源码文件,相当于方法的调用,可以有同名变量。
耦合度低,比较灵活,效率高。
注:
1、双标签之间不能有任何内容(除非有参数)
Expecting "jsp:param" standard action with "name" and "value" attributes
2、动态包含可以传递参数
获取参数使用:request.getParameter(name)
value属性支持表达式,name属性不支持
The name attribute of the jsp:param standard action does not accept any expressions
5.九大内置对象
// 四大域对象
pageContext.setAttribute("uname1", "zhanggsan");
//request
// session
// application
// 两个输出对象
// out
// response
// 配置对象
// config
// 当前页面对象
//page
// 异常对象 主要当前页面设置了isErrorPage="true"时才能使用
// exception
三.EL表达式
1.注意点
语法:${key } key代表的是存在域对象中的键
注意:el表达式一般操作的是域对象,无法操作变量
取值范围:
从小范围到大范围取,取到为止,若未取到,则一直向大返回查找;若四个范围都未获取到,返回空字符串。
获取指定范围的值:
pageScope、requestScope、sessionScope、applicationScope
pageContext, request, session, application;范围依次是,本页面,一次请求, 一次会话,整个应用程序。
而 EL 默认的查找方式为 从小到大查找,找到即可。当域对象全 找完了还未找到则返回空字符串””。
EL操作对象
获取对象中的属性:${对象.属性名}
注:属性必须提供get和set方法
2. 参考代码
uname:${uname }
requestScope:${requestScope.uname }
str:${str }
EL 对象取值
user对象:${user }
获取user对象中的属性:${user.userName }
EL 集合取值
获取集合:${mylist } ---- ${userList }
获取指定下标的值: ${mylist[0] } ---- ${userList[0].userPwd }
获取集合的长度:${userList.size() }
判断为空empty
判断字符串是否为空:${empty uname } --- ${empty uname1 } --- ${!empty uname }
判断对象是否为空:${empty user }
判断集合是否为空:${empty userList } --- ${empty list2 } --- ${empty list3 }
EL Map取值
获取Map的值:${map }
获取指定key的value:${map.aaa } --- ${map["aaa"] }
EL 运算
${1+1 } -- ${num+1 } -- ${num + num2 }
${num / num2 } ---
EL 比较
${num == 1 } -- ${num >= 10 }
${str1 == str2 } -- ${str1 eq str2 }
${num + 10 > 10 }