2I1073 Lektion 2 Servlets, säkerhet, och filhantering KTH-MI Peter Mozelius import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Lektion2a extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); String protokoll = req.getprotocol(); // Skriv ut som ett validerande XHTML1.1-dokument "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\""); "\"http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd\">"); "<html xmlns =\"http://www.w3.org/1999/xhtml\">"); 1
" <head>"); " <meta http-equiv=\"content-type\" content=\"text/html;" + "charset=iso-8859-1\" />"); " <title>2i1073-lektion2a</title>" ); " </head>" ); " <body>" ); " <h2>hej, detta är en hälsning via " + protokoll + "</h2>" ); " </body>" ); "</html>" ); out.close(); //doget public void dopost(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { doget(req, res); //dopost //Lektion2a Lektion 2b - web.xml <!-- Definition --> - <servlet> <servlet-name> Lektion2a </servlet-name> <servlet-class> Lektion2a </servlet-class> </servlet> 2
Lektion 2b - web.xml <!-- Mappning --> - <servlet-mapping> <servlet-name> Lektion2a </servlet-name> <url-pattern> /Lektion2a </url-pattern> </servlet-mapping> </web-app> 15 min paus! Lektion 2c import java.io.*; import java.security.*; public class Lektion2c { public static void main(string[] args) { String recept = ""; //öppna filen med recept och läs in BufferedReader receptfil = null; Lektion 2c try { receptfil = new BufferedReader( new FileReader("recept.fil")); String rad; while((rad = receptfil.readline())!= null) recept += "\n" + rad; catch (FileNotFoundException fnfe){ System.err.println("Filen hittades inte!"); System.exit(1); catch (IOException e){ System.err.println("Filen gick inte att läsa!"); System.exit(2); 3
Lektion 2c //låt klassen MessageDigest beräkna ett kontrollvärde byte[] buffer = recept.getbytes(); try { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(buffer); System.md.digest()); System.out.print("är kontrollvärdet för följande recept: \n\n"); System.recept); catch(nosuchalgorithmexception nsae) { System.err.println(nsae.getMessage()); //main import java.io.*; import javax.swing.*; import javax.swing.filechooser.*; import java.awt.*; import java.awt.event.*; public class Lektion2d extends JFrame { private Container container; private JTextField inforuta; private JTextArea meddelanderuta; private JPanel nordpanel, mittpanel, sydpanel; private JMenuBar filbar; private JMenu arkivmeny; private JMenuItem mitem; private String filnamn; public Lektion2d() { skapagränssnitt(); public void skapagränssnitt() { this.setsize(400, 200); this.settitle( MIwebb, en liten filläsare för Lektion2."); 4
container = this.getcontentpane(); container.setlayout(new BorderLayout()); nordpanel = new JPanel(); container.add(nordpanel, BorderLayout.NORTH); mittpanel = new JPanel(); mittpanel.setbackground(new Color(255,255,255)); mittpanel.setsize(400, 150); meddelanderuta = new JTextArea(); mittpanel.add(meddelanderuta); container.add(mittpanel, BorderLayout.CENTER); sydpanel = new JPanel(); sydpanel.setlayout(new GridLayout(1, 2)); inforuta = new JTextField("Läs in en fil genom att välja Öppna från Arkiv-menyn här ovanför!"); sydpanel.add(inforuta); container.add(sydpanel, BorderLayout.SOUTH); setjmenubar(skapaarkivmeny()); setdefaultcloseoperation(exit_on_close); this.setvisible(true); //skapagränssnitt public JMenuBar skapaarkivmeny() { filbar = new JMenuBar(); arkivmeny = new JMenu("Arkiv"); arkivmeny.setmnemonic('a'); filbar.add(arkivmeny); MenuListener ml = new MenuListener(this, meddelanderuta, inforuta); mitem = arkivmeny.add( new JMenuItem("Öppna", 'ö')); mitem.addactionlistener(ml); mitem = arkivmeny.add( new JMenuItem("Avsluta", 'a')); mitem.addactionlistener(ml); return filbar; 5
public static void main(string[] args) { Lektion2d l2d = new Lektion2d(); //main //Lektion2d class MenuListener implements ActionListener { private Lektion2d compo; private JTextArea meddelanderuta; private JTextField inforuta; public void actionperformed(actionevent e) { String val = e.getactioncommand(); if(val.equals("öppna")) { öppnafil(); else if(val.equals("avsluta")) System.exit(0); public void öppnafil() { JFileChooser jfc = new JFileChooser("./"); jfc.setfilefilter(new InFilter()); int val = jfc.showopendialog(compo); if(val == JFileChooser.APPROVE_OPTION) { String meddelande = ""; //öppna ström och läs in BufferedReader infil = null; try { infil = new BufferedReader(new FileReader(jfc.getSelectedFile())); inforuta.settext("inläst från: " + jfc.getselectedfile()); String rad; while((rad = infil.readline())!= null) meddelande += "\n" + rad; 6
catch (FileNotFoundException fnfe){ System.err.println("Filen hittades inte!"); System.exit(1); catch (IOException e){ System.err.println("Filen gick inte att läsa!"); System.exit(2); meddelanderuta.settext(meddelande); private class InFilter extends javax.swing.filechooser.filefilter { public boolean accept(file f) { if(f.getname().tolowercase().endswith(".fil")) return true; else return false; public String getdescription() { return "Visar endast filer med ändelsen.fil"; //InFilter //MenuListener Lektion 2 Det var allt för idag. Glad Påsk! 7