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

 

 

 

posted @ 2021-09-22 15:12  TheFool1996  阅读(82)  评论(0)    收藏  举报