zoukankan      html  css  js  c++  java
  • servlet1



    5 Map<String, String[]> map = request.getParameterMap();
    Set<String> set = map.keySet();
    for(String str : set){
    String[] parameter = map.get(str);
    System.out.print("name:"+str+"--- value:");
    for(String p:parameter){
    System.out.print(p+" ");
    }
    System.out.println();
    }

    这里的map是个泛型,map是个容器,肯定有两个参数的,这里我们用的是一个key对应了多个value,所以是string,string[],平常是string,string就行了。
    map.keySet();这是获得Map中所有的key值,并且放到set中,
    for(String str : set)这里for叫增强for循环,便利所有的set对象中的数据。
    6 相比较迭代器
    Iterator只有一个参数,三个方法
    hasNext()
    如果仍有元素可以迭代,则返回 true。
    E next()
    返回迭代的下一个元素。
    void remove()
    从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
    7
    Enumeration<String> names= request.getHeaderNames();
    while(names.hasMoreElements()){
    String name = names.nextElement();
    System.out.println(name+"-----"+request.getHeader(name));
    }
    这个和迭代器差不多。
    8 我们对于3个API的使用
    第一个API是基础的API,第二个API是英文版的J2EE的API,第三个API是中文版的J2EE的API。
    9 我们的API 中的大量的类,对象的方法。
    但是如果我们在API找不到的类怎么办,我们在网上找.jar包,别人写好的类。(jar包就行别人写好的API中没有的类)
    10 面向过程的东西发展到面向过程的方法,任何东西的学习都有规律。学霸都不是特别刻苦的人。
    开发java的同时,完成自己的人生。
    11 protect.这个关键字,如果子类继承了之后变为了private属性。还是protect孙子可以使用么。
    12 你直接用地址栏写参数,然后直接访问参数的时候,只能用字符串,而你用设置属性的而doget方式传输,但是这样就可以了用object,任意类型传值。
    13 火狐浏览器的网络的全部里边能看见你的get的几次请求,或者说post的几次请求。
    14 重定向和转发的区别
    (1)转发服务器的刷新,1次请求,可以地址栏传参。
    request.getRequestDispatcher("/ServletTest02").forward(request, response);
    (2)重定向表示客户端的刷新,2次请求,不能地址栏传参。
    //response.sendRedirect("index.jsp");
    15 HttpSession session 会话技术
      仅适合于http协议,是http协议特有的。
      Session是服务器和客户端建立连接后,服务器自动产生的。
      其实就是服务器为每个访问服务器的浏览器开辟的单独的内存空间。
    如何获取Session对象:request.getSession();
      
    getMaxInactiveInterval()最长活跃时间。
    getLastAccessedTime()最后一次访问时间。
    session.invalidate();使失效
    session.setMaxInactiveInterval(5);并且可以控制失效时间。Tomcat中conf中web.xml里修改时间。web.xml里修改时间。
    setAttribute
    getAtttibute
    sesstion的属性只限于当前用户。
    登录信息存储到那里比较合适。application 的属性会覆盖,session可以,但是占内存,存经常会访问并且不发生变化,而request只用一次。
    没有session都有自己唯一的id。我们现在将色sesstion是服务器的session技术。
    16 重定向方法://response.sendRedirect("ServletTest02");
    转发的方法:request.getRequestDispatcher("/ServletTest02").forward(request, response);
    重定向和转发都是在doget方法中,都用的是地址栏传参。
    17 HttpServletResponse response
    1.通过流生成动态页面
    response.setContentType("text/html;charset=UTF-8");//MIME类型

    2.设置响应编码
    response.setStatus(302);
    // response.setHeader("location", "main.html");
    3.设置头信息
      每隔n秒刷新页面
     response.setHeader("refresh", "3");
      3秒后跳转到新的页面
      response.setHeader("refresh", "3;URL=main.html");
      设置状态码,重定向
    response.setStatus(302);
      response.setHeader("location", "main.html");
    /设置不缓存,验证码图片会使用到
    /* response.setHeader("pragma", "no-cache");
    response.setHeader("cache-control", "no-cache");*/
    4.重定向,重新定向到一个新的页面。
    out.println("登录成功!3秒后跳转到主页面,如果没有跳转,请点击<a href='main.html'>这里</a>");
    18 HttpServletRequest request 请求对象
      服务器的功能是获取客户段的请求,返回响应。接收请求的对象就是request
    所以,如果想要获取客户端的信息。那么就从request对象的方法找。
      接收参数。(接收服务器传递的信息,1.表单 2.地址栏)注意复选框
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String gender= request.getParameter("gender");
    String[] like=request.getParameterValues("like");
    String id = request.getParameter("id");
    String text = request.getParameter("text");

    Map<String, String[]> map = request.getParameterMap();
    Set<String> set = map.keySet();
    for(String str : set){
    String[] parameter = map.get(str);
    System.out.print("name:"+str+"--- value:");
    for(String p:parameter){
    System.out.print(p+" ");
    }
    System.out.println();
    }
      设置编码。
    request.setCharacterEncoding("utf-8");
      获取请求头信息。
    Enumeration<String> names= request.getHeaderNames();
    while(names.hasMoreElements()){
    String name = names.nextElement();
    System.out.println(name+"-----"+request.getHeader(name));
    }
      获取ip,端口,请求方法,请求的上下文路径等。
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
    System.out.println(basePath);
      存储和获取属性值
    request.setAttribute("username", "admin");
    request.setAttribute("age","12");
      转发(跳转到新的页面)
    request.getRequestDispatcher("/HttpServletRequestTest04").forward(request, response);
    19
    ServletContext application;
      获取ServletContext 对象
      1 通过ServletConfig获取
    ServletContext application = config.getServletContext();
      2 this.getServletContext获取。
    ServletContext application1 = this.getServletContext();
    作用:1.获取上下文和真实路径
    application.getRealPath("/") //获取Tomcat安装的真实路径。
    application.getContextPath();
    2.读取配置的初始化信息
    System.out.println(application.getInitParameter("hello"));
    System.out.println(application.getInitParameter("charset"));
    Enumeration<String> names = application.getInitParameterNames();
    while(names.hasMoreElements()){
    String name = names.nextElement();
    String value = application.getInitParameter(name);
    System.out.println(name+"~~~~~~~~~"+value);
    }
    3.存储和获取属性值。通过setAttibute/ getAttibute 方法。
    application.setAttribute("username", "admin");
    application.setAttribute("username", "admin1");
    application.setAttribute("age", "13");
    out.println(application.getAttribute("username"));
    out.println(application.getAttribute("age"));
    20   ServletConfig config
      主要作用是读取Serlvet在web.xml中配置的初始化信息。
    System.out.println(config.getServletName());
    System.out.println(config.getInitParameter("hello"));
    System.out.println(config.getInitParameter("charset"));
    System.out.println("------------------------------------");
    Enumeration<String> names = config.getInitParameterNames();
    while(names.hasMoreElements()){
    String name = names.nextElement();
    String value = config.getInitParameter(name);
    System.out.println(name+"~~~~~~~~~"+value);
    }

    21 apache公司旗下的tomcat.
    22 每次修改了代码之后必须重新开启服务器。
    23 ? 添加所有头文件的快捷方式。
    24 Cookie
    HttpSession session =request.getSession();
    Cookie[] cooks=request.getCookies();
    Cookie c1=new Cookie("c1","valuec1");
    Cookie c2=new Cookie("c2","valuec2");
    response.addCookie(c1);
    response.addCookie(c2
    );

    if(cooks!=null&&cooks.length>0)
    {

    for(Cookie c:cooks)
    {
    out.println("name"+c.getName()+"value"+c.getValue());
    }
    }
    第一次的登录的时候是没有cooie,只有在第二次的时候才有。
    setMaxage中的负数,正数,0
    *****************************
    24
    25 客户端没有Cookie时,怎么解决?
    String url = response.encodeURL("CartServlet"); //重写URL地址。
    //在路径上添加jsessionid
    26 cookie中添加的时候用response,获取的时候用request.
    重写地址的时候用resonse.
    27 关于为什么要用java的API为什么用javaee的API。
    在javaeeAPI中:httpservletrequest->getHeaderName()->返回值是我们说的enumeration.但是这个在javaAPI中超找不到,必须会到java的API中才行。
    28 在request中的方法setHeader();
    设置不缓存的方式在验证码的时候会用到,和我们的cookie中setMaxAge()中的0,不同的。
    29 servlet是java技术对CGI编程的回答,Servlet程序在服务器在服务器端运行,动态地生成web页面,与传统的CGI相比,JAVA SERVLET具有更高的效率,更容易使用,功能更强大,具有更好的移植性。
    20 servlet java版的CGI,CGI基于进程,servlet基于线程。
    servlet几乎所有能想象到的扩展了服务器的功能。
    通过servlet生成动态的页面。
    21 web服务器apache ,IIS,tomcat

    servlet无需任何改动即可移植到web服务器上。
    22 servlet与CGI
    servlet能直接与web服务器交互,而普通的CGI程序不能。servlet还能在各个程序之间之间共享数据,使得数据库连接池之类的功能很容易实现。
    注意在线用户的统计,
    商品的逻辑删除和物理删除。
    数据库中的数据叫动态数据。
    23 ???????????
    Java定时器。
    24 项目:商城
    数据库 每天检查一次,如果超过一个月删除。定时器备份。
    权限:通过菜单来控制。
    日志管理。
    25 重置按钮是默认的。int
    26 双引号的中双引号用区分。
    27 乱码问题的解决
    1 post方式的乱码,request的两个地方的添加。
    2 get方式不仅需要request的添加。而且还需要在tomcat6.0/conf/server.xml中
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
    port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
    -->
    在Connector标签的最后添加URIEncoding="utf-8"
    3 sql语句在navic中能执行,在jdbc中则不能执行,出现乱码。
    jdbc中Mysql执行sql语句,解析式2进制,然后插找。所以数据库必须支持你的utf8.
    在mysql/my.ini中修改两处
    default-character-set=utf8
    character-set-server=utf8
    数据库中没有-。
    28 乱码问题的处理保证整个乱码项目的统一。UTF-8,GBK.
    29 修改文代码,必须启动Tomcat.
    30 乱码分4阶段,
    浏览器-》服务器-》数据库
    最后SQL服务器需要重启。
    特别重要的。
    31 servelt单例对象,全国都用的这一个。
    32 接口的作用为了不同分工之间的协调。
    33 Tomcat中8080:不写的话。默认执行ROOT/index.jsp
    8080:写的话,默认执行webapp中的工程。
    34 myeclipse的不紧可以快速的建立setget方法,还可以迅速建立构造函数。
    35 package sram.beans;这个包中的模型,string在数据库中表示的是varchar.
    36 单行注释
    反单行注释
    多行注释 ctrl shift ?
    反多行注释 不会
    多行对齐 ctrl shift f
    37 建立过滤器类的步骤:
    随便建立一个类实现接口servlet中的filter,然后的根据提示添加包,然后实现他所有的方法。
    38 数据库中设置主键自动增加,设置密码。
    39 过滤器
    关于写过滤器类的方法,先随便写一个方法,让后implements Filter.
    然后右键实现所有的filter的方法。
    关于过滤器的名字的问题,
    在web.xml中的过滤器的名字必须和你的sram.filter包中的过滤器类的名字一样。 如果不一样就不能执行。
    比如说过滤一个html文件,当你在浏览器中输入这个地址回车的时候,过滤器就会响应一次,
    关于两个过滤器一起过滤提交表单的问题
    <filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>sram.filter.MyFilter</filter-class>
    <init-param>
    <param-name>charset</param-name>
    <param-value>gbk</param-value>
    </init-param>
    </filter>
    <filter>
    <filter-name>MyFilter02</filter-name>
    <filter-class>sram.filter.MyFilter02</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <!-- <servlet-name>ServletTest</servlet-name> -->
    <url-pattern>/*</url-pattern>
    <!-- 表示过滤所有路径 -->
    </filter-mapping>
    <filter-mapping>
    <filter-name>MyFilter02</filter-name>
    <url-pattern>*.html</url-pattern>
    <!-- 表示过滤所有路径 -->
    </filter-mapping>
    **********************
    过滤器1表示什么都过滤,过滤器2表示只有.html需要过滤。
    ********************************
    http://localhost:8080/20141209_22_Filter/test.html
    ************************************************
    当按下回车的时候结果如下:
    进入过滤器1......
    进入过滤器2、、、
    回到过滤器2、、、
    返回过滤器1......
    ///////分析:
    两个过滤器同时过滤的时候我们要明白 一个一个过滤,但是了他是嵌套的过滤,1先过滤的话,1最后出。
    **************************************************
    当填好wer,提交的时候:
    进入过滤器1......
    进入过滤器2、、、
    回到过滤器2、、、
    返回过滤器1......//这以上是刚才的
    进入过滤器1......
    username:wer
    返回过滤器1......
    40 老师的这个工程20141209_23_Login
    主要说不能跳过登录界面直接进入到main.html。同时要注意也不能直接登录/LoginServlet。过滤器2就是为了解决这个问题而写的,过滤器二只能过滤/LoginServlet的东西。
    WEB-INT文件下的东西,客户端浏览器不能看到的,通过服务器的转发可以看到。
    *******************************
    request.getRequestDispatcher("/WEB-INF/MyHtml.html").forward(request, response);
    //服务器跳转的方式才能访问到web-inf文件夹下的资源。
    --------------------------------
    <a href="ServletTest">访问myhtml</a>
    41 mapping 映射的意思。
    <url-pattern>地址样式,地址模型。
    42 快捷方式 ctrl shift 0 自动添加所有的类。
    43 stof。字符串变浮点型。
    44 当浏览器有缓存的时候,页面的就不会请求了。
    45 <filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>sram.filter.MyFilter</filter-class>
    <init-param>
    <param-name>charset</param-name>
    <param-value>gbk</param-value>
    </init-param>
    过滤器中放初始化参数。
    46 public class User 中经常放一个有参的和无参的构造函数。
    47 老师的20141209_23_Login和22中过滤器类中用的方法不同。
    48 listen
    servletContext只要启动服务器就会自动运行运行。 ServletContextListener中的创建和ServletContexAttributeListener中的添加属性方法。而且是先调用后者中的方法。
    以下的三个运用中对于属性的设置和修改都用的是setAttibute方法,移除用的是removeAttibute方法。
    -----------------------------------------------
    只要调用ServletContexAttributeListenerServletTest
    创建了request:org.apache.catalina.connector.RequestFacade@691dee
    添加的属性: name=hello value=world
    替换的属性: name=hello value=world
    移除的属性: name=hello value=java
    销毁了request:org.apache.catalina.connector.RequestFacade@691dee
    ----》关于销毁的解释:

    -------------------------------------------
    浏览器调用sesstion的servlet
    创建了request:org.apache.catalina.connector.RequestFacade@691dee
    session创建.......................DF1E094AEA81D5177A6F236FF19364EA
    sessionid:DF1E094AEA81D5177A6F236FF19364EAadd Attribute name=hello value=world
    sessionid:DF1E094AEA81D5177A6F236FF19364EAreplace Attribute name=hello value=world
    sessionid:DF1E094AEA81D5177A6F236FF19364EAremoved Attribute name=hello value=java

    销毁了request:org.apache.catalina.connector.RequestFacade@691dee


    ----》关于销毁的解释:
    3种方法(1)时间到了,在Tomcat/conf/web.xml中sesstion-config标签中单位是分钟(2)调用销毁的方法。session.invalidate();(3)关闭浏览器或者说服务器这个不清楚。关闭服务器才对,但是关闭浏览器只是关闭当前用户,别的用户都可以用。
    ***************************************************
    浏览器调用request的servlet
    创建了request:org.apache.catalina.connector.RequestFacade@691dee
    request::org.apache.catalina.connector.RequestFacade@691deeadd Attribute name=hello value=world
    request::org.apache.catalina.connector.RequestFacade@691deereplace Attribute name=hello value=world
    request::org.apache.catalina.connector.RequestFacade@691deeremoved Attribute name=hello value=java
    销毁了request:org.apache.catalina.connector.RequestFacade@691dee
    ****************************************************************
    49 20141209_25_BaseServlet
    的运行的方式:http://localhost:8080/20141209_25_BaseServlet/UserServlet?method=add
    50 快速选中一个单词的快捷方式。
    51 反射:
    反射getMethod()是把方法看成了对象,反射,反向显示类的信息,Class是我们平时所用类的类型,我们平时所用的类是Class这个类的对象。
    invoke父类中执行子类的方法。invoke 调用静态方法,那么不需要对象只需要一个Null就行了。
    放射的功能1)获取Person的对象,2)获取类的构造方法,3)获取属性。
    我们可以通过JAVASE的API中查看API中Class的方法解决问题。
    最重要的就是获取私有方法和获取共有的方法。
    暴力访问,(破坏封装性)
    getDeclearedConstruct();
    setAccessible(true);
    如果没有第二句话,也可以用其他的方法。

    放射中老师用到的方法:
    (1)Class<Person> c1 = Person.class;
    (2)Person p = new Person();
    Class<Person> c2 = (Class<Person>) p.<Person>getClass();//泛型一般要强转
    (3)Class<Person> c3 = (Class<Person>) Class.forName("sram.beans.Person");
    (4)Person p = c1.newInstance();//这个newInstance相当于new用来创建对象。
    (5)Constructor<Person> con = c1.getDeclaredConstructor(); //无参的构造方法
    con.setAccessible(true); //暴力访问,破坏封装性。
    Constructor<Person> con1 = c1.getConstructor(String.class,int.class);//根据参数获取构造方法
    Person p1 = con1.newInstance("zs",1);
    Constructor[] cons = c1.getConstructors();
    Constructor[] cons1 = c1.getDeclaredConstructors();
    for(Constructor c :cons){
    System.out.println(c);
    }
    (6)Method method = c1.getMethod("sys", String.class,int.class);
    method.invoke(p, "hello",+10000);
    Method method1= c1.getDeclaredMethod("talk");
    method1.setAccessible(true);
    method1.invoke(p);
    Method method2= c1.getDeclaredMethod("say");
    method2.invoke(p);
    (7) Person p = new Person();
    Field field = c1.getField("age");
    field.setInt(p, 10);
    System.out.println(p.age);

    Field field1 = c1.getDeclaredField("name");
    field1.setAccessible(true);
    field1.set(p, "zs");
    System.out.println(p.getName());
    (8)反射的综合运用
    Person p1 = new Person("ww", 100);
    Class c2 = p1.getClass();
    Field f = c2.getDeclaredField("name");//getName
    System.out.println(f.getName());
    // f.setAccessible(true);
    //System.out.println(f.get(p1));
    Method m = c2.getMethod("get"+ f.getName().substring(0,1).toUpperCase()+f.getName().substring(1));
    System.out.println("get"+ f.getName().substring(0,1).toUpperCase()+f.getName().substring(1));
    Object obj = m.invoke(p1);
    System.out.println(obj);

    52无限参本身就是一个数组,无限参和有限参在一起的时候,无限参放后边。

    public class Test {
    public void test(int a,String... str){ //无限参数的本质就是数组。
    System.out.println(str.length);
    }

    public static void main(String[] args) {
    String[] str = {"a","b","c"};
    Test t = new Test();
    t.test(1,"1","2","3");
    }
    }


    53 加载官方的原代码。
    54 String[] str = new String[]{};
    55 购物车 数据库table cart
    56 反射中的注解和动态代理。
    57 我们学习js时候用的API是w3school。
    58 关于servlet单例对象的理解,一个工程下可以有多个类继承httpservlet,但是每一个继承httpservlet的类只能产生一个对象。
    59 init param 这种标签只有两处,1 在servlet标签中的初始化参数,2 在filter中。
    60 <init-param>这个标签两个用到, 在cnfig中(servlet的web.xml),访问的方法是getInitParameter(name)
    在context中(web.xml)虽然没有<init-param>标签访问的方法是getInitParameter(name).
    61 在config中只能读取servlet 参数,但是不能设置,
    在context中可以设置context标签中的值,不能有<init-param>,
    设置分为两种一种在xml文档中直接设置标签。另一种setAttibute.
    62 设置字体windows->prefences->general->appea 开头。

    63 jsp的访问,直接用浏览器访问,不能再html中那个浏览器直接访问。
    64 编程字体 0 o ,i 1(数字1) I l(英文字母l)。
    65 快捷方式
    ctrl shift c 多行注释,可以反注释。
    ctrl shift ? 多行注视,不可以反注释。

  • 相关阅读:
    ch_6802 車的放置
    ch_POJ2182 Lost Cows
    ch_4201 楼兰图腾
    luogu_P3368【模板】树状数组 2
    门面
    建造者
    模板方法
    状态
    抽象工厂
    工厂方法
  • 原文地址:https://www.cnblogs.com/coding4/p/5604970.html
Copyright © 2011-2022 走看看