zoukankan      html  css  js  c++  java
  • 11 Servlet_03 关键字总结 资源跳转:重定项 键值对 继承类 do-get do-post Request域 Context域 =空针解决方法

    知识点总结:

    1.java里的关键字:

    byte short int long  数据类型 (正整数)
    char  数据类型(单字符型)
    boolesn ture false  布尔类型
    float double   数据类型(小数型)
    public 公共的 开放的 权限修饰符
    class  标记标签(html里的)
    implements   实现(在继承中用到)
    extends  继承(在继承中使用)
    for  for循环
    while while循环
    do    do-while循环
    if else  条件筛选 如果。。。那么。。
    switch case default   switch case语句,最后一个用default
    static  (poblic static void main(String[] args){ })  静态  (使用于主程序)
    void  同上   空集,无效的
    import  输入   导入类库
    package    包(包名)
    break continue  break是跳出循环   continue跳出本次接着循环
    super   超 ,基 ,父  (继承)

    public 公共的 开放的 权限修饰符 (上边有 )

    protected 受保护的 权限修饰符 (不同包中的无关类(无父子关系)是无法访问的)
    默认级别 权限修饰符省略
    私有级别  (设置权限)

    资源跳转:重定项

    打开一个Java页面后首先是这样的

    package com.zhiyou100;
    
    import javax.servlet.Servlet;
    
    public class asdaa {
    }

    然后在asdaa后面加上:  implements Servlet

    之后鼠标移到红线上然后Ait + Enter 再回车回车。

    变为:

    package com.zhiyou100;
    
    import javax.servlet.*;
    import java.io.IOException;
    //跳转界面用到的路径名(在这里完成映射)
    public class asdaa implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override(目前我们用到的就是这个)
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    
        }
    }

    在最长的@下方输入:

            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
    
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
    
            String order = request.getParameter("order");
            if("123".equals(order)){
                response.getWriter().write("该商品目前售价为:10000");
            }else{
                //没有此商品  跳转商品列表界面   http://localhost:8080/day11/find?order=123
                //重定项 sendRedirect("/虚拟目录/请求资源路径都可以")
                //response.getRequestDispatch("/请求资源路径").forward(request,response)
                //获取虚拟目录 context  上下文
                String path = request.getContextPath();
                //System.out.println(path); 不注释这一句就在双引号中加上/day11/
            这里就是重定项:
                response.sendRedirect(path+"/路径名.html");//硬编码现象
    
            }
          //存储数据  key-value  键值对  双列数据结构  单列数据结构
            req.setAttribute("key", "value");
    //资源跳转   内部转发
            req.getRequestDispatcher("/路径名称").forward(req, resp);


        //从request域对象中取出值 key-value   一 一对应
          String username = context.getAttribute("取出的值").toString();

    HttpServlet 继承类(最新最方便的):

    HttpServlet 该类是继承的 把视线只聚焦在服务这一块
    接口实现了Servlet接口,内部的五个功能代码全都封装起来
    对service功能对外是需要实现的(重写的)
    doGet()功能
    doPost()功能
    请求方式:get post delete put...

    do-get和do-postget:


    默认的请求方式就是get请求
    特征:
    1.数据是(显示展示数据长度是有限的数据的大小有限的。)明文展示

    post
    post请求是需要制定的
    特征:
    1.数据在地址栏中看不见
    2.数据的长度几乎不限制
    3.数据的大小不限制
    4.相对于get方式比较安全

    在httpServlet中 重写了service()和自定义其他7种请求方式的服务方法
    在定义Servlet类,实现服务只能任选其中一种,不能并存
    对于service()方法,已经过时了
    一般选择doGet()或者doPost方法

    Request域和Context域的区别:
    HttpServletRequest
    API 常用功能
    获取请求方式
    获取URL路径
    获取web应用名称(虚拟目录)
    获取请求的ip地址
    获取get请求的表单数据

    域对象
    存储数据

    HttpServletRequest类 可以临时性存放一些数据 容器
    存储
    查找(取出)
    删除(移除)
    从A服务中--->B服务中 资源跳转只能使用内部转发 在一次请求中存储数据
    当一次请求结束时,在HttpServletRequest类对象中存储的数据也就消失了。
    ServletContest类 可以长时间存储数据
    只要服务器不关闭,那么在该ServletContext类对象中存储的数据就永远不会消失
    所以一般会把ServletContext域中存储的数据在整个web应用中共享
    是因为该ServletContext类对象只有一个
    存储
    查找(取出)
    删除(移除)

    HttpServlet 继承类创建过程:

    首先打开一个java后台(这个a是我随意起的类名):

    package com.zhiyou100;
    
    public class a {
    }

    在类名a后边输入:  extends HttpServlet  然后回车,会变为:

    package com.zhiyou100;
    
    import javax.servlet.http.HttpServlet;
    
    public class a extends HttpServlet {
    }

    接着在花括号里输入do-get或者do-post  回车,会变为:

    package com.zhiyou100;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class a extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
        }
    }

    这就是创建do-get(do-post)环境。

    get请求方式:


    eg:
    @Override//(现在就在doGet里 或者在 doPost里 最好指定doPost) protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); // String email = request.getParameter("email"); String password = request.getParameter("password"); //封装数据 response.getWriter().write("邮箱" + email + "<br>" +             "密码" + password); }

    post请求方式:

     @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        同上
        }

    这个等号可能产生空指针现象(指向对象不存在但是被引用),将两边颠倒可以避免空指针现象  

    前边可以为空,括号里面不可以

    if ("被赋值的值".equals(前边的值))

    只需了解 不懂:

     @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("UTF-8");
            //super.doGet(req, resp);   //超,基,父
            String mathod = req.getMethod();//请求方式
            String url = req.getRequestURL().toString();//请求URL
            // StringBuffer类  值是可变的                 String类  字符串 值不可变
            //toString()   其他类型值转换成String类型值
            String path = req.getContextPath();//请求虚拟目录
            String ip = req.getRemoteAddr();//请求的ip地址
            //如果是get请求,可以一次性获取表单数据
            String data = req.getQueryString();//获取get请求的表单数据
            //展示获取的请求参数数据
            System.out.println("请求方式"+ mathod);
            System.out.println("当前客户端输出的url:"+ url);
            System.out.println("虚拟目录:"+ path);
            System.out.println("当前远程客户端所在的服务器访问的ip为:"+ip);
            System.out.println("get请求提交的表单数据为:"+data);
    
    
    
        }
    }

     

  • 相关阅读:
    最近几个月的感想
    Fortran 入门——C#调用Fortran DLL
    Fortran 入门——函数调用
    JQueryAjax初体验和一点感想
    【HDU】1796 How many integers can you find
    【SGU】476 Coach's Trouble
    【HDU】2204 Eddy's爱好
    【POJ】1091 跳蚤
    【URAL】1091 Tmutarakan Exams
    【ZOJ】2836 Number Puzzle
  • 原文地址:https://www.cnblogs.com/rxqq/p/13868147.html
Copyright © 2011-2022 走看看