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/

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

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

  • 相关阅读:
    Begin Example with Override Encoded SOAP XML Serialization
    State Machine Terminology
    How to: Specify an Alternate Element Name for an XML Stream
    How to: Publish Metadata for a WCF Service.(What is the Metadata Exchange Endpoint purpose.)
    Beginning Guide With Controlling XML Serialization Using Attributes(XmlSerializaiton of Array)
    Workflow 4.0 Hosting Extensions
    What can we do in the CacheMetaData Method of Activity
    How and Why to use the System.servicemodel.MessageParameterAttribute in WCF
    How to: Begin Sample with Serialization and Deserialization an Object
    A Test WCF Service without anything of config.
  • 原文地址:https://www.cnblogs.com/pavi/p/13569146.html
Copyright © 2011-2022 走看看