JavaEE学习-Servlet

Servlet基础

Servle创建

//第一种,不管提交方式
@WebServlet("/s01")//注解,/s01为目录
public class Servlet01 extends HttpServlet{//继承
    @Override//方法重写注解
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //req请求,resp响应
}

...................................................................................................................
//第二种,自动辨识提交方式
@WebServlet("/s02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        get方法提交处理
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        post方法提交处理

    }
}

获取客户端参数

        String url = req.getRequestURL().toString();
        System.out.println("获取客户端请求的完整URL:"+url);

        String uri = req.getRequestURI().toString();
        System.out.println("获取客户端请求的部分URL:"+uri);

        String queryString = req.getQueryString().toString();
        System.out.println("获取客户端请求行中的部分参数:"+queryString);

        String method = req.getMethod().toString();
        System.out.println("获取客户端的请求方式:"+method);

        String protocol = req.getProtocol().toString();
        System.out.println("获取Http版本号:"+protocol);

        String webapp = req.getContextPath().toString();
        System.out.println("获取webapp名字:"+webapp);

        String uname = req.getParameter("name");
        String psw = req.getParameter("password");
        System.out.println("用户名:"+uname+"\n密码:"+psw);

        String[] ff = req.getParameterValues("hob");
        System.out.println(ff.length);

Servlet生命周期

@WebServlet("/s03")
public class Servlet03 extends HttpServlet {
    @Override
    public void destroy() {//结束,只执行一次
        System.out.println("destroy.....");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {//开始只执行一次
        System.out.println("init.....");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("service.....");
        req.setCharacterEncoding("UTF-8");
        System.out.println(req.getParameter("name"));//取得服务器get/post元素
        System.out.println(req.getParameter("password"));

//        请求跳转,不改变地址,服务器跳转(一次请求)
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

重定向

@WebServlet("/s04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.service(req, resp);
//    重定向,地址改变,客户端跳转(两次请求),对象不共享
        resp.sendRedirect("index.jsp");
    }
}

客户端&服务端编码格式设置

@WebServlet("/s05")
public class Servlet05 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        设置服务端编码
        resp.setCharacterEncoding("UTF-8");
//        设置响应类型,客户端编码格式
        resp.setHeader("content-type","text/html;charset=UTF-8");

//同时设置客户端与服务端编码格式:
// resp.setContentType("text/html;charset=UTF-8");

//        输出流方法一,两种方法不能同时存在
        PrintWriter writer = resp.getWriter();
        writer.write("<h2>hello 05<h2>");
        writer.close();

//         输出流方法二
//        ServletOutputStream out = resp.getOutputStream();
//        out.write("<h2>hello 00</h2>".getBytes());
//        out.close();
    }
}

cookie创建及到期时间

@WebServlet("/cook01")
public class Servlet06 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        创建cookie对象,设置cookie到期时间
        Cookie cookie01 = new Cookie("name", "admin");
        Cookie cookie02 = new Cookie("age", "18");
        Cookie cookie03 = new Cookie("sex", "woman");
//        设置失效时间
        cookie01.setMaxAge(-1);//默认,随浏览器页面生成、消亡
        resp.addCookie(cookie01);

        cookie02.setMaxAge(7*24*60);//存在时间为7*24*60S
        resp.addCookie(cookie02);

        cookie03.setMaxAge(7*24*60);//存在时间为7*24*60S
        resp.addCookie(cookie03);
    }
}

cookie获取与删除

@WebServlet("/cook02")
public class Servlet07 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      cookie的获取
        Cookie[] cooks = req.getCookies();
        if (cooks != null && cooks.length > 0) {
            for (Cookie cook : cooks) {
                System.out.println("名称:" + cook.getName() + "值:" + cook.getValue());
            }
//            删除cookie
            Cookie cook = new Cookie("age",null);
            cook.setMaxAge(0);
            resp.addCookie(cook);

        }
    }
}

cookie注意点

@WebServlet("/cook03")
public class Servlet08 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //cookie只存在当前浏览器,不跨浏览器,不跨电脑
        //cookie不能设置中文,中文需进行编码和译码
        //cookie有存储上线
        //cookie在同域名和路径下出现相同属性会覆盖
        String name = "姓名";
        String value = "张三";

        //编码
        name = URLEncoder.encode(name);
        value = URLEncoder.encode(value);

        resp.addCookie(cook);
        Cookie cook = new Cookie(name,value);
        
        //cookie路径
        cook.setPath("/");
        //"/"当前项目下任何项目都能访问,"/s01"s01项目下任何项目都能访问,"/s02/cook"只能在/s01/cook目录下才能访问改对象

        Cookie[] cooks = req.getCookies();
        //获取时解码
        String qname = URLDecoder.decode(cooks[0].getName());
        String qvalue = URLDecoder.decode(cooks[0].getValue());

    }
}


HttpSession对象

