AGMedlem sedan mars 20001 266 inlägg Har frösökt göra om ett javaprog till ett servelet. Dock villd et sig inte
import java.util.*;
import java.util.regex.*;
import javax.servlet.http.*;
import javax.servlet.*;
public class This extends HttpServlet {
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
public static final Pattern DAY_DATE_PATTERN = Pattern.compile( "\\p{Alpha}+ (.*)" );
public static final Pattern TIME_PATTERN = Pattern.compile( "\\d" );
public static List convertTheEvents( List theListOfEvents )
{
// I am going to copy the data in an ArrayList.
List events = new ArrayList( theListOfEvents );
Matcher dm = DAY_DATE_PATTERN.matcher("");
Matcher tm = TIME_PATTERN.matcher("");
String currentDate = "";
String nextItem;
for ( ListIterator iter = events.listIterator(); iter.hasNext(); )
{
nextItem = (String)iter.next();
// Let's find out if it is the dayDate format..
dm.reset( nextItem );
if ( dm.lookingAt() )
{
// then you found it...and YY-MM-DD is captured in group 1
currentDate = dm.group( 1 );
// get rid of it inside the list...you have the info you needed.
iter.remove();
}
else
{
// It must be the other kind (the time pattern).
tm.reset( nextItem );
if ( tm.lookingAt() )
// then you need to replace it
// with the correct format.
{
iter.set( currentDate + ' ' + nextItem );
}
else
{
// what the heck went on here???
System.out.println( "error in format: " + nextItem );
}
}
}
// now all the stuff in your List has the correct format.
// Do whatever you wanted to do with them.
return events;
}
// Here it is in action
public static void main( String [] args )
{
String [] events =
{
"Mon 02-09-16",
"14:00 Some text",
"15:00 Some text",
"16:00 Some text",
"Tue 02-09-17",
"11:00 Some text",
"12:30 Some text",
"15:00 Some text"
};
List better = convertTheEvents( Arrays.asList(events) );
for ( Iterator iter = better.iterator(); iter.hasNext(); )
{
System.out.println( iter.next() );
}
}
}
}
Andreas
ViktorMedlem sedan aug. 20021 752 inlägg ok, har tittat lite på koden nu :)
Det ser inte bra ut det här, tycker att du ska börja med att läsa en liten tutorial om Servlets så kommer det nog att lösa sig.
Vad är det du vill göra? En servlet har ingen main funktion. En servlets main funktion är service som i sin tur anroppar doGet eller doPost. doGet eller doPost retunerar efter det resultatet till klienten genom en servletOutputStream().
/Viktor
AGMedlem sedan mars 20001 266 inlägg Na, har inte jobbat nåt mer servelets tidigare, tänkte lägga till en funktion i ett javaprog in i en servlet istället.
import java.util.*;
import java.util.regex.*;
public class ThisShouldHelpYou
{
private static final Pattern DAY_DATE_PATTERN = Pattern.compile( "\\p{Alpha}+ (.*)" );
private static final Pattern TIME_PATTERN = Pattern.compile( "\\d" );
public static List convertTheEvents( List theListOfEvents )
{
// I am going to copy the data in an ArrayList.
List events = new ArrayList( theListOfEvents );
Matcher dm = DAY_DATE_PATTERN.matcher("");
Matcher tm = TIME_PATTERN.matcher("");
String currentDate = "";
String nextItem;
for ( ListIterator iter = events.listIterator(); iter.hasNext(); )
{
nextItem = (String)iter.next();
// Let's find out if it is the dayDate format..
dm.reset( nextItem );
if ( dm.lookingAt() )
{
// then you found it...and YY-MM-DD is captured in group 1
currentDate = dm.group( 1 );
// get rid of it inside the list...you have the info you needed.
iter.remove();
}
else
{
// It must be the other kind (the time pattern).
tm.reset( nextItem );
if ( tm.lookingAt() )
// then you need to replace it
// with the correct format.
{
iter.set( currentDate + ' ' + nextItem );
}
else
{
// what the heck went on here???
System.out.println( "error in format: " + nextItem );
}
}
}
// now all the stuff in your List has the correct format.
// Do whatever you wanted to do with them.
return events;
}
// Here it is in action
public static void main( String [] args )
{
String [] events =
{
"Mon 02-09-16",
"14:00 Some text",
"15:00 Some text",
"16:00 Some text",
"Tue 02-09-17",
"11:00 Some text",
"12:30 Some text",
"15:00 Some text"
};
List better = convertTheEvents( Arrays.asList(events) );
for ( Iterator iter = better.iterator(); iter.hasNext(); )
{
System.out.println( iter.next() );
}
}
}
Detta är del 1, events kommer sedan vara en variabel etc, men det primära är att få det till en servlet.
Vad jag hade fattat som var skillnaden mellan javaprogram och servlets så står vad gällde kod. Var att man fick importera lite nya klasser och göra den "public", eller?
Andreas
ViktorMedlem sedan aug. 20021 752 inlägg Här har du ditt program som en servlet (men den kan fortfarande köras som ett vanligt proram också :)).
import java.util.*;
import java.util.regex.*;
//-----------------
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
//-------------------
public class test2 extends HttpServlet // <----
{
//------------------
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
ServletOutputStream out=response.getOutputStream();
response.setContentType("text/text");
String [] events =
{
"Mon 02-09-16",
"14:00 Some text",
"15:00 Some text",
"16:00 Some text",
"Tue 02-09-17",
"11:00 Some text",
"12:30 Some text",
"15:00 Some text"
};
List better = convertTheEvents( Arrays.asList(events) );
for(Iterator iter=better.iterator();iter.hasNext();)
{
out.println(iter.next().toString());
}
}
//-----------------
private static final Pattern DAY_DATE_PATTERN = Pattern.compile( "\\p{Alpha}+ (.*)" );
private static final Pattern TIME_PATTERN = Pattern.compile( "\\d" );
osv osv, ingen ändrat efter detta
När användaren anroppar din servlet (http://www.dinserver.com/servlet/ThisShouldHelpYou) så kommer användaren att få en sida som visar samma sak som du i dag skriver ut i konsol fönstret.
Du kan prova denna servlet här, http://217.209.29.56:8080/test/servlet/test2. Tyvärr har jag inte satt content type text/text i tomcat så du får en fråga om du vill ladda ner filen, öppna den bara i notepad så ser du resultatet.
Du kan däremot inte, via en servlet, retunera en List eller någon annan datatyp till användaren annat än en stream av något slag.
/Viktor
AGMedlem sedan mars 20001 266 inlägg Fungerar, tack, dock måste det väl vara onödigt att specifiera events på två ställen.
Andreas
AGMedlem sedan mars 20001 266 inlägg Har ett problem till jag inte kommer runt, skulle vilja specifiera events i en annan servlets, och endast låta test2 behandla detta värde och sedan returnera det nmodigfierade värdet, hur skulle det kunna se ut?
Andreas