📄 right10_3_9_2.htm
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top"> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF"> <tr> <td valign="top" height="2708"> <p class="pt9-black"> <span class="zhongdian">1.静态HTML文件ourform.html<a name="01"></a><br> </span><br> <html><br> <head><br> <title>Our Form</title><br> </head><br> <body><br> <h3>Our Form</h3><br> <form name="ourform" method="GET" action="JSPtest.jsp"><br> <table><br> <tr><br> <td>姓名:</td><br> <td><input type=text name="Name"></td><br> </tr><br> <tr><br> <td>性别:</td><br> <td><select name="Sex"><br> <option value="1" selected>男</option><br> <option value="2">女</option><br> </select></td><br> </tr><br> </table><br> </form><br> </body><br> </html></p> <p class="pt9-black"> <span class="zhongdian">2.JSP文件:JSPtest.jsp<a name="02"></a></span><br> <br> <%@ page contentType="text/html; charset=gb2312" %><br> <html><br> <head><br> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br> <title>Your Info</title><br> </head><br> <body><br> <h3>Data You Posted</h3><br> <%<br> String name = request.getParameter("Name");<br> String sex = request.getParameter("Sex");<br> %><br> <table><br> <tr><br> <td>你的姓名:</td><br> <td><%=name%></td><br> </tr><br> <tr><br> <td>你的性别:</td><br> <td><% if(sex.equals("1")) out.print("男");<br> else out.print("女");%></td><br> </tr><br> </table><br> </body><br> </html></p> <p class="pt9-black"> 这个例子的执行结果和前面是一摸一样的。在以前Servlet分析的基础上,读者看懂这个例子应该没什么问题,这里就不对语法做过多分析了。下面我们来分析一下这个例子的几个特点。<br> <br> 首先最明显的一点就是,使用JSP之后文件变得更短,格式更清晰了,这也是要使用JSP的一个最主要的原因,使用Servlet来打印大量的HTML语句是很费事的,而JSP的主体是HTML,嵌入的Java语句只负责动态效果,所以使用比Servlet方便的多。在下面我们会分析如何使Servlet和JSP互相配合,取长补短,获得更好的应用效果。<br> <br> 另外一个就是JSP使用的时候不需要单独配置每一个文件,只要是扩展名为jsp,JSP引擎会自动识别。而Servlet是必须进行配置后才能投入使用的,这也是处于安全性的考虑,直接访问.class文件是不允许的,因为不能保证它是一个合法的Servlet。而JSP是没有经过编译的文本,即使是编译成了Servlet,也肯定是符合Servlet规范的,尽管可能不符合HTML语法,所以它是安全的。<br> <br> 还有就是中文问题在这里的到了简化,本地的中文字符串不需要编码转换就能够正常在客户端显示。这里关键的一点是在头部设置页属性<%@ page contentType="text/html; charset=gb2312" %>,其中charset=gb2312就是告诉JSP引擎本地编码是gb2312,然后JSP引擎就会自动进行转换,不需要手工转了。但是,并不是说就这么一劳永逸了,中文问题在JSP页面之间传参的时候还是存在的,读者只要掌握了编码的转换方式,应付任何中文问题就是转来转去的问题,因此读者应该从根本上理解中文问题,这才是一劳永逸的办法。<br> <br> 这时候如果我们把静态页面的GET改成POST会是什么后果呢?我们会发现,不象HttpServlet,这个JSP还是能够正常工作的,这是因为JSP的实现在最低层是Servlet,但跟HttpServlet又是有所区别的,所以它不存在客户端请求的分类问题,它只有一个_jspService(HttpServletRequest request, HttpServletResponse response)方法由JSP引擎实现,所以写JSP不必象Servlet那样关心那么多杂碎的事情。<br> <br> 下面是Resin生成的临时Java文件,是上面的例子转换成Servlet之后的样子,有兴趣的读者可以读一下,如果真正读通懂了,一定会受益匪浅的。</p> <p class="pt9-black"> <font color="339900">// Resin(tm) generated JSP</font><br> package _jsp;<br> import java.io.*;<br> import javax.servlet.*;<br> import javax.servlet.jsp.*;<br> import javax.servlet.jsp.tagext.*;<br> import javax.servlet.http.*;</p> <p class="pt9-black"> public class _JSPtest__jsp extends com.caucho.jsp.JavaPage{<br> <br> public void<br> _jspService(javax.servlet.http.HttpServletRequest request,<br> javax.servlet.http.HttpServletResponse response)<br> throws IOException, javax.servlet.ServletException<br> {<br> javax.servlet.jsp.PageContext pageContext = com.caucho.jsp.QJspFactory.create().getPageContext(this, request, response, null, true, 8192, true);<br> javax.servlet.jsp.JspWriter out = (javax.servlet.jsp.JspWriter) pageContext.getOut();<br> com.caucho.jsp.ByteWriteStream _jsp_raw_out;<br> _jsp_raw_out = (com.caucho.jsp.ByteWriteStream) out;<br> javax.servlet.ServletConfig config = getServletConfig();<br> javax.servlet.Servlet page = this;<br> javax.servlet.http.HttpSession session = pageContext.getSession();<br> javax.servlet.ServletContext application = pageContext.getServletContext();<br> try {<br> _jsp_raw_out.write(_jsp_string0, 0, _jsp_string0.length);<br> <br> String name = request.getParameter("Name");<br> String sex = request.getParameter("Sex");<br> _jsp_raw_out.write(_jsp_string1, 0, _jsp_string1.length);<br> out.print((name));<br> _jsp_raw_out.write(_jsp_string2, 0, _jsp_string2.length);<br> if(sex.equals("1")) out.print("男");<br> else out.print("女");_jsp_raw_out.write(_jsp_string3, 0, _jsp_string3.length);<br> } catch (Exception e) {<br> pageContext.handlePageException(e);<br> } finally {<br> JspFactory.getDefaultFactory().releasePageContext(pageContext);<br> }<br> }</p> <p class="pt9-black"> private java.util.ArrayList _caucho_depends;<br> private java.util.ArrayList _caucho_cache;<br> private com.caucho.java.LineMap _caucho_line_map;</p> <p class="pt9-black"> public boolean _caucho_isModified()<br> {<br> if (com.caucho.util.CauchoSystem.getVersionId() != -1983231406)<br> return true;<br> for (int i = 0; i < _caucho_depends.size(); i++) {<br> com.caucho.jsp.Depend depend;<br> depend = (com.caucho.jsp.Depend) _caucho_depends.get(i);<br> if (depend.isModified())<br> return true;<br> }<br> return false;<br> }</p> <p class="pt9-black"> public long _caucho_lastModified()<br> {<br> return 0;<br> }</p> <p class="pt9-black"> public com.caucho.java.LineMap _caucho_getLineMap()<br> {<br> return _caucho_line_map;<br> }</p> <p class="pt9-black"> public void _caucho_init(HttpServletRequest req, HttpServletResponse res)<br> {<br> res.setContentType("text/html; charset=GB2312");<br> }</p> <p class="pt9-black"> public void init(ServletConfig config,<br> com.caucho.java.LineMap lineMap,<br> com.caucho.vfs.Path pwd)<br> throws ServletException<br> {<br> super.init(config);<br> _caucho_line_map = new com.caucho.java.LineMap("_JSPtest__jsp.java", "/JSPtest.jsp");<br> _caucho_line_map.add(1, 1);<br> _caucho_line_map.add(1, 28);<br> _caucho_line_map.add(9, 29);<br> _caucho_line_map.add(16, 33);<br> _caucho_line_map.add(20, 35);<br> _caucho_depends = new java.util.ArrayList();<br> _caucho_depends.add(new com.caucho.jsp.Depend(pwd.lookup("/D:/gzf@WeiHai/Resin/doc/JSPtest.jsp"), <br> 996991110000L));<br> }</p> <p><span class="pt9-black"> private static byte []_jsp_string0;<br> private static byte []_jsp_string1;<br> private static byte []_jsp_string2;<br> private static byte []_jsp_string3;<br> static {<br> try {<br> _jsp_string0 = "\r\n<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\r\n<title>Your Info</title>\r\n</head>\r\n<body>\r\n<h3>Data You Posted</h3>\r\n".getBytes("GB2312");<br> _jsp_string1 = "\r\n<table>\r\n<tr>\r\n<td>你的姓名:</td>\r\n<td>".getBytes("GB2312");<br> _jsp_string2 = "</td>\r\n</tr>\r\n<tr>\r\n<td>你的性别:</td>\r\n<td>".getBytes("GB2312");<br> _jsp_string3 = "</td>\r\n</tr>\r\n</table>\r\n</body>\r\n</html>\r\n".getBytes("GB2312");<br> } catch (UnsupportedEncodingException e) {<br> e.printStackTrace();<br> }<br> }<br> }<br> <br> 到这里为止,JSP这部分已经讲解完毕,读者对JSP应该有了一个概念上的认识,应该有能力书写简单的JSP文件。如果对某些概念还不是很清楚,也不必着急,多多练习就会有更深的体会。下面我们会对JSP和Servlet的关系做进一步的讨论,希望能帮助读者更好的理解Servlet和JSP。</span></p> </td> </tr> </table> </td> </tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -