I'm trying to use Groovlets in place of JSPs in an integration framework but one of the vendor's libraries relies on the javax.servlet.jsp.PageContext available in a JSP. I found the GroovyPagesPageContext class that's part of Grails for GSPs.
Anyway to use Groovy in this situation and have a handle to the jsp PageContext? I have not tried using GSPs because there's a significant amount of logic involved.
Since you are replacing your JSPs with Groovlets which are Groovy Servlets, how are you using this vendor's library? If it relies on the JSP API, I'm assuming that it is normally used in a JSP, perhaps as a custom tag library? How are you using the library in a Groovlet? You would have the same problem trying to use a custom tag library inside a plain Servlet.
If you'd like a standalone class that can act as a stand-in for a JSP Page context, have a look at the
JspPageContext.java class that I wrote for Rayures so that I could wrap a JSP tag library in plain Java code.
Related
JSP page in its lifecycle translated into .java file, but is JSP page itself a java class?
Confused and need help.
JSPs are compiled into Java Servlets, and Java servlets are classes. So yes, the JSP is compiled to a Java class. The name is usually automatically generated, and is visible in any stack traces (if you throw an Exception).
From here:
A JavaServer Pages compiler is a program that parses JSPs, and transforms them into executable Java Servlets.
And from here:
Java Servlet technology provides Web developers with a simple, consistent mechanism for extending the functionality of a Web server and for accessing existing business systems. Servlets are server-side Java EE components that generate responses (typically HTML pages) to requests (typically HTTP requests) from clients. A servlet can almost be thought of as an applet that runs on the server side
Since applets are classes, hence, a JSP is a class.
The intend behind JSP is Actually makes easier for JAVA developer + front end Developer to
write not only Java code also need to write HTML code and other which
is easily stuff with html code too for full fill the task complete.
so, let's say, my jsp page is home.jsp, then it's translating from .jsp to .java by home_jsp.java which will enclosed all non-java code into java.
and finally home_jsp.class file generate which will run on JVM.
JSP page life cycle and many of the capabilities of JSP pages (in
particular the dynamic aspects) are determined by Java Servlet
technology.
Now, i hope you are little bit clear on your query that was,
JSP page in its lifecycle translated into .java file, but is JSP page itself a java class?
Best of luck...!!!
A JSP pages compiler is a program that parses JSPs, and transforms them into executable Java Servlets and that java Servlets is a simple java class.
How can I call a JSP file from a Java application, and pass to it a Java Bean, so that as a result I can get a rendered HTML code as output.
The Java program is a stand-alone application, that runs by someone. No servlet please.
If Non-Servlet environment & it is a stand-alone application so I think you can use any String template such as Velocity, FreeMaker instead of using JSP.
A JSP is a servlet too. So you need all those Java EE classes, and hence also an implementation by some provider (Java EE container). You could use jetty as an embedded Java EE container.
You can then via URL get the generated HTML page.
If you want minimal JSP functionality, more a scriptable HTML template engine,
look at StringTemplate or Velocity or whatever.
Mostly a complement to #AppsLandia's answer.
Even if it looks like a template engine, JSP is not. JSP files are first translated into Java source servlets and then compiled to .class normal servlets. That's the reason why they cannot be used outside of a web application running on a servlet container like Tomcat or Jetty or...
Velocity and FreeMarker can be used in web applications, but they are general template engines, so you should have a look to them.
I am migrating my java web-application project from JSP to thymeleaf.
I want temporarily to have ability to reuse some simple custom JSP tags in thymeleaf pages. It seems not a problem with custom tags defined in old fashion, as java files. I just instantiate tag, set fake PageContext, request and response, attribtes - and call doStartTag / doEndTag.
However I could not find a way how to instantiate object representing JSP 2.0 tag (i.e. defined in a ".tag" file. How can I achieve this?
Thanks in advance for any ideas!
It looks there are two ways:
Use jspc-maven-plugin to get precompiled classes from jsp and tag files - I checked that works - however latest version of this plugin is 2.0-alpha-3 and it is 4 years old now.
Access servlet-container jsp compiler (in most cases jasper) and do the same thing as in first variant, but on demand, in execution time. However, this makes application container-dependent.
(My personal opinion now is that it would better to avoid the idea at whole - all solutions looks too unreliable to use in production)
I would like to invoke the JSP parser programmatically. That means that I want to be able, in Java, to 'run' a jsp page and get its output, without sending it back to the client (I actually want to save the output to a file). I don't want to 'forward' the request to the JSP page. I want to be able to do that on several JSP pages in a row.
What is the best way of doing this?
I have found this question, but BalusC doesn't really answer the question directly.
In case you are wondering, I need to do this is because I want to 'precompile' the JSPs for using on other platforms than a Java servlet container.
EDIT
What I need is not the .class file, but the HTML output. Indeed, that will be static once generated but I have some custom jsp tags and I want to leverage the JSP parser to expand them.
I'm not sure that I understand the point of all this.
JSPs are parsed and precompiled to .class files. They're Java servlets at that point. You need a servlet engine to execute them.
If your intent is to capture the generated HTTP response as the "precompiled" response, it would suggest that there's no dynamic content and the response is the same every time you send that particular request. If that's the case, what you've got is static HTML.
If I'm correct, this would seem to be a poor way to generate such a thing.
If your wish is to precompile JSPs to .class files, the problem is that different Java EE app servers use different JSP precompilation engines. You can't precompile JSPs using Tomcat and use them on WebLogic.
The best way to get the html output from a jsp page is to actually deploy it to a real webserver and then call the page and save the rendered output.
If you want to automate some part of this, you might want to look into using a testing tool that exercises through the real interface, such as Selenium or that emulates the browser, such as HttpUnit.
But this is doing much more than just invoking the JSP compiler.
Maybe it would be more practical to use template engines like http://freemarker.sourceforge.net/ or http://velocity.apache.org/
Freemarker even seems to support JSP Taglibs: http://freemarker.sourceforge.net/features.html
Is your JSP dynamically generated. If so then you are stepping into a potential disadvantage situation wherein your JSP will be compiled again and again, leading to performance issues.
However if you could have a single large JSP with all the rules that you need to prepare your display, you could use HttpClient to make a call to your own JSP and that would return the HTML. This would ensure that you are not app-server dependent. If you use JSP Parser you are going to be vendor dependent.
But if your JSP is being dynamically constructed then you should look at options wherein your HTML can be generated on Java side. But if it involved rule based HTML creation, you are better off creating it in Java. You can use Apache Jakarta ECS library for this.
And yes JSPs are not meant for this purpose.
I use Java mostly for GUI programming and PHP for web programming but I really don't like not having a statically typed language. For my next project I would like to use Java instead of PHP. What is the difference between JSP and servlets?
JSP basically allows you to write your Java code around HTML, superficially seeming like PHP or ASP. The result is just compiled to a servlet though.
Under the covers JSP and Servlets are esentially the same, both compile to servlets and both execute as Java code. The difference between them is in authoring and usage. You author Servlets as Java code, i.e. you write a Java class that derives from HttpServlet and override the appropriate methods. JSPs on the other hand are authored using a template based language, this looks a lot like HTML with code snippets thrown in, similar to many other template based languages out there.
If you are building a web application in Java it is considered (very) good practice to use an MVC style architecture with Servlets as the controller and JSPs providing the view (and POJOs as the model)
I would really recommend reading through the first few sections of the Java EE 5 Tutorial. It really does a good job explaining the different Java technologies.
In short, servlets are an abstraction of an HTTP server that allow you to implement logic based on the HTTP request coming in.
JSP is more on the view side of things, allowing to mix in code with your html view and you'll find it similar to PHP or classic ASP.
You can use servlets without JSP and you can use JSP without servlets (kinda, they're still used in the background), but most often you'll want to use a good MVC controller with the Servlet filling the controller role, and the JSP filling the view role.
If you use mvc JSP would be the view, while the servlet would be the controller.
Althought JSP can contain java code, the lesser the better.
To compare it to PHP world,Zend Framework, JSP == .phtml and serlet == .php.
Servlets are classes that you can use to process any kind of request, but mostly HTTP requests. You write servlets by writing classes that extends javax.servlet.http.HttpServlet
JSP is a newer technology than servlets. It is used to combine HTML code with Java Code. At the end of the day, a JSP page is used to generate (automatically) a HttpServlet.
Usually what people do is, write the business logic portion of the WebSite on servlets, and then, forwarding control to a JSP page (similar to what's accomplished with MVC).
But, nowadays, a lot of people would use a framework like JSF or Spring on top of Servlet+JSP technology. So you might want to take a look at one of those frameworks as well.
Servlets are in java and allow http responses to programmed using Java strings. They are most useful for computation work.
Jsps as mostly html with small snippets of Java code, this is much more like PHP and is more useful for website
P.s. Have a look a google app engine, it's great for hosting basic Java apps.
JSP follow the MVC model.
The main difference between jsp and php at run time..
1.When a jsp page call's first time it converted as servlet class and than the servlet class is called every time ,it makes the jsp faster then php.
2.you can use the bean(Simple java classes) in the jsp page for business logic implementation.And make out put for that in jsp pages ,like a simple static html page.
There are more feature with jsp....