Servlet原理
Servlet原理
ServletContext
共享数据
1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 2 // this.getInitParameter(); 初始化参数 3 // this.getServletConfig();Servlet配置 4 // this.getServletContext();Servlet上下文 5 ServletContext context = this.getServletContext(); 6 String username = "小王";//数据 7 context.setAttribute("username",username); 8 //将一个数据保存在ServletContext中,名字为:username值:username 9 10 }
1 @Override 2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 3 ServletContext context = this.getServletContext(); 4 String username = (String) context.getAttribute("username"); 5 resp.setContentType("text/html"); 6 resp.setCharacterEncoding("utf-8"); //设置显示字符和类型 否则网页会出现乱码 7 resp.getWriter().print("名字"+username); 8 } 9 10 @Override 11 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 12 doGet(req, resp); 13 } 14 }
1 <servlet> 2 <servlet-name>hello</servlet-name> 3 <servlet-class>com.kuang.servlet.HelloServlet</servlet-class> 4 </servlet> 5 <servlet-mapping> 6 <servlet-name>hello</servlet-name> 7 <url-pattern>/hello</url-pattern> 8 </servlet-mapping> 9 <servlet> 10 <servlet-name>getc</servlet-name> 11 <servlet-class>com.kuang.servlet.GetServlet</servlet-class> 12 </servlet> 13 <servlet-mapping> 14 <servlet-name>getc</servlet-name> 15 <url-pattern>/getc</url-pattern> 16 </servlet-mapping>
简单应用
文件下载
1.获取下载文件的路径
2.下载文件名
3.设置浏览器下载文件(Content-Disposition)
4.获取下载文件的输入流
5.创建缓冲区
6.获取OutputStream对象
7.将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端
1 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 2 // 1.获取下载文件的路径 3 String realPath = "F:\\IDEA\\Javawebmaven\\javaweb-02-servlet\\servlet-02\\src\\main\\resources\\132231.jpg"; 4 // 2.下载文件名 5 String fileName = realPath.substring(realPath.lastIndexOf("\\")+1); 6 // 3.设置浏览器下载文件(Content-Disposition) 7 resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")); 8 // 4.获取下载文件的输入流 9 FileInputStream in = new FileInputStream(realPath); 10 // 5.创建缓冲区 11 int len = 0; 12 byte[] buffer= new byte[1024]; 13 // 6.获取OutputStream对象 14 ServletOutputStream out = resp.getOutputStream(); 15 // 7.将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端 16 while ((len=in.read(buffer))>0){ 17 out.write(buffer,0,len); 18 } 19 in.close(); 20 out.close(); 21 } 22 23 @Override 24 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 25 doGet(req, resp); 26 }
验证码
1 @Override 2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 3 //让浏览器自动刷新 4 resp.setHeader("refresh","3"); 5 //在内存中创建图片 6 BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_3BYTE_BGR); 7 //得到图片 8 Graphics2D g = (Graphics2D) image.getGraphics(); 9 //设置图片背景颜色 10 g.setColor(Color.BLUE); 11 g.fillRect(0,0,80,20); 12 //给图片数据 13 g.setColor(Color.WHITE); 14 g.setFont(new Font(null,Font.BOLD,20)); 15 g.drawString(makeNum(),0,20); 16 //告诉浏览器这个请求用图片的方式打开 17 resp.setContentType("image/jpg"); 18 //网站存在缓存,不让浏览器缓存 19 resp.setDateHeader("exprirs",-1); 20 resp.setHeader("Cache-Control","no-cache"); 21 resp.setHeader("Pragma","no-cache"); 22 //把图片写给浏览器 23 ImageIO.write(image,"jpg", resp.getOutputStream()); 24 25 26 } 27 private String makeNum(){ 28 Random random = new Random(); 29 String num = random.nextInt(9999999) + ""; 30 StringBuffer sb = new StringBuffer(); 31 for (int i = 0; i < 7-num.length(); i++) { 32 sb.append("0"); 33 } 34 num= sb.toString() + num; 35 return num; 36 }
实现重定向
登陆跳转页面重定向实现
1 @Override 2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 3 //处理请求 4 String username = req.getParameter("username"); 5 String password = req.getParameter("password"); 6 System.out.println(username+":"+password); 7 8 resp.sendRedirect("/s2/success.jsp"); 9 } 10 11 @Override 12 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 13 doGet(req, resp); 14 }
<form action="${pageContext.request.contextPath}/login" method="get"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"> <br> <input type="submit"> </form>
请求转发实现登陆页面跳转
1 @Override 2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 3 req.setCharacterEncoding("utf-8"); 4 resp.setCharacterEncoding("utf-8"); 5 String username = req.getParameter("username"); 6 String password = req.getParameter("password"); 7 String[] hobbys = req.getParameterValues("hobbys"); 8 System.out.println("---------------------------"); 9 System.out.println(username); 10 System.out.println(password); 11 System.out.println(Arrays.toString(hobbys)); 12 System.out.println("---------------------------"); 13 //通过请求转发 14 req.getRequestDispatcher("./success.jsp").forward(req,resp); 15 }
1 <%--以post方式提交表单,提交到login请求--%> 2 <form action="${pageContext.request.contextPath}/login" method="post"> 3 用户名:<input type="text" name="username"><br> 4 密码: <input type="password" name="password"><br> 5 爱好: 6 <input type="checkbox" name="hobbys" value="女孩">女孩 7 <input type="checkbox" name="hobbys" value="代码">代码 8 <input type="checkbox" name="hobbys" value="游戏">游戏 9 <input type="checkbox" name="hobbys" value="电影">电影 10 <input type="submit"> 11 12 </form>
Cookie
Session