xml, uploading, importing... joshua scotton

34
Data in Web Applications XML, Uploading, Importing... Joshua Scotton

Upload: malik-hesseltine

Post on 01-Apr-2015

230 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: XML, Uploading, Importing... Joshua Scotton

Data in Web Applications

XML, Uploading, Importing...Joshua Scotton

Page 2: XML, Uploading, Importing... Joshua Scotton

<% //HTTP 1.1 response.setHeader("Cache-Control","no-store"); //HTTP 1.0 response.setHeader("Pragma","no-cache"); //Stops any problems from proxy servers response.setDateHeader ("Expires", 0); %>

Forcing No-Cache in JSP

Page 3: XML, Uploading, Importing... Joshua Scotton

Simplest way is to construct a string:String s = “<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n” + “<exampleDoc>\n” + “ <xml-tag>\n” + “ ...\n” + “ </xml-tag>\n” + “</exampleDoc>”;

Generating XML

Page 4: XML, Uploading, Importing... Joshua Scotton

Have to handle special characters◦ <tag>&lt;br/&gt;</tag>

No validation so easy to make mistakes

Disadvantages

Page 5: XML, Uploading, Importing... Joshua Scotton

Java API for XML Processing Provides validation, parsing and generation

functionality for XML

JAXP

Page 6: XML, Uploading, Importing... Joshua Scotton

DOM - Document Object Model (JDK5+) SAX - Simple API for XML (JDK5+) StAX - Streaming API for XML (JDK6+)

Java Built-In XML Parsers

Page 7: XML, Uploading, Importing... Joshua Scotton

The DOM Parser models the entire XML document in memory

Uses the org.w3c.dom.Document model Tree Nodes

◦ Element◦ Attr◦ Text

DOM XML Parser

Page 8: XML, Uploading, Importing... Joshua Scotton

Generate XML with DOM

G e n e r a t e D O M . c l a s s

Page 9: XML, Uploading, Importing... Joshua Scotton

Parse XML with DOMR e a d D O M . c l a s s

Page 10: XML, Uploading, Importing... Joshua Scotton

Modify XML with DOMM o d i f y D O M . c l a s s

Page 11: XML, Uploading, Importing... Joshua Scotton

DOM should be avoided for large files as the entire XML file is modelled as a Document in memory, including all Nodes, Elements, Attributes etc.

Disadvantage of DOM

Page 12: XML, Uploading, Importing... Joshua Scotton

Faster at reading XML content than DOM. Stream implementation instead of

Document Model Callback handler object has to be created

SAX XML Parser

Page 13: XML, Uploading, Importing... Joshua Scotton

Following methods can be overwritten in the Handler class:◦ startDocument() and endDocument() –

methods called at the start and end of an XML document.

◦ startElement() and endElement() – methods called at the start and end of a document element.

◦ characters() – method called with the text contents in between the start and end tags of an XML document element.

SAX Callback Handler Methods

Page 14: XML, Uploading, Importing... Joshua Scotton

Parse XML with SAXR e a d S A X . c l a s s

Page 15: XML, Uploading, Importing... Joshua Scotton

QuizMaster

Page 16: XML, Uploading, Importing... Joshua Scotton

Upload and import XML test files Store tests, results and users in database User login and registration Users can take tests and view results

Functionality

Page 17: XML, Uploading, Importing... Joshua Scotton

Test◦ TestQuestion

TestAnswer Result

◦ ResultQuestion

Quiz Representation

Page 18: XML, Uploading, Importing... Joshua Scotton

<!ELEMENT answer ( text ) > <!ATTLIST answer id NMTOKEN #REQUIRED > <!ATTLIST answer score NMTOKEN #REQUIRED > <!ELEMENT description ( #PCDATA ) > <!ELEMENT question ( text, answer+ ) > <!ATTLIST question id NMTOKEN #REQUIRED > <!ELEMENT test ( title, description, question+ ) > <!ELEMENT text ( #PCDATA ) > <!ELEMENT title ( #PCDATA ) >

XML DTD

Page 19: XML, Uploading, Importing... Joshua Scotton

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root_element PUBLIC "Test"

"http://localhost:8080/QuizMaster/test.dtd"><test> <title>Example Quiz</title> <description>Quick Quiz on Java XML Parsers</description> <question id="1"> <text>Which of the following is not a built-in Java parser?</text> <answer score="1" id="1“><text>JDOM</text></answer> <answer score="0" id="2“><text>DOM</text></answer> <answer score="0" id="3“><text>SAX</text></answer> </question> <question id="2"> <text>DOM loads the entire XML into memory. True or false?</text> <answer score="1" id="1“><text>True</text></answer> <answer score="0" id="2“><text>False</text></answer> </question></test>

