servlet 总结

  1. Servlet->GenericServlet->HttpServlet
    ServletRequest,ServletResponse ->HttpServletRequest,HttpServletResponse.
  2. 在web.xml文件中,设置
<servlet>//注册一个servlet
    <servlet-name>HelloServlet</servlet-name>//起一个名字
    <servlet-class>science.yueling.servlet.HelloServlet<servle t-class>//限定到一个class中
</servlet>

<servlet>
    <servlet-name>HelloServlet</servlet-name>//与之前的servlet名字相呼应
    <url-pattern>/Hello</url-pattern>//指定对外访问的路径
</servlet>

3 . 利用service获得参数并进行相应的处理,处理request和response.

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("uname");
        String password = req.getParameter("upwd");

        System.out.println("用户名  ==》  " + userName);
        System.out.println("密码 ==》 " + password);
    }

4 . 在某些情况下利用doGet和doPost方法替代service可以更安全更有针对性。
5 . 转发,一些情况下可能比重定向(sendRedirect)更好用。
但是只能在本应用中转发,重定向可以转到任何地方。

String forwards = null;
forwards = "/success.jsp";
RequestDispatcher rd = req.getRequestDispatcher(forwards);//重定向到指定链接
rd.forward(req,resp);//执行

6 . servlet 尽量使用局部变量或者使用同步,不然会出现线程不安全的问题。
7 . 一个servlet可以映射到多个url当中。
8. 可以使用地址通配符描述url-pattern。
9. 一切都是 Servlet,访问某个静态资源也不过是访问某个缺省Servlet。
10. < load-on-startup>2< /load-on-startup>决定了启动时就初始化的顺序。
11. ServletContext存储的数据可以在多个用户之间共享,利用ServletContext做数据中转。

//1
ServletContext sc = getServletContext();
sc.setAttribute("key","value");
//2
String str = (String)sc.getAttribute("key");

12 . 转发,但是链接没有变

ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/servlet");//必须以斜线开头,代表当前应用的路径。
rd.forward(request, response);

13 . 文件传输:

ServletContext sc = getServletContext();
String realPath = sc.getRealPath("/WEB-INF/classes/27.jpg");//src文件结构下,得到真实路径
InputStream in = new FileInputStream(realPath);

String filename  = realPath.substring(realPath.lastIndexOf(File.separator)+1);//得到文件缀

response.setHeader("Content-Type", "application/octet-stream");//清空缓存
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//声明下载,将文件转码,防止编码导致的问题。

OutputStream out = response.getOutputStream();

        int len = -1;
        byte b[] = new byte[1024];//以二进制格式输出
        while((len=in.read(b))!=-1){
            out.write(b, 0, len);
        }
        in.close();
        out.close();

14 . 利用文件流和Properties 对象获取.properties文件的属性。
15. 输出中文信息,要以UTF-8输出,但是需要提前设置相应头告知浏览器文本格式。

//字节流
response.setContentType("text/html;charset=UTF-8");
ServeletOutputStream out = response.getOutputStream();
out.write(str.getBytes("UTF-8"));
//字符流
//既可以改变字符流查的码表,还能告知浏览器用什么解码。
response.setContentType(text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(str);

16 . 输出验证码图像:

        int width = 120;
        int height = 25;

        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//图片类型

        Graphics g = image.getGraphics();//创建画布
        g.setColor(Color.BLUE);//选择颜色
        g.drawRect(0, 0, 120, 25);//画矩形
        g.setColor(Color.YELLOW);
        g.fillRect(1,1,width-2, height-2);//填充
        g.setColor(Color.GRAY);
        Random r = new Random();
        g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
        //写验证码
        g.setColor(Color.RED);
        g.setFont(new Font("宋体", Font.ITALIC|Font.BOLD, 19));
        g.drawString(r.nextInt(10)+"", 20, 20);

        ImageIO.write(image, "jpg", response.getOutputStream());

17 . 定时刷新页面。

resp.setContentType("text/html;charset=UTF-8");
resp.setHeader("Refresh", "4;URL=http://localhost:8080/LoginTest2/show.jsp");
resp.getWriter().write("登录成功,4秒后跳转到主页");

18 . 设置缓存时间,一般缓存静态资源,动态资源不要缓存

response.setDateHeader("Expires", System.currentTimeMillis()+1*60*60*1000);

19 . 字节流和字符流,getOutputStream,getWriter(),只能用其中一个,字节流功能都能实现,但字符流方便,response的流用完后自动关闭。
20. 常用方法。

        String method = request.getMethod();//请求方式
        String uri = request.getRequestURI();//    /day08_01_request/servlet/RequestDemo1
        String url = request.getRequestURL().toString();//  http://localhost:8080/day08_01_request/servlet/RequestDemo1
        String protocal = request.getProtocol();//客户端使用的协议
        String remoteIp = request.getRemoteAddr();//来访者的ip
        int port = request.getRemotePort();// 随机的
        String queryString = request.getQueryString();//GET方式:/day08_01_request/servlet/RequestDemo1?username=abc&password=123

21 . include只会包含正文,不会包含头信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值