import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletContext; import javax.servlet.ServletException; import java.io.IOException; import java.io.PrintWriter; import java.io.InputStreamReader; import java.io.FileInputStream; import java.io.BufferedReader; import java.net.URL; public class ShowHTML extends HttpServlet{ // méthodes utilitaires pour générer du html private static String tag(String tag,String contenu,String attrs){ return "<"+tag+(attrs.length()==0?"":(" "+attrs))+ (contenu.length()==0?"/":">"+contenu+""; } private static String tag(String tag,String contenu){ return tag(tag,contenu,""); } private static String tagNL(String tag,String contenu){ return tag(tag,contenu)+"\n"; } private static String html(String contenu){return tagNL("hmtl",contenu);} private static String head(String contenu){return tagNL("head",contenu);} private static String body(String contenu){return tagNL("body",contenu);} private static String title(String contenu){return tag("title",contenu);} private static String strong(String contenu){return tag("strong",contenu);} private static String blue(String contenu){ return tag("font",contenu,"color='blue'"); } private static String green(String contenu){ return tag("font",contenu,"color='green'"); } private static String pre(String contenu){return tagNL("pre",contenu);} private static String br(){return tagNL("br","");} private static String p(String contenu){return tagNL("p",contenu);} private static String file2HTML(String fileName){ StringBuffer sb = new StringBuffer(); String line; try { BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(fileName))); while((line=in.readLine())!=null) sb.append(line2HTML(line)); } catch (IOException e){ sb.append(blue("Erreur d'entree-sortie:"+e)); } return ""+sb; } private static String line2HTML(String line){ int l = line.length(); int j; StringBuffer sb = new StringBuffer(l); for(int i=0;i").append("<").append(line.charAt(j)); i=j; } else { // vérifier si la balise se termine sur la même ligne while(j'){ sb.append(line.substring(i,j)).append(">"); i=j; break; } // c'est OK de suivre le default... default: sb.append(line.charAt(i)); } } return sb+"\n"; } private static String infos(HttpServletRequest request, String realPath){ if(request==null) return ""; else return "ContextPath:"+request.getContextPath()+br()+ "QueryString:"+request.getQueryString()+br()+ "PathInfo:"+request.getPathInfo()+br()+ "PathTranslated:"+request.getPathTranslated()+br()+ "ServletPath:"+request.getServletPath()+br()+ "RealPath:"+realPath; } private static String reponse(HttpServletRequest request, String realPath, String fileName){ return html(head(title(fileName))+ body(//infos(request,realPath)+ pre(file2HTML(realPath==null?fileName:realPath))) ); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String fileName = request.getParameter("file"); out.println(reponse(request, getServletContext().getRealPath(fileName), fileName)); } // pour tester isolement public static void main (String[] args){ System.out.println(reponse(null,null,args[0])); } }