二、填空题1.在编写Servlet时,需要继承HttpServlet类,在Servlet中声明doGet()和doPost()需要HttpServletRequest 和HttpServletResponse类型的两个参数。
2.jsp主要内置对象有:response、exception、pageContext、request、session、application 、out、config、page。
3.使用useBean动作标记的时候scope属性有4种选项,作用范围由小到大是page、_requset_、_session ,application__,其中session _是指当关闭浏览器的时候这个javabean失效,_application_ 是指当关闭服务器的时候这个javabean失效。
1、控制一个Servlet的生命周期的方法有init( ), service( )和_ destroy( )。
其中init()_在Servlet加载时调用,_destroy()__在撤消应用或关闭web container时调用,客户端的每次请求此Servlet时都会调用service()方法。
Servlet通常只有一个实例,被所有的访问者共享,因此要注意资源的同步。
2. 在Servlet中要输出内容,使用HttpServletResponse的方法_setContentType 方法设置文档内容类型,对于文本类型调用方法_getWriter获得一个PrintWrite的输出流,对于二进制类型调用_getOutputStream获得ServeltOutputStream的输出流。
调用HttpServletRequest的方法_getParameter获取有名参数,调用getInputStream获得一个ServletInputStream 的输入流。
在Servlet中也可以调用ServletContext 和HttpServletRequest 的方法_ getRequestDispatche_获得RequestDispatcher, 将请求的处理权交给一个新的资源。
3.在Java Web开发中,跟踪客户状态的手段可通过_session_和_cookie_; 增加一个新的cookie, 调用HttpServletResponse的_addCookie _方法;要在服务器端查询cookie, 调用HttpServletRequest的getCookies方法。
Session的类型是HttpSession, 获得session的途径是调用HttpServletRequest的方法是_ getSession_。
三.笔试题18简述servlet进行中文处理的方法。
19请写出获取初始化参数的方法。
20简述使用Cookie进行会话跟踪过程。
(写出主要步骤)21一个Jsp页面可由哪些元素组成?普通的Html标志符、变量和方法的声明、Java程序片、Java表达式22简述JSP的9大内置对象request,请求对象:代表来自客户端的请求;response,响应对象:代表对客户端的响应; session,会话对象:代表服务器与客户端所建立的会话;out,输出对象:代表了向客户端发送数据的对象;application,应用程序对象:负责提供应用程序在服务器中运行时的一些全局信息;exception,例外对象,代表了JSP文件运行时所产生的例外对象23 JavaBeans具有的特点和好处有哪些?1.提高代码的可复用性:对于通用的事务处理逻辑,数据库操作等都可以封装在JavaBean 中,通过调用JavaBean的属性和方法可快速进行程序设计。
2.程序易于开发维护:实现逻辑的封装,使事务处理和显示互不干扰。
3.支持分布式运用:多用JavaBean,尽量减少java代码和html的混编。
24 Servlet 中 forward() 与 redirect()的区别?redirect() 会丢失request的所有信息它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。
而 RequestDispatcher 的forward() 方法,是转发,需要request 和 response最为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。
这一过程是服务器内部完成的,作为访问者,是感觉不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。
四、操作题1、编写一个JSP页面,输出九九乘法表<html > <head></head><body><script language="javascript"> for (j=1;j<=9;j++){ for (i=1;i<=j;i++){ document.write(i+"*"+j+"="+i*j+" ") if (i==2 && j<=4){ document.write(" ")}}document.write("<br>")}</script></body></html>2、应用JSP脚本实现一个简单的计算器<%@ page contentType="text/html;charset=gb2312"%><html><h1 align="center">简易计算器</h1><hr width="600"><head><!--这是计算器的界面--><!--控制num1,num2不能为空,同时也不能是字符串--><script language="javascript">//写一个函数验证用户是不是空提交function checkNum(){//判断num1,num2是否为空if(form1.numb1.value==""||form1.numb2.value==""){window.alert("您输入的值为空!");return false;}//判断num1,是不是一个数if((Math.round(form1.numb1.value)!=form1.numb1.value)||(Math.round(form1.numb2. value)!=form1.numb2.value)){window.alert("您输入的值不合法!”)return false; } }</script></head><center><body><%String num1=request.getParameter("numb1"); //接收第一个数String num2=request.getParameter("numb2"); //接收第二个数String oper=request.getParameter("op"); //接收运算符号Double dnum1=0.0;Double dnum2=0.0;Double result=0.0;//java中String -> intif(num1!=null&&num2!=null&&oper!=null) {dnum1=Double.parseDouble(num1);dnum2=Double.parseDouble(num2); //计算if(oper.equals("+")){ //加result=dnum1+dnum2; }else if(oper.equals("-")){ //减result=dnum1-dnum2; }else if(oper.equals("×")){ //乘result=dnum1*dnum2; }else{ //除result=dnum1/dnum2; } }%><form name="form1" action="Calculator.jsp"><p>请输入第一个数:<input type="text" name="numb1"></p><p>请输入第二个数:<input type="text" name="numb2"></p><p>请选择运算符:<select name="op"><option value=+>+</option><option value=->-</option><option value=×>×</option><option value=÷>÷</option></select></p><p><input type=”submit”value=”计算“onclick="return checkNum();"></p></form><hr width="600"><!--输出计算的结果-->计算结果:<%=result%><!--表达式语法--></body></center></html>3、文件下载设置文件ContentType类型、设置文件头、通过response获取ServletOutputStream对象(out)、写到输出流(out)中import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;1.import org.springframework.web.context.ServletContextAware;2.import javax.servlet.ServletContext;3.import javax.servlet.ServletOutputStream;4.import javax.servlet.http.HttpServletResponse;5.import java.io.*;6.@Controller7.public class FileController implements ServletContextAware{8. //Spring这里是通过实现ServletContextAware接口来注入ServletContext对象9. private ServletContext servletContext;10. @RequestMapping("file/download")11. public void fileDownload(HttpServletResponse response){12. //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载13. String path = servletContext.getRealPath("/");14. //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型15. response.setContentType("multipart/form-data");16. //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)17. response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");18. ServletOutputStream out;19. //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)20. File file = new File(path + "download/" + "download.pdf");21. try {22. FileInputStream inputStream = new FileInputStream(file);23. //3.通过response获取ServletOutputStream对象(out)24. out = response.getOutputStream();25. int b = 0;26. byte[] buffer = new byte[512];27. while (b != -1){28. b = inputStream.read(buffer);29. //4.写到输出流(out)中30. out.write(buffer,0,b);31. }32. inputStream.close();33. out.close();34. out.flush();35. } catch (IOException e) {36. e.printStackTrace();37. }38. } @Override39. public void setServletContext(ServletContext servletContext) {40. this.servletContext = servletContext; }41.}4、用JSP+Servlet+JavaBean实现从mysql数据库中一个数据库名字为usermanager,表名为userInfo的数据表中把所有记录读出来展现在JSP页面上的代码Myeclise新建一个Web Projectindex.jsp代码:<form action="servlet/loginServlet" method="post"><!-- 此处action是新建Servlet时自动在web.xml中生成的可修改--><div>Name<input type="text" name="name" /><br />Password<input type="text" name="pas" /><br /><input type="submit" value="Login" /><input type="hidden" value="login" name="typeId" /></div> </form>建包DBUtile--里面建类 DBConnection.Java内容 :package DBUtile; import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { private static Connection conn;// 数据库连接对象//获取MySQL数据库连接public static Connection getMySqlConnection() { String driverClass = "com.mysql.jdbc.Driver";// 驱动名称String url = "jdbc:mysql://localhost:3306/test_servlet";String user = "root";// MySQ帐号String password = "root";// MYSQL密码try {Class.forName(driverClass).newInstance();conn = DriverManager.getConnection(url, user, password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;} // 关闭连接public void dbClose() {try {conn.close();} catch (Exception e) {e.printStackTrace();} }建包login--里面建类1.右键new Servlet 名称LoginServlet 内容:package login; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import DBUtile.DBConnection; import com.mysql.jdbc.Statement; public class LoginServlet extends HttpServlet {public LoginServlet() {super();}public void destroy() { super.destroy(); // Just puts "destroy" string in log// Put your code here} public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8");// 设置响应的MIME类型。