@WebServlet("/se01")
public class Session01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取或创建Session对象,当Session存在时获取,不存在时创建
        HttpSession session = req.getSession();

        //获取会话标识符
        System.out.println("会话标识符:"+session.getId());

        //会话开始时间
        System.out.println("开始会话时间:"+session.getCreationTime());
        //是否是新session
        System.out.println("是否是新的:"+session.isNew());
        //最后一次访问时间
        System.out.println("最后一次访问时间:"+session.getLastAccessedTime());
    }
}

Session域对象

@WebServlet("/se03")
public class Session03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        //向域对象添加数据
        session.setAttribute("name","zs");
        //从域对象获取数据
        System.out.println(session.getAttribute("name"));
        //从域对象移除数据
        session.removeAttribute("name");
    }
}

Session作用域

@WebServlet("/se02")
public class Session02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        //req作用域
        req.setAttribute("requestMsg","这是request作用域");

        //session作用域
        session.setAttribute("sessionMsg","这是session作用域");
    }
}

Session的销毁

@WebServlet("/se04")
public class Session04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //TomCat服务器设置session默认到期时间30分钟,即该期间内没有做任何操作,可手动修改(不建议),在安装目录conf/web.xml中<session-timeout>
        //手动设置
        HttpSession session = req.getSession();

        //设置session最大不活动时间
        session.setMaxInactiveInterval(15);//15秒

        //获取session最大不活动时间
        int time = session.getMaxInactiveInterval();
        System.out.println(time);

        //手动销毁
        session.invalidate();
    }
}

ServletContext对象

@WebServlet("/scn01")
public class ServletCon01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//对象获取
        //通过request对象获取
        ServletContext servletContext = req.getServletContext();

        //通过session对象获取
        ServletContext servletContext1 = req.getSession().getServletContext();

        //通过servletConfig对象获取
        ServletConfig servletConfig = getServletConfig();
        ServletContext servletConfig1 =  servletConfig.getServletContext();

        //直接获取
        ServletContext servletContext2 = getServletContext();

//常用方法
        //获取项目存放的真实路径
        String realpath = req.getServletContext().getRealPath("/");
        System.out.println(realpath);

        //获取当前服务器版本信息
        String serverInfo = servletContext.getServerInfo();
        System.out.println(serverInfo);
    }
}

文件上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<!--
    表单类型:
        普通表单:enctype="application/x-www-form-urlencodeed"(默认)
        二进制表单:enctype="multipart/form-data"(文件上传需设置)
    提交方式:GET/POST
        文件上传用POST
    表单元素:文件域
        type="file"
-->
    <form action="uploadServlet" enctype="multipart/form-data" method="post" name="upload">
        姓名:<input type="text" name="uname">
        头像:<input type="file" name="myfile">
        <button>提交</button>
    </form>
</body>
</html>
@MultipartConfig //文件上传必写该注解,否则所有参数都无法获取
@WebServlet("/uploadServlet")
public class uploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//                设置请求编码格式
        req.setCharacterEncoding("UTF-8");

        //获取普通文本框
        String uname = req.getParameter("uname");

        //        得到part对象
        Part part = req.getPart("myfile");
        //得到上传文件名
        String fileName = part.getSubmittedFileName();

        //设置上传文件到什么路径
        String uploadPath = req.getServletContext().getRealPath("/upload/");
        //上传文件
        part.write(uploadPath+fileName);

    }
}


文件下载

超链接下载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>超链接下载</title>
</head>
<body>
<!--
    a标签在遇到能识别的资源时会直接打开,遇到不能识别的资源时会进行下载
-->
<a href="test.txt">TXT文本</a>//打开
<a href="test.png">图片</a>//打开
<a href="test.rar">压缩包</a>//下载
</body>
</html>

后台实现下载

<form action="downLoadServlet">
    <input type="text" name="fileName">
    <button>下载</button>
</form>
@WebServlet("/downLoadServle")
public class downLoadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码
        req.setCharacterEncoding("UTF-8");

        //获取文件下载路径
        String path = getServletContext().getRealPath("/");
        //获取要下载的文件名
        String name = req.getParameter("fileName");
        //通过路径得到file对象
        File file = new File(path + name);
        //判断file对象是否存在,且是否时标准文件
        if (file.exists() && file.isFile()){
            //设置响应类型
            resp.setContentType("application/x-msdownload");
            //设置头信息
            resp.setHeader("Content-Disposition","attachment;filename="+name);
            //得到输入流
            InputStream is = new FileInputStream(file);
            //得到输出流
            ServletOutputStream os = resp.getOutputStream();
            //定义byte数组
            byte[] car = new byte[1024];
            //定义长度
            int len = 0;
            //循环输出
            while ((len = is.read(car)) != -1){
                os.write(car, 0, len);
            }
            //关闭流,释放资源
            os.close();
            is.close();
        }else {
            resp.setContentType("text/html;charset=UTF-8");
            resp.getWriter().write("<h2>文件不存在,下载失败!</h2>");
            resp.getWriter().close();

    }
}
posted @ 2022-04-03 16:01  YL_Hello  阅读(30)  评论(0)    收藏  举报