XML Example

Page 20: XML, Uploading, Importing... Joshua Scotton

public class TestBean implements Serializable {

private String title;private String description;private List<TestQuestionBean> questions;

public String getTitle() { return title; }public void setTitle(String title) { this.title = title; }public String getDescription() { return description; }public void setDescription(String description) {this.description = description; }

public List<TestQuestionBean> getQuestions() { return questions; }

public void setQuestions(List<TestQuestionBean> questions) {this.questions = questions; }

public void addQuestion(TestQuestionBean question) {this.questions.add(question); }

}

TestBean

Page 21: XML, Uploading, Importing... Joshua Scotton

public class TestQuestionBean implements Serializable {

private String text;private String id;private List<TestAnswerBean> answers;

public String getText() { return text; }public void setText(String text) { this.text = text; }

public List<TestAnswerBean> getAnswers() { return answers; }

public void setAnswers(List<TestAnswerBean> answers) {this.answers = answers; }

public void addAnswer(TestAnswerBean answer) { this.answers.add(answer); }

}

TestQuestionBean

Page 22: XML, Uploading, Importing... Joshua Scotton

public class TestAnswerBean implements Serializable {private String text;

private String id;private Integer score;

public String getText() {return text;

}public void setText(String text) {this.text = text;

}public Integer getScore() {return score;

}public void setScore(Integer score) {this.score = score;

}}

TestAnswerBean

Page 23: XML, Uploading, Importing... Joshua Scotton

XML -> JavaBeansI m p o r t T e s t . c l a s s

Page 24: XML, Uploading, Importing... Joshua Scotton

Select file (uploadForm.jsp) Load into UploadBean (importUpload.jsp) UploadBean -> ImportTest ImportTest creates TestBean TestBean stored in Session Success Message (importUpload.jsp) Display Test (viewTest.jsp)

index?action=“upload|import|view”

File Upload

Page 25: XML, Uploading, Importing... Joshua Scotton

<form enctype="multipart/form-data" method="POST" action=“admin?action=import">

File Path:<br /><input type="file" id="filePath" name="filePath" /><br /><br />

<input type="submit" value="Upload" /></form>

uploadForm.jsp

Page 26: XML, Uploading, Importing... Joshua Scotton

<jsp:useBean id="uploader" class="webdev.quizmaster.UploadBean" scope="session"/>

<p><%= uploader.startUpload(request) %></p><p><a href="index?action=view">View Test</a></p>

importUpload.jsp

Page 27: XML, Uploading, Importing... Joshua Scotton

Catching the UploadU p l o a d B e a n . c l a s s

Page 28: XML, Uploading, Importing... Joshua Scotton

<jsp:useBean id="test" class="webdev.quizmaster.TestBean" scope="session"/>

<h3><%=test.getTitle() %></h3><p><i><%=test.getDescription() %></i></p>

<% int i=0;for(TestQuestionBean q : test.getQuestions()){

i++;out.println("<hr width=\"95%\"><p>Question " + i + ": " +

q.getText()+"</p><ul>");

for(TestAnswerBean a : q.getAnswers()){out.println("<li><i>" + a.getText() + "</i></li>");

}

out.println("</ul>");}%>

viewTest.jsp

Page 29: XML, Uploading, Importing... Joshua Scotton

Adding Authentication

Page 30: XML, Uploading, Importing... Joshua Scotton

connectionName connectionPassword connectionURL driverName roleNameCol userCredCol userNameCol userRoleTable userTable

org.apache.catalina.realm.JDBCRealm

Page 31: XML, Uploading, Importing... Joshua Scotton

CREATE TABLE `QuizMaster`.`user` (`username` TEXT NOT NULL ,`password` TEXT NOT NULL

) ENGINE = InnoDB;

CREATE TABLE `QuizMaster`.`role` (`username` TEXT NOT NULL ,`role` TEXT NOT NULL

) ENGINE = InnoDB;

SQL for Tables

Page 32: XML, Uploading, Importing... Joshua Scotton

Will need to install the MySQL driver from http://dev.mysql.com/downloads/connector/j/3.0.html in the tomcat/lib folder

<Realm className="org.apache.catalina.realm.JDBCRealm"driverName="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/quizmaster"connectionName=“username"connectionPassword=“password"userTable="user"userNameCol="username"userCredCol="password"userRoleTable="role"roleNameCol="role"/>

JDBCRealm in Context.xml

Page 33: XML, Uploading, Importing... Joshua Scotton

admin:admin guest:guest

Setup Users

Page 34: XML, Uploading, Importing... Joshua Scotton

admin User

Setup Roles