JavaWeb复习
JavaWeb复习
一、JSP
1. Java Server Pages
本质是 Servlet,
过程:JSP 转译成.java文件(Servlet),编译成.class 字节码文件,运行
2. 容器
Tomcat、Jboss、Weblogic、GlassFish、Websphere、Jetty
3. 七大元素
指令:page include taglib
HTML
表达式: <%=%>
声明: <%! %>
注释:<%-- --%>
动作: jsp:useBean jsp:setProperty jsp:getProperty
小脚本: <% %>
4.九大内置对象
域对象:pageContext、request、session、application
out、exception、page、response、config
pageContext.findAttribute() ----page request session application
2)request和 session:
HttpSession session = request.getSession(boolean);
true: 获取session,如果没有获取到,则创建session并返回,否则直接返回session对象。
false: 如果没有获取到,返回null,如果存在则返回session对象
ServletContext application = getServletContext();
<session-config>
<!-- 单位:分钟 -->
<session-timeout>10</session-timeout>
</session-config>
3) out 对象:
PrintWriter out = response.getWriter();
4) exception对象:
在JSP中默认是不能使用的。
如果要使用exception内置对象,则当前JSP页面必须是错误页面(isErrorPage=“false”)
注意:errorPage 和 isErrorPage
errorPage=“error.jsp” :指向错误页面,如果当前页面出现异常,则跳转到error.jsp页面处理
isErrorPage=“true|false”:设置当前页面是否为错误页面。
错误页面的配置:
<error-page>
<error-code>500</error-code>
<location>/scope/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
5) config
用来获取web.xml文件中配置初始化参数
<servlet>
<servlet-name>initjsp</servlet-name>
<jsp-file>/scope/count.jsp</jsp-file>
<init-param>
<param-name>initcount</param-name>
<param-value>100000</param-value>
</init-param>
</servlet>
6) page
当前对象
7) session和cookie
session存储在服务器端,而cookie存在客户端
session实现需要cookie的保存jsessionid
cookie不安全,存储在客户端,文本形式,session在服务器,安全
cookie存字符串,session以对象存储
cookie存储大小有限 session相对大的数据
8) session失效情况
a.超时 (默认1800s )
b.销毁 invalidate()方法
c.关闭浏览器(本质超时)
5. get和post区别
a) get在地址栏传参,post隐式请求体方式传参
b) get不安全的,post安全
c) get传参长度有限的(不支持文件上传),post没有限制 (支持大文件上传的)
d.get可以用于收藏、邮件发送的url。
6. 两种跳转:重定向和转发
a) 地址栏:重定向改变,转发不改变
b) 请求:重定向发出两次请求 转发一次请求
c) 数据传递: 转发是可以共享request对象的数据的,而重定向不可以。
d) 跳转:重定向属于客户端的跳转 转发是服务器端跳转
7. 两种包含include
指令包含<%@include file =“include.jsp”%> 动作包含:<jsp:include >
a. 指令包含,转译时,进行合并成一个.java文件,编译.class 运行 ,同享一个pageContext对象
b.动作包含,各自转译 编译,执行时,调用。分别有两个不同的pageContext
二、Servlet
1. 生命周期
a、加载和实例化:构造方法—1次
b、初始化:init()方法----1次
c、服务:service() 方法----n次
d、销毁:destory()方法 —1次
2.加载和实例时间
a.默认情况下,第一次被请求,加载和实例化。
b.通过web.xml或注解,配置随服务器启动时加载和实例化
<load-on-startup>0</load-on-startup>
3. service() 和 doGet() 和doPost()
service()方法中获取request.getMethod(),提交表单的方法,判断去调用doPost()和doGet();
4. init() 和init(ServletConfig config)
1.如果有参,则其中初始化时,不再调用无参的init()方法
2.获取web.xml配置初始化参数,通过有参的init()方法 config.getInitParametere()
5. destory()方法
三、监听器
要自定义监听器,必须实现ServletContextListener、HttpSessionListener等监听,需要在web.xml中配置或使用@WebListener,才能起作用被容器所加载。
监听器在服务器启动时加载
<listener>
<listener-class>com.wdzl.listener.GlobalListener</listener-class>
</listener>
Session的绑定监听器
class User implements HttpSessionBindingListener{
@Override
public void valueBound(HttpSessionBindingEvent event) {
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
}
}
四、 过滤器
1. 过滤器:
a. 自定义类,实现 Filter 接口。
b. 配置:两种方式:web.xml和注解
web.xml配置方式:
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>com.wdzl.filter.CharsetFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
注解:
@WebFilter(value = "/*",initParams = {@WebInitParam(name = "charset",value = "utf-8")})
public class CharsetFilter implements Filter {
}
2. 生命周期
四个阶段
加载和实例化:构造方法 一次
初始化:init() 一次
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
过滤: 注意request和response类型 n次
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
销毁:一次
public void destroy() {
// TODO Auto-generated method stub
}
3. 启动加载时间
随服务器启动时加载和初始化的。
4. 过滤器链
通过配置多个过滤器,形成过滤器链,栈的方式请求和响应的。
过滤器放行:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//放行 调用下一个过滤器或请求的资源
chain.doFilter(request, response);
}
5.处理乱码
1.过滤器处理乱码,只能处理 post 请求乱码
request.setCharacterEncoding(“utf-8”);
2.get请求乱码:
转码:String str = new String(param.getBytes(“iso-8859-1”),“utf-8”);
修改tomcat配置:servet.xml中,URIEncoding=“utf-8”
3.常见问题:
a.处理乱码的提交方式是否为post
b.请求是否经过过滤器
c.提交的当前jsp页面的编码是否为utf-8
4.响应乱码
response.setContentType("text/html;charset=utf-8");