• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
旧街古巷〃雨未停
每天进步一点
博客园    首页    新随笔    联系   管理    订阅  订阅

jsp2

D:\Software\Tomcat7\work\Catalina\localhost 是缓存目录,可以删掉

隐藏域:页面表单中的一个元素,跟文本框一样,但是用户看不到
     1.建立test1--form表单
      需要它,而不需要用户看到,用隐藏域
       <body>
          <%=request.getParameter("haha")%>
           <form action="" method="post">
               <input type="text" name="haha" />
               
               <!-- 隐藏域 -->
               <input type="hidden" name="xixi" value="maoyun" />
               
               <input type="submit" />
           </form>
    
  </body>
JSP一共有九大内置对象:

out
request
response
session
application
    另外四个用的不多
指令:
<%@page  %>

<%@include file='test1.jsp' %> include 指令(静态include)
     test2.jsp
   <body>
    222222222222222222222222222222
    <%
        int num = 100;
    %>
    <%@include file="test3.jsp" %>
  </body>
     test3.jsp 
   body放入
   33333333333333
   删除第一行的其他,进入淘宝的,看导航
动作:
<jsp:forward>

<jsp:include> include 动作(动态include)
     建立test4
<body>
    444444444444444444444444444444
    <jsp:include page="test5.jsp">
        //<jsp:param value="maoyun" name="username"/>
    </jsp:include>
  </body>
   建立test5
     555555555555555555555555555
  //<%=request.getParameter("username")%>

   面试最容易问相近的东西
首先,这个两个include从表现的结果形式上没有任何区别

剖析jsp的原理

将jsp变成一个servlet,遇到java代码,就去掉标签原封不动,如果遇到html代码,就用out.write给它打出来
    每一jsp背后都有一个servlet
    新建test6.jsp
<div>aaaa</div>
        <%
            System.out.print("xxxx");
        %>
  </body>
    到tomcat文件夹里去看看
    test6啥时候生成,重启tomcat--访问网址--打开文件夹有test6_jsp--打开它--_jspInit(){}(初始化)--_jspDestroy--_jspService(Servlet开始也有,分化成两个)--猜出类像HttpServlet--其里面有session,out 九大内置对象--try---继续往下走--out.write--写的html--java代码
     servlet是jsp的底层,jsp的声明???
     这段内容吃饭的,很重要
     java代码里不能定义方法,原因在方法里不能声明方法
        通过声明定义方法--类里可以定义方法
          test6.jsp<%!
              public void haha()
              {
              
              }
          %>
        test6_jsp在方法里找到代码 和其他方法平级
      静态includ动态includ区别 test3没有了
       查看test2_jsp.java合并一个 查看test4_jsp.java 把test5丢过去,其他自己查查
       静态的,直接合一起,动态运行的时候合一起
       动态includ可以传参数
        test4里加参数
      <body>
    444444444444444444444444444444
    <jsp:include page="test5.jsp">
        //<jsp:param value="maoyun" name="username"/>
    </jsp:include>
  </body>
      静态不用传参数, 动态测试下
      test5接收一下
     555555555555555555555555555
  //<%=request.getParameter("username")%>
      静态里共享参数,test2 <%
        int num = 100;
    %>
       test3里打印   3333333333333333333333333333
<%=num%> 此时不管报错直接用 --->查看test2_jsp.java
     公司开始穷的时候买空间 jsp不需要重启tomcat  
     下课练习out.print和out.write区别?
      新建test7  注释test3的num
     <body>
        <% 
        out.print("haha");
        out.write("haha");
        %>
  </body>
     out.print  所打印的内容转化为字符串打印到页面上
     out.write  将原有的内容打印出来
    <body>
        <% 
        out.print(100);
        out.write(100);//打印整数的asc码
        %>
  </body>
<body>
        <% 
      Object o = null
        out.print(o);
        out.write(100);//打印整数的asc码
        %>
  </body>

servlet自启动
    建立一个包:com.qingmai.web--建立一个类WebStart

    删掉maping
    <servlet>
    <servlet-name>WebStart</servlet-name>
    <servlet-class>com.mao.WebStart</servlet-class>
    <init-param>//4加参数,下面代码->怎么调用呢->init()里,跟配置有关系String username = this.getServletConfig().getInitParam("username")->打印出来->好处?数据库的连接信息,客户不能能改四大金刚,sqlService数据库名字,会自启动就可以了,后面框架会解决
        <param-name>username</param-name>
        <param-value>damao</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>//1放在最后
  </servlet> 
    2初始化的时候加上输出
      public void init() throws ServletException {
        // Put your code here
        System.out.println("网站启动了");
        //String username = this.getServletConfig().getInitParameter("username");
    
        //System.out.println(username);
    }
    3然后部署一下就可以了

过滤器(Filter):

如果在web项目中,建立了一个过滤器,那么每次访问web中的servlet的之前时候,就会自动调用该过滤器中的代码
     每次设置编码--修改编码
     建立过滤器->建立类CodeFilter 想成为过滤器怎么办?实现一个接口Filter--> 代码写在doFilter 输出过滤器“过滤器被执行了”-->配置过滤器文件xml
    
-<filter>

<filter-name>codeFilter</filter-name>

<filter-class>com.mao.CodeFilter</filter-class>

</filter>


-<filter-mapping>

<filter-name>codeFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

      启动tomcat不启动过滤器-->访问test7-->啥都没有,标签也没有了
--->
      

当过滤器过滤信息之后,会停止后面要运行的内容
   -->网页要出来哈->doFilter(父类对象 参数FilterChain->)

FilterChain : 过滤器链
   系统不知道后面还有没有过滤器
   ->在doFileter里使用
                //调用过滤器链:如果后面有过滤器,就会执行后面的过滤,
        //如果没有,就会继续执行网站后面的内容
        arg2.doFilter(arg0, arg1);//净水层,没有了要排除来水

    --->系统如何知道过滤器的顺序?顺序在哪里?
    根据xml里先后顺序
     编码调一下,在doFileter里加上  arg0.setCharacterEncoding("UTF-8");
     --->测试test1 访问网页时候会执行过滤器  还可以写响应编码,jsp响应编码在coding里,先过滤器,后网页 访问一次网页,执行一次过滤器-->
url重写
    --> Servlet显示单个用户如何写
showSingleUser.do?id=5    wumao
  -->建立一个servlet showSingleUser  /*
     留个doget  输出“触发了”
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //测试ip request.getLocalAddr();
        后加//String str1 = request.getPathInfo();
        //System.out.println(str1.substring(1)); 
        System.out.println("触发了");
        
    }
    此时访问所有的网页都会触发
    访问加上/user/*   带有user会访问-->上面注释的内容 截取字符串
    做门户网站,都会写url形式 带有尾巴的不好看
  作业类似亿流网络
user/sanmao

 

posted @ 2017-08-10 19:24  旧街古巷〃雨未停  阅读(132)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3