Spring Getting Started 17 - First Spring MVC Web Program

xiaoxiao2021-03-06  37

Getting Started 17 - First Spring MVC Web Program

Before performing this program, please complete the introduction 04 - the first Spring program. Our first Spring MVC web program will use Tomcat 5.0.28 to demonstrate, we create a springapp directory in the webapps directory, this time we use Spring.jar directly, and its dependence commons-logging.jar, Please put these two JARs under SpringApp / Web-INF / LIB. The center of the Spring MVC frame is Dispatcher: org.springframework.web.servlet.dispatcherServlet. DispatcherServlets are responsible for defining the Web Request Assignment (Dispatch) to Handler, Spring defines the preset interface for Handler: org.springframework.web.servlet.mvc.controller:

Controller.java

Public interface controller {

Public ModilandView HandleRequest (httpservletRequest Req, httpservletResponse res).

}

DispatcherServlet dispatch request according to the object delegate is implemented org.springframework.web.servlet.HandlerMapping interface to handle, for example, the mapping between org.springframework.web.servlet.handler.SimpleUrlHandlerMapping, request handler is written in the definition Bean File. The DispatcherServlet itself is a servlet, we must first define in Web.xml:

Web.xml

XMLns: xsi = "http://www.w3.org/2001/xmlschema-instance"

XSI: schemAlocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

Version = "2.4">

Spring App Examples.

Spring App Examples

Hello

Org.springframework.web.servlet.dispatcherServlet

Hello

*. do

In Web.xml, we define an instance hello of DispatcherServlet, all requests that end up * .do will be handled by it, and the DispatcherServlet preset will use the servlet's name as a preset, read Name-servlet.xml as its bean Define the file, read Hello-servlet.xml with the above settings. According to this mechanism, if you want multiple modules, you can define different names to use multiple DISPATCHERSERVLETs, and read different bean definition files separately. You can also define the name of the bean definition file, like:

Hello

Org.springframework.web.servlet.dispatcherServlet

contextconfiglocation

/Web-inf/hello1-servlet.xml, /web-inf/hello2-servlet.xml

We use the preset hello-servlet.xml as the name of the arch, which is as follows:

Hello-servlet.xml

Org.springframework.web.servlet.view.internalResourceView

Hello!

/web-inf/jsp/hellouser.jsp

DispatCherServlets will request a mapping of Handler to Handlermapping's actual org.springframework.web.servlet.view.internalResourceViewResolver, in the above settings, we hand over /Hellouser.do to the name HELLOUSERACTION Handler, it is a On the category of the Controller interface, let's take a look at it. Let's take a look at ViewResolver, Spring allows you to use different representation layer technology, through ViewResolver conversion, your representation can use pure JSP / Servlet, JSTL, Velocity, Tiles, etc., we use JSP here. / Servlet, you only need to set the viewclass property for org.springframework.web.servlet.view.internalResourceView. If your representation uses JSTL, you can set org.springframework.web.servlet.view.jstlView, the same, for Spring supports it represents layer technology, Spring provides a ViewClass to set. Take a look at Hellouseraction, it works on the Controller interface:

Hellouseraction.java

Package online.

Import java.io.ioException;

Import java.util. *;

Import javax.servlet. *;

Import javax.servlet.http. *;

Import Org.SpringFramework.Web.Servlet.mvc.controller;

Import org.springframework.Web.Servlet.ModelandView;

Import org.springframework.Web.Bind.RequestUtils;

Public class hellouseraction imports controller {

Private string helloword;

PRIVATE STRING ViewPage;

Public ModilandView HandleRequest (httpservletRequest Req, httpservletResponse res)

Throws servletexception, ioException {

String User = RequestUtils.getRequiredStringParameter (Req, "User");

Map model = new hashmap ();

Model.Put ("HelloWord", GetHelloword ());

Model.Put ("User", User;

Return New ModelandView (GetViewPage (), Model;

}

Public void setViewPage (String ViewPage) {

THIS.VIEWPAGE = viewpage;

}

Public string getViewPage () {Return ViewPage;

}

Public void sethelloword (string helloword) {

THIS.HELLOWORD = HelloWord;

}

Public string getHelloword () {

Return HelloWord;

}

}

HandlerRequest () acts in MVC / Model2, processing request content, calling business objects, preparing MODEL, it must return an instance of ModelandView, indicating that the representation layer resource to be viewed to the user. In the above example, we just remove the User parameters in the request, fill in the model, ModelandView accepts a MAP object as a request, and the viewResolver will convert the data source that can be extracted according to the set viewclass. . In the above example, we use the dependent implantable way to set helloword, and the address of the View, use the dependency injection method, we can avoid writing the View's resource address in the program, and please review the ViewPage property, We set it as /Web-inf/jsp/Hellouser.jsp, set the resource to web-infers, avoid users directly accessing resources to get higher security and resource access control Hellouser.jsp The content is as follows, using the JSP 2.0 Expression Language to remove the model to display on the page:

Hellouser.jsp

Hellopage </ title> </ head></p> <p><body></p> <p><H1> $ {helloword}, ​​$ {user} !! </ h2></p> <p></ body></p> <p></ html></p> <p>Now you can start your servlet container, enter your local test address in the URL:</p> <p>Http: // localhost: 8080 / SpringApp / Hellouser.do? user = justin</p> <p>We give a request parameter user = justin, the result of the program execution is as follows:</p> <p><html></p> <p><head> <title> Hellopage </ title> </ head></p> <p><body></p> <p><H1> Hello !, Justin !! </ h2></p> <p></ body></p> <p></ html></p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-60808.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="60808" 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.038</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 = '25I_2BwcQtNAMWjc_2F8gme91wW5ukIcVGtZ7AmSqQUTynrq4SKWxwYc5kJwCYAgAqUaewgGtHF_2F4LLwZjEcEpmTuQ_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>