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会被清除, 否则会存到浏览器硬盘文件夹中

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

  • 第二维度 : 监听内容区分:监听与对昂的创建与销毁,监听域对象属性的变化

posted @ 2020-04-21 14:18  tangshuo!  阅读(122)  评论(0编辑  收藏  举报