zoukankan      html  css  js  c++  java
  • javaweb中自己遇到的问题

    1.web中的编码问题

    1.1服务器接收的数据

    post请求,请求会在Servlet中进行解码,所以我们只需要对request设置UTF-8即可。

    request.setCharacterEncoding("UTF-8");
    

    get请求,改请求会在Tomcat中进行解码,所以我们需要在tomcat安装位置的conf目录下的server.xml中,按照下所示修改。

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="utf-8"/>
    

    1.2服务器给浏览器发送的数据

    可以使用如下俩种方法。

    // 1 设置响应头
    response.setHeader("Content-Type","text/html;charset=utf-8");
    //2 设置响应类型
    response.setContentType("text/html;charset=utf-8");
    

    注意:一定要在使用之前设置编码。

    2.相对路径和绝对路径

    2.1相对路径

    相对路径,根据当前的位置为基准。

    2.2重点

    一般web项目中的路径可分为如下俩种,一种是浏览器进行解析,一种是服务器进行解析。
    浏览器解析 / :表示服务器,服务器进行解析 / 表示服务器下的web应用

    浏览器解析:
    ①在html页面中的链接,表单提交的地址、引入的文件。
    ②重定向的地址

    服务器解析:
    ①Servlet请求的地址,Filter拦截的地址等
    ②转发的地址

    3静态引入和动态引入

    3.1静态引入

    编译之前就引入,然后编译运行

    <%--jsp指令--%>
    <%@include file="bb.jsp" %>
    

    3.2动态引入

    编译之后引入,接着运行

    <%--jsp动作标签--%>
    <jsp:include page="/cc.jsp"></jsp:include>
    

    4jsp基本原理

    4.1初步

    ​ jsp为啥可以运行java代码,其实它是把jsp中写的代码转为Servlet。

    4.2步骤

    ①首先我把自己写的一个动态web项目部署到tomcat中。
    在这里插入图片描述

    ②启动tomcat,在cmd下catalina start或者startup

    ③在D:developerapache-tomcat-8.5.24workCatalinalocalhoststu-weborgapachejsp目录下看到如下图所示。
    在这里插入图片描述

    ④打开aa_jsp.class,这里我猜测这和项目中的jsp的文件名非常类似,于是猜测这应该就是aa.jsp转为的Servlet

    public final class aa_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent,
                     org.apache.jasper.runtime.JspSourceImports 
    

    根据如上代码,我们看到它继承HttpJspBase,而HttpJspBase又继承HttpServlet,所以可以说这就是Servlet.
    在这里插入图片描述

    ⑤那么它又是如何把html代码脚本片段、表达式以及声明等进行转换,我们可以看如下代码。
    在这里插入图片描述

    //声明
    private int num  =1000;
    public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
          throws java.io.IOException, javax.servlet.ServletException {
    
        final java.lang.String _jspx_method = request.getMethod();
        if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
          response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
          return;
        }
    
        final javax.servlet.jsp.PageContext pageContext;
        javax.servlet.http.HttpSession session = null;
        final javax.servlet.ServletContext application;
        final javax.servlet.ServletConfig config;
        javax.servlet.jsp.JspWriter out = null;
        final java.lang.Object page = this;
        javax.servlet.jsp.JspWriter _jspx_out = null;
        javax.servlet.jsp.PageContext _jspx_page_context = null;
    
    
        try {
          response.setContentType("text/html;charset=UTF-8");
          pageContext = _jspxFactory.getPageContext(this, request, response,
          			null, true, 8192, true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;
    	// html代码
          out.write("
    ");
          out.write("<html>
    ");
          out.write("<head>
    ");
          out.write("    <title>Title</title>
    ");
          out.write("</head>
    ");
          out.write("<body>
    ");
          out.write("    ");
          out.write("
    ");
          out.write("    ");
    	 //脚本片段
          int a = 100;
          System.out.println("1111");
          out.write("    ");
          org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/cc.jsp", out, false);
          out.write("
    ");
          out.write("</body>
    ");
          out.write("</html>
    ");
        } catch (java.lang.Throwable t) {
          if (!(t instanceof javax.servlet.jsp.SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              try {
                if (response.isCommitted()) {
                  out.flush();
                } else {
                  out.clearBuffer();
                }
              } catch (java.io.IOException e) {}
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
            else throw new ServletException(t);
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
      }
    

    我们可以得出它把html代码输出到页面中;脚本片段把,<%%>去掉,中间的代码直接写到相应的位置;声明若为属性,则它该类中书写属性,若为方法,则它在该类中编写方法。

    ⑥另外tomcat帮我们把它的映射路径配置好了。

    在这里插入图片描述

    作者:pavi

    出处:http://www.cnblogs.com/pavi/

    本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!

    如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!

  • 相关阅读:
    058:表关系之一对一
    057:表关系之一对多
    056:ORM外键删除操作详解
    055:ORM外键使用详解
    054:Meta类中常见配置
    053:Field的常用参数详解:
    052:ORM常用Field详解(3)
    051:ORM常用Field详解(2)
    C#中在WebClient中使用post发送数据实现方法
    C# WebClient类上传和下载文件
  • 原文地址:https://www.cnblogs.com/pavi/p/13569146.html
Copyright © 2011-2022 走看看