JSP WebServer's implementation principle

xiaoxiao2021-03-06  45

Because of a webserver, I have written a simple webserver, why not implement a JSP WebServer?

After having this idea, you will start thinking about the principle of JSP. In fact, the implementation of JSP is also very simple. It is said that it is converted into a java file, then compiles this Java file, generates class files, then use the server. This class file. From the overall point, the contents of the JSP file can be divided into two blocks, ie output statements and control statements.

As for the HTML statement in the JSP file is the content we have to output, and the JSP tag is the output of the control HTML statement. For example, there is a JSP file as follows:

<%! java.util.date Date = new java.util.date ();

INT size = 10;

%>

<% For (int i = 0; i

hello <% = i%>

<%}%>

<% = DATE%>

This JSP file will produce the following effects:

Hello 0

Hello 1

Hello 2

Hello 3

Hello 4

Hello 5

Hello 6

Hello 7

Hello 8

Hello 9

THU DEC 16 18:30:21 CST 2004 So, the current problem is what we can generate what kind of Java file can get the correct result. The first choice to write an interface, the interface is the interface we have to generate will inherit the interface. Defined as follows: package httpserver; import java.net.Socket; import java.io.IOException; public interface Jsp2HtmlInterface {void printHtml (Socket socket) throws IOException;} Next, write a class is responsible for parsing JavaServerPage JSP file in this class The Java file will be dynamically generated and generate an available class. The printhtml (socket) method of this class file is called, and the response information is written to the client (where socket is the socket returned by the server Accept. This customer can see the result of the JSP's correct operation.

The class framework for this parsing JavaServerPage is as follows: Public Class JavaServerPage {Public Class JavaServerPage {Public Class JavaSerPage (File File, Socket Socket) THROWS Exception {} // File A JSP file for the client requests the server with the client connection PUBLIC VOID WriteReponse () {// This function will be responsible for generating Java files based on certain geneatjava (), and will compile according to some generatjava (); //, process prot = runtime.getime (). EXEC ("Javac ...") ; try {proc.waitFor ();} catch (InterruptedException ie) {} httpserver.Jsp2HtmlInterface object = (httpserver.Jsp2HtmlInterface) Class.forName ( "...") newInstance ();. object.printHtml (socket);} } Suppose we use an algorithm to generate the following JSP file above the document JAVA package httpserver; import java.io *;. import java.awt *;. import java.net.Socket; public class test implements Jsp2HtmlInterface {private PrintStream out PUB Lic Test () {} (Object Object) THROWS IOEXCEPTION {Out.Print (Object.tostring () "} public void println (int i) throws oews oException {Out.print (i "/ r / n");} public void println (float i) throws ioException {Out.print (i "/ r / n");} public void println (double i) throws oews oews ooException {Out.print (i "/ R / N ");} public void println (long i) throws ioException {Out.print (i " / r / n ");} public void println (char ch) throws oews oewception {Out.print (CH " / R / N ");} public void println (char [] ch) throws iexception {out.print (ch " / r / n ");} public void println () throws ioException {out.print (" / r / n ") PUBLIC VOID Close () {out.close ();

} public void printhtml (socket socket) throws oews oException {out = new printstream (socket.getOutputStream ()); this.println (""); this.println (" hello </ title>); THIS.PRINTLN ("<body>"); java.util.date date = new java.util.date (); int size = 10; for (int i = 0; i <size; i ) {</p> <p>THIS.PRINTLN ("<H1> Hello"); this.println (i); this.println (); this.println ("</ h1>");}</p> <p>THIS.PRINTLN (Date); this.println (); this.println ("</ body>"); this.println ("</ html>"); this.clintln (); this.close (); } The analysis of JSP files can be implemented by calling this clarinthtml () method. This method compiles through the JBUILDERX environment. Speaking of this, everyone is not to do a self-Tomcat or do something else. <%! java.util.date Date = new java.util.date (); int size = 10;%> <% for (int i = 0; i</p> <p><%}%> <% = DATE%></p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-79916.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="79916" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.044</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'laAEu5asN6zjtZEquEpyM_2FAXWhgdmSZk61MeK5ygQ60I9vYUUYcwK6f7GOkWrPiCfWLHluQmvC6DJEvKOvZR8A_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>