欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaweb JSP开发基本操作

程序员文章站 2022-08-24 17:31:56
1.web中的编码问题1.1服务器接收的数据post请求,请求会在Servlet中进行解码,所以我们只需要对request设置UTF-8即可。request.setCharacterEncoding("UTF-8");get请求,改请求会在Tomcat中进行解码,所以我们需要在tomcat安装位置的conf目录下的server.xml中,按照下所示修改。

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中。
javaweb JSP开发基本操作

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

③在D:\developer\apache-tomcat-8.5.24\work\Catalina\localhost\stu-web\org\apache\jsp目录下看到如下图所示。
javaweb 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.
javaweb JSP开发基本操作

⑤那么它又是如何把html代码脚本片段、表达式以及声明等进行转换,我们可以看如下代码。
javaweb JSP开发基本操作

//声明 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帮我们把它的映射路径配置好了。

javaweb JSP开发基本操作

本文地址:https://blog.csdn.net/pavicn/article/details/108251228