servlet
Servlet = Server + Applet
服务 小程序 基于java的线程实现
Servlet的init:该方法只执行一次,
service: 每次请求都执行,
destory:在停止服务器时执行用于释放资源。
生命周期:
创建、初始化(init)、服务(service)、销毁(destory)
- Servlet 初始化后调用 init () 方法。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 销毁前调用 destroy() 方法。
核心的Service的方法(请求、响应)
HttpServletRequest: req | HttpServletResponse: resp | |
作用 | 请求 | 响应 |
方法 | getParamter(name): 根据name获取单个值 getParamterValues(name): 根据name获取多个值。 getParamterMap(name):根据name获取多个值。(基于对象属性) getPart():上传 setCharacterEncoding(“utf-8”): 请求编码 | setCharacterEncoding(“utf-8”)响应编码 setContentType(“text/html;charset=utf-8”): 响应头类型和编码 |
Servlet的配置:xml和annotation
Xml:
<servlet>
<servlet-name>
<serlvet-class>
</servlet>
<servlet-mapping>
<servlet-name>
<url-pattern>/
</servlet-mapping>
注解: @WebServlet( urlPatterns = {“/**”,”/**”})
JSP
JSP: 是英文 Java Server Page ---->Java 服务器 页面(动态页面:实现数据的交互)
Jsp的语法:
1:<% java代码 %>(俗称:jsp小脚本:java代码)
2:<%! 声明语句 %>
3:<%= 表达式 %>
JSP的page指令
名称 | 作用 | 说明 |
ContentType | 设置服务器给jsp的响应编码 | 服务器给jsp |
PageEncoding | 页面请求的编码方式 | Jsp给服务器的 |
Language | 设置当前页面动态语言 | 目前只有java |
Import | 导包 | 可以有多个 |
ErrorPage | 如果出现异常则要跳转到的页面 | 配置局部异常,jsp页面的异常 |
isErrorPage | True:表示该页面进行错误处理 | |
Buffer | 设置页面缓存大小,默认 | 默认为8kb |
Autoflush | 自动刷新,默认ture | |
IsELIgonre | 是否或略el表达式 默认false:支持 | |
IsThreadSeal | 是否是线程安全 默认是false | |
Session | 是否支持会话:session 默认true |
注释
Jsp的注释: <%-- 注释 --%> 特点:不会进行网络传输。
Html: <!-- 注释--> 特点:会进行网络传输(垃圾代码)
JSP的内置对象9个
1:pageContext
2:request
3:session
4:application
5:out
6:config
7:exception(异常的处理方式: 1:抛出到页面 2:记录到日志文件)
8:page
9:response
JSP四个作用域对象
PageContext request session application: (作用范围:从小到大)
pageContext: 只在当前页面生效(private)
request: 针对一个请求(默认) 如果一个新的请求,则不能获取数据。
Session: 针对一个会话(可以是多个请求: public)
Application:应用程序(全局:static)
转发和重定向(重点)
区别 | 转发 | 重定向 |
方法 | Req.getRequestDispatcher().forward(“本地资源或当前项目”) | Resp.sendRedirect(“url:可以内部也可以是外部”) |
对象 | Request(请求) | Response(响应) |
次数 | 一次 | 多次 |
服务器内部 | 客户端 | |
传递数据 | 可以 | 不能 |
地址栏 | 不会变化(安全) | 会变化(不安全) |
JSTL
作用:
1: 简化业务逻辑
2; 与html”无缝集成”
<%-- 迭代:必须放在作用域中 --%>
<c:forEach items="${sss}" var="str">
${str}<br>
</c:forEach>
<%---基本语法 --%>
<c:forEach begin="1" end="10" var="i">
<font color='blue'>${i}</font>
</c:forEach>
<c:if test="${5>13}">
ok
</c:if>
<c:choose>
<c:when test="${5>13 }">
好的
</c:when>
<c:otherwise>
不好
</c:otherwise>
</c:choose>
会话和跟踪技术:(因为HTTP是个无状态的协议)
1:客户端:cookie(中文:曲奇)
2:服务器:session(会话)
会话:一个用户在访问web程序时,客户端与服务器的多次请求和响应的过程。
Session:保留用户在访问网站时的用户信息(跨页面的)
Session的创建是通过request(请求)对象获取的 getSeesion()
request.getSession(): 如果当前没有session则创建一个新的session,如果有则返回该session。
request.getSession(true); 如果当前没有session则创建一个新的session,如果有则返回该session。
request.getSession(false); 如果当前没有session则返回一个null,如果有则返回该session。
记住:不带参数的getSession()等效于getSession(true)
Session的有效期默认值是30分钟,我们可以通过web.xml进行修改和设置:(单位是分钟)
<session-config>
<session-timeout>5</session-timeout>
</session-config>
Session:
保存数据到session中:setAttribute(key,Object)
获取 getAttribute(key) ${key} ${sessionScope.key}
移除sesssion : removeAttribute(key)
清空所有session
Filter(过滤器、拦截器)
Web组件中的Servlet有三个子组件:
1:Servlet: 作用:负责请求和响应(重点:了解执行过程)
2:Fiilter: 作用:进行拦截(相同的功能进行AOP)(重点:了解原理)
区别 | Servlet | Filter |
作用 | 请求和响应 | 过滤(筛选),抽取共性的代码 |
配置 | @WebServlet(“/list”) | @WebFilter(“/list”) |
执行时机 | 请求时 | 请求前 |
多个 | 无顺序:根据url | 有顺序: xml: <filter-mapping> 注解:根据名称的顺序 |
listener(监听器)
监听器的实现步骤:
1:创建类实现相应的域对象的监听器
2:重写相应的方法
3:配置web.xml 或:通过@WebListener
监听器的作用:
自动实现对域对象的创建、属性(创建、添加、修改和移除等)的操作。
作用域: pageContext request session application
监听器对:request session application
特点:自动执行
例如:自动实现日志的处理:
servlet、filter、listener区别
区别 | Servlet | Filter | Listener |
功能 | 请求和响应 | 过滤 | 自动监听程序的运行 |
Annotation | @WebServlet(“/list”) | @WebFilter(/*) | @WebListener |
Xml | <serlvet> <servlet-name> <servlet-class> </servlet> <serlvet-mapping> | <filter> name Class </filter> <filter-mapping> | <listener> |
调用方式 | 根据ulr | 自动:根据过滤规则 | 自动调用 |
传值:
get和post区别
get和post ---> HttpServlet : doGet 和doPost
doGet:处理get请求: 除了method= post的所有请求
doPost:处理<form method=’post’>
Service: 方法是javax.servlet.Servlet接口定义的方法(处理所有请求)
Get如何传值:?号传值: url?参数1=值&参数2=值&....
区别 | Get | Post |
传值方式 | 地址栏:明文 | 表单域:隐藏 |
安全 | 低 | 高 |
数据量 | 最大是2M | 浏览器大于get方式 |
过滤器 | No | Yes |