第09章习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.使用 FreeMarker 编写一个用户登录实例。
实例内容:当用户在登录页面中没有输入任何信息就登录时,提示用户需要输入用户名 和密码方可登录,若用户输入错误的用户名或密码,提示用户输入的用户名或密码错误,若 用户输入正确的用户名和密码,登录成功,页面跳转到欢迎用户登录页面。 (1)创建一个 Web 工程,名称为 login,导入工程所需的 jar 文件, (2)在 WebRoot 下新建一个文件夹 freemarker,在 freemarker 创建模板文件 login.ftl、 welcome.ftl 和 error.ftl,其中 login.ftl 为用户登录页面,welcome.ftl 为欢迎页面,error.ftl 为登 录失败页面。login.ftl 的代码如下: <html> <head> <title>登录页面</title> </head> <body> <center>用户登录</center>
wk.baidu.com–4–
第9章
Web 网页模板技术
习题答案
<form action="login" name="loginForm" method="post"> <table align="center"> <tr> <td>用户名</td> <td><input type="text" name="username"/></td> </tr> <tr> <td>密码</td> <td><input type="password" name="password"/></td> </tr> <tr> <td><input type="submit" name="submit" value="登录"/></td> </tr> </table> </form> </body> </html> welcome.ftl 的代码如下: <html> <head> <title>欢迎页面</title> </head> <body> <center>欢迎你:${username}</center> </body> </html> error.ftl 的代码如下: <html> <head> <title>失败页面</title> </head> <body> <center>${message}</center> </body> </html> (3)在工程的 sunyang 包下创建一个 Servlet 类 LoginFreeMarker.java,该 Servlet 类用来 进行用户登录判断,若用户登录成功,页面则转向欢迎页面,否则转向登录失败页面,类 LoginFreeMarker 的代码如下: import java.io.IOException;
–3–
第9章
Web 网页模板技术
习题答案
book.setBookprice(53.2); book.setBookcencern("XX出版社"); book.setBookdate("2008-02-03"); context.put("book", book);//将Book对象放入Velocity上下文中 StringWriter writer = new StringWriter(); try { //把模板和上下文结合起来 Velocity.mergeTemplate("showBookInfo.vm", "GBk", context, writer); } catch (Exception e) { e.printStackTrace(); } System.out.println(writer.toString());//控制台上输出 } } (4)运行程序,控制台上的输出结果如下图所示:
–2–
第9章
Web 网页模板技术
习题答案
this.bookauthor = bookauthor; } public double getBookprice() { return bookprice; } public void setBookprice(double bookprice) { this.bookprice = bookprice; } public String getBookcencern() { return bookcencern; } public void setBookcencern(String bookcencern) { this.bookcencern = bookcencern; } public String getBookdate() { return bookdate; } public void setBookdate(String bookdate) { this.bookdate = bookdate; } } (4)在工程的 sunyang 包下创建一个类 BookVelocity.java,该类用来给模板提供值。类 BookVelocity 的代码如下: import java.io.StringWriter; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; public class BookVelocity{ public static void main(String[] args) { try { Velocity.init();//初始化Velocity引擎 } catch (Exception e) { e.printStackTrace(); } VelocityContext context = new VelocityContext();// 初始化Velocity上下文 Book book=new Book(); //给Book属性赋值 book.setBookid(200803); book.setBookname("JSP教程"); book.setBookauthor("sunyang");
实例内容:在控制台输出图书的 id、图书的名称、图书的作者、图书的价格、图书的出 版社、图书的 出版日期,要求使用方法赋值的方式给各个属性赋值。 答案: (1)创建一个 Java 工程,名称为 booksys,导入工程所需的 jar 文件 velocity-dep-1.5.jar。 (2)在工程下创建模板文件 showBookInfo.vm,该模板文件可输出图书的相关信息,模 板文件的代码如下: 图书id: $book.bookid 图书名称:$book.bookname 图书作者:$book.bookauthor 图书价格:$book.bookprice 出版社: $book.bookcencern 出版日期:$book.bookdate (3)在工程的 sunyang 包下创建一个类 Book.java,该类为一个 JavaBean,代表图书的 相关信息。类 Book 的代码如下: public class Book { private int bookid; //id号 private String bookname; //书名 private String bookauthor; //作者 private double bookprice; //价格 private String bookcencern; //出版社 private String bookdate; //出版日期 public int getBookid() { return bookid; } public void setBookid(int bookid) { this.bookid = bookid; } public String getBookname() { return bookname; } public void setBookname(String bookname) { this.bookname = bookname; } public String getBookauthor() { return bookauthor; } public void setBookauthor(String bookauthor) {
3.简述 FreeMarker 的宏指令及其用法?
答案: 在 FreeMarker 中, 宏是一个用户自定义指令, 定义完宏后就可以在模板中用@来使用宏。 宏是使用 macro 指令来定义的。例如使用下面的代码定义宏: <#macro book bookname> 书的名字:${bookname} </#macro> 使用下面的代码在模板中使用宏: <#macro book bookname> 书的名字:${bookname} <@book bookname="JSP教程"/>
第9章
Web 网页模板技术
习题答案
第 9 章 Web 网页模板技术
习题答案
1.Velocity 中属性引用的赋值方式都有哪些?。
答案: Velocity 中属性引用的赋值方式有两种: ● 使用 Hashtable 对象赋值。 ● 使用方法赋值。
2.简述几种 Velocity 的指令及其用法。
答案: 下面是几种常见的 Velocity 指令: ● set 指令:给引用赋值。 ● 使 if/elseif/else 指令:类似于 Java 语言中的 if…elseif…else 指令,可进行条件控制。 ● set 指令:给引用赋值。 ● foreach 指令:进行遍历循环。 ● macro 指令:用来定义宏。
–5–
第9章
Web 网页模板技术
习题答案
import java.io.Writer; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class LoginFreeMarker extends HttpServlet { private Configuration configuration; //初始化FreeMarker配置 public void init() { configuration = new Configuration();// 创建Configuration实例 configuration.setServletContextForTemplateLoading(getServletContext(), "freemarker");// 指定模板的位置在freemarker目录下 } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Map<String, Object> data = new HashMap<String, Object>();// 建立数据模型 String username=req.getParameter("username"); String password=req.getParameter("password"); Template t=null; if(username.equals("sunyang")&&password.equals("123456")){ data.put("username", username);//将用户信息放入数据模型中 t = configuration.getTemplate("welcome.ftl");// 加载模板文件 }else{ //将提示信息放入数据模型中 data.put("message", "输入的用户名或密码错误"); t = configuration.getTemplate("error.ftl");// 加载模板文件 } //在页面里使用模板的charset, //使用text/html MIME-type resp.setContentType("text/html; charset=" + t.getEncoding()); Writer out = resp.getWriter();
4.在 FreeMarker 中如何格式化数字?
答案: 在 FreeMarker 中可使用#{expre;format}这种形式格式化数字,其中的 format 使用 mN
–1–
第9章
Web 网页模板技术
习题答案
或 MN 表示,mN 代表小数部分最小 N 位,MN 代表小数部分最大 N 位。
5.使用 Velocity 模板在控制台输出一本图书的相关信息。
相关文档
最新文档