Servlet应用及案例

学习目标:

1.ServletContext对象
2.ServletConfig对象
3.过滤器
4.文件上传/下载
5.验证码(实现/点击切换)

学习内容:

一、ServletContext对象

获得ServletContext对象:getServletContext();//父类GenericServlet中定义

页面传值:
    request:只能是同一次请求下(转发)
    session:只要是同一个客户端请求,共享这个session
    ServletContext:同一个项目下,多个客户端共享

ServletContext对象能做什么?
1.获得服务器中某个file的位置(访问地址/真实地址)
    context.getContextPath();web应用的访问地址
    context.getRealPath("/upload");web应用中某个目录的真实位置

2.页面传值(访问同一个web应用的所有客户端都共享)
    context.setAttribute("uName","fanfan");//存储值
    getServletContext().getAttribute("uName");//获得值
    getServletContext().removeAttribute("uName");//移除uName对应值

3.获得全局初始化参数
    context.getInitParameterNames();//获得所有配置在web.xml中的param-name
    context.context.getInitParameter(name);通过param-name获得param-value

二、ServletConfig对象

1.使用该对象获得servlet的类路径
2.使用该对象获得具体的servlet的参数

三、过滤器

1.是什么?
过滤器(filter)是浏览器与访问资源直接的一道过滤技术
2.有啥用?
帮资源进行划分,如果是受限资源则不能够直接进行访问
3.使用过滤器
   a.导包 javax-servlet-api.jar
  b.创建一个java类并实现javax.servlet.Filter接口
  c.通过doFilter()进行过滤操作,FilterChain对象中的doFilter()表示放行
  d.配置过滤器(设置需要过滤的资源)

4.定义过滤器规则
  a.精确过滤   /MyFileter
   b.后缀过滤    *.html
  c.通配符过滤 /*      /aaa/bbb/*

5.配置过滤器的两种方式
   方式一:在web.xml中进行filter的配置  (推荐使用)
     方式二:在filter中定义@WebFilter("/*")

6.配置过滤器的两种方式优先级
    1.所有的过滤器都配置在web.xml中,优先级:从上往下加载
    2.所有的过滤都用@WebFilter注解, 优先级:自定义的Filter类字母的字典顺序
    3.既有web.xml的过滤器配置,又有@WebFilter注解配置 优先级:优先执行web.xml中的过滤器
    4.在web.xml中与@WebFilter注解相同时,过滤两次(不推荐)

7.过滤器分类
   1.前置:在放行前执行的过滤操作
   2.后置:在放行后执行的过滤操作
   3.环绕:在放行前后都有执行过滤操作

8.过滤器链
   在同一个服务器资源(Servlet类)上可以添加多个过滤器,当用户请求资源时,会依次执行每一个过滤器,然后再执行目标资源,再依次通过过滤器响应客户端请求
   优先级:参考第6点

9.过滤器案例
   1.编码设置
     2.登录过滤

案例:

//CheckLoginServlet
@WebServlet(name = "CheckLoginServlet", value = "/CheckLoginServlet")
public class CheckLoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uid = req.getParameter("uid");
        String pwd = req.getParameter("pwd");
        UserService service = new UserServiceImpl();
        User user = service.login(uid, pwd);
        if (user!=null) {
            req.getSession().setAttribute("user",user);
            resp.sendRedirect("/IndexServlet");
        }else {
            req.getRequestDispatcher("login.html").forward(req,resp);
        }
    }
}
//IndexServlet
@WebServlet(name = "IndexServlet", value = "/IndexServlet")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        User user =(User) (req.getSession().getAttribute("user"));
        out.println("欢迎:"+user.getUsername());
        out.flush();
        out.close();
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
    <form action="/CheckLoginServlet" method="post">
        <p><input type="text" name="uid" placeholder="请输入用户名"></p>
        <p><input type="password" name="pwd" placeholder="请输入密码"></p>
        <p><input type="submit" value="登录"></p>
    </form>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyainiyaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值