post請求,請求會在Servlet中進行解碼,因此咱們只須要對request設置UTF-8便可。html
request.setCharacterEncoding("UTF-8");
get請求,改請求會在Tomcat中進行解碼,因此咱們須要在tomcat安裝位置的conf目錄下的server.xml中,按照下所示修改。java
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="utf-8"/>
可使用以下倆種方法。web
// 1 設置響應頭 response.setHeader("Content-Type","text/html;charset=utf-8"); //2 設置響應類型 response.setContentType("text/html;charset=utf-8");
注意:必定要在使用以前設置編碼。apache
相對路徑,根據當前的位置爲基準。瀏覽器
通常web項目中的路徑可分爲以下倆種,一種是瀏覽器進行解析,一種是服務器進行解析。
瀏覽器解析 / :表示服務器,服務器進行解析 / 表示服務器下的web應用tomcat
瀏覽器解析:
①在html頁面中的連接,表單提交的地址、引入的文件。
②重定向的地址服務器
服務器解析:
①Servlet請求的地址,Filter攔截的地址等
②轉發的地址session
編譯以前就引入,而後編譯運行app
<%--jsp指令--%> <%@include file="bb.jsp" %>
編譯以後引入,接着運行jsp
<%--jsp動做標籤--%> <jsp:include page="/cc.jsp"></jsp:include>
jsp爲啥能夠運行java代碼,其實它是把jsp中寫的代碼轉爲Servlet。
①首先我把本身寫的一個動態web項目部署到tomcat中。
②啓動tomcat,在cmd下catalina start或者startup
③在D:\developer\apache-tomcat-8.5.24\work\Catalina\localhost\stu-web\org\apache\jsp目錄下看到以下圖所示。
④打開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("\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>Title</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write(" "); out.write("\r\n"); 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("\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } 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幫咱們把它的映射路徑配置好了。