Servlet
目录
Servlet
Servlet技术
servletConfig
web.xml的配置信息
<init-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</init-param>
ServletConfig servletConfig = getServletConfig();
String name = servletConfig.getInitParameter("name")
servletContext(域对象)
全局参数
<context-param>
<param-name>webName</param-name>
<param-value>ServletHello</param-value>
</context-param>
ServletContext sc = getServletContext();
String s = sc.getInitParameter("webName");
System.out.println(s);
获取绝对路径
ServletContext sc = getServletContext();
sc.getRealPath() # web下的目录
域对象(存储数据的对象就是域对象 )
servletncontext 本身就是域对象,作用域整个工程
servletcContext.setAttribute("xxx","xxx")
String name = (String) servletContext.getAttribute("name")
request response
getContextPath() #获取工程名
getMethod()
getRequestURL()
getSession()
getParamter() 根据键获取参数
getParamterValues("xx") 获取请求参数多个值 通一个键的情况下
getStatus(int sc) 设置响应码
response.setStatus(200)
PrintWriter writer = response.getWriter() #常用
writer.close();
response.getwriter().write("xxx") #只能放纯文本
response.getwriter().println("xxx") #这个常用
ServletOutputStream ops = response.getOutputStream()
乱码问题
# 解决post提交参数乱码问题 必须放到得到参数之前
request.setCharacterEncoding("utf-8")
#response响应客户端的乱码
response.setCharacterEncoding("utf-8") # 只会改变缓冲流的字符编码格式,没鸟用
response.setContentType("text/html;charset=UTF-8") #这个方法可以
转发 & 重定向
转发的方法是 request对象中的方法
getRequestDispatcher("success.html").forward(request,response)
重定向
response.sendRedirect('xxx.html')
Cookie & Session
Cookie
不设置持久化时间 浏览器关闭时 则cookie会被清除, 否则会存到浏览器硬盘文件夹中
- 增
Cookie c1 = new Cookie("login","True");
c1.setMaxAge(10*60); //设置了十分钟,过了这个时间浏览器自动删除cookie信息 秒
response.addCookie(ck);
- 删
Cookie c1=new Cookie("name", "tom");
c1.setMaxAge(0);
c1.setPath("/Day29/CookieDemo");
response.addCookie(c1);
- 查
## 获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if("name".equals(cookie.getName())) {
System.out.println("值:"+cookie.getValue());
}
}
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("name")) {
System.out.println("值:"+cookie.getValue());
}
}
Session(域对象)
一次会话:打开浏览器到关闭
域对象 范围一次会话 (servletContext 域对象 全局)
//第一步 得到session对象
HttpSession session = request.getSession();
//第二步 往session对象中放置数据 所有域对象 方法名都相同 就是调用的对象名不同
session.setAttribute("sex", "男");
//第三步 session取数据
String sex=(String) session.getAttribute("sex");
System.out.println("域对象中的数据"+sex);
//销毁session
session.invalidate();
//移除域对象中数据
session.removeAttribute("sex");
配置Session
<session-config>
<session-timeout>30</session-timeout>
</session-config>
过滤器
在Servlet 和 JSP之前执行
拦截 Servlet 和 Jsp 的资源
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest hsRequest=(HttpServletRequest) req;
HttpSession session = hsRequest.getSession();
String username=(String) session.getAttribute("username");
if(username!=null) {
chain.doFilter(req, resp);//放行
}else {
req.getRequestDispatcher("login.html").forward(hsRequest, resp); //不放行
}
}
// ((HttpServletResponse) resp).sendRedirect("login.jsp");
/index.jsp
/s/*
*.jsp
监听器
监听某个对象状态变化的组件
相关概念
-
事件源:被监听的对象(request,session,servletContext)(事件源发生状态变化时,触发监听器)
-
监听器:监听事件源对象 事件源对象的状态变化都会触发监听器
-
响应行为 :监听器听到事件源的状态变化时 所涉及的功能代码
监听器有哪些:
-
第一维度 : request , session ,sevletContext
-
第二维度 : 监听内容区分:监听与对昂的创建与销毁,监听域对象属性的变化