解决办法:
从tomcat lib目录下拷贝一个servlet-api.jar的包到“JDK\jre\lib\ext”目录下
凡是出现找不到包的情况,都可以将找到的包放到JDK\jre\lib\ext下,然后再编译就能够通过 一个注册好的servlet可以被多次映射 在匹配的时候,要参考的标准是: (1)看谁的匹配度高,谁就被选择 (2)*.do的优先级最低 防止中文乱码问题 response.setCharacterEncoding("utf-8"); Servlet单例问题 当Servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务。即在使用中是单例 因为Servlet是单例,因此会出现线程安全问题:比如: 售票系统.如果不加同步机制,则会出现问题: 原则: (1)如果一个变量需要多个用户共享,则应当在访问该变量的时候加同步机制 synchronized(对象){//同步代码} (2) 如果一个变量不需要共享,则直接在doGet()或者doPost()中定义 servlet中的<load-on-startup>配置 需求:当我们的网站启动的时候,可能会要求初始化一些数据,(比如创建临时表) 再比如,我们的网站有一些要求定时完成的任务[定时写日志,定时备份数据库...定时发送邮件] 解决方法:可以通过<load-on-startup>配合 线程知识搞定 先说明<load-on-startup>:通过配置<load-on-startup>我们可以指定某个Servlet自动创建 <!--1表示被init()顺序--> <load-on-startup>1</load-on-startup> 在这里配置的信息只供该servlet读取 如果这里配置的参数可被所有的servlet读取 深度剖析Http协议 超文本传输协议 工作在tcp/ip协议基础上的 通过httpwatch插件来抓取http请求内容 http1.0短连接 http1.1长连接 目前通用的是1.1版本 http是TCP/IP协议的一个应用层协议,http也是我们web开发的基础 request.getHeader("Host"); Referer:可通过它来判断来自哪里 从本网站过来才有值,超链接过来没有值 referer==null||!referer.startsWith("http://localhost:8080/servletPro"); 功能:允许本网站的用户才能访问该servlet文件 200:请求和响应没有发生错误 302:表示当你请求一个资源的时候,服务器返回302表示让浏览器转向另外一个资源 404:表示找不到资源 500:服务器端错误 sendRedirect()的使用 需求:当用户登录成功后,把该用户名字显示再登录成功页面 解决思路 1、使用java基础 static 2、使用sendRedirect() 3、使用session传递信息 既可以传字符串也可以传对象 4、使用request的转向 转向是在web服务器发生的 两个页面使用的是同一个request和response对象 1、使用forward不能转向到该web应用外的url 2、因为forward是发生在web服务器,所以Servlet1和Servlet2使用的是同一个request和response 使用sendRedirect()方法不能通过request.setAttribute()把属性传递给下一个Servlet 面试题: 请问 sendRedirect()和forward区别是什么 答: (1)叫法不同,sendRedirect()叫重定向,转发 forward()叫转向 (2)实际发生的位置不一样 sendRedirect发生在浏览器 forward发生在web服务器 (3)用法不一样 request.getRequestDispatcher("/资源URI").forward(request,response) response.sendRedirect("/web应用/资源URI") (4)能够去的URL不一样 sendRedirect可以去任何URL forward只能去当前的WEB应用资源 怎样算是一次http请求 只要没有停止,也没有回到浏览器重定向,就算一次(无论走了多少的servlet) 无论转向多少次,浏览器的地址栏一直都保存在最开始的URL 说明: 基本格式 response.sendRedirect("servlet的地址?参数名=参数值&参数名=参数值....") 在接收数据的servlet中: String 参数 = request.getParameter(参数名); 参数值是string,不能穿对象。参数名应该避免中文,最好按照规范命名 中文乱码专题 发生乱码有三种情况 ① 表单 form (1)post 解决方法: request.setCharacterEncoding("utf-8"); //gbk gb2312 (2)get 解决方法: String u = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); (最好写成一个工具类) ② 超链接 <a href="http://www.sohu.com?name="林">测试</a> 超链接提交本质是get提交 ③ sendRedirect()发生乱码 response.sendRedirect("servlet地址?username=林"); response细节 HttpServletRequest常用方法 request.getQueryString(); 该函数可以获取请求部分的数据,就是请求头?后面的所有内容 在下载的时候中文文件名变成乱码 如果接受的是单个内容,使用 String sex = request.getParameter("sex"); 如果接受复选框的内容,则使用getparameterValues String [ ] hobbies = request.getParameterValues("hobby"); 防止遍历数组出错 什么时候使用hidden传输数据 1、不希望用户看到该数据 2、不希望影响界面,同时要使用该数据 数据库验证