




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1.配置tomcat22.主动改变tomcat的端口23.设置首页24.虚拟目录配置25.配置域名26.配置默认主机27.实现servlet接口的方式28.在MyEclipse中配置tomcat49.使用通配符在servlet映射到URL中410.servlet 中的 配置511.ServletConfig对象512.http请求消息头613.状态码原因叙述614.http响应消息头详解715.定时刷新Refresh使用716.文件下载 Content-Disposition717.缓存讲解818.中文乱码处理819.HttpServletRequest对象的详解920.连接数据库1021.分页操作1122.md5加密算法1123.cookie说明1224.session生命周期设置1225.验证码生成算法1226.过滤器1427.控制session的销毁时间1628.ServletContext的应用161. 配置tomcat1 环境变量中添加 JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录)2 在不配置JAVAHOME的前提下启动tomcat在startup.bat的第25行中添加set JAVA_HOME=JKD路径2. 主动改变tomcat的端口到 conf/server.xml 文件中修改server.xml的端口号)protocol=org.apache.coyote.http11.Http11NioProtocol redirectPort=8443/3. 设置首页 web文件夹下配置WEB-INF文件夹 在 web.xml 文件中添加配置的代码: hello1.html4. 虚拟目录配置 找到server.xml文件 编辑host节点 添加Context path在server.xml中添加:myweb2:是访问时输入的web名,实际取出的是web2中的资源d:web2:绝对路径下web2中存放资源如:hello2.html实际访问时输入的地址:http:/localhost:8088/myweb2/hello2.html3 需要重启tomcat,才能生效.5. 配置域名 (1) 在C:WINDOWSsystem32driversetc 下的host文件添加 (2) 在tomcat 的server.xml文件添加主机名 (3) 在d:web3 加入了一个 /WEB-INF/web.xml 把 hello2.html设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效6. 配置默认主机在tomcat/conf/server.xml 文件7. 实现servlet接口的方式 在webapps下建立一个web应用 Web1 在Web1 下建立 WEB-INF-web.xml web.xml可以从 ROOT/WEB-INF/web.xml拷贝 在WEB-INF 下建立 classes 目录(我们的Servlet 就要在该目录开发.),建立 lib文件夹 开发MyServlet.javapackage com.hsp;import javax.servlet.*;import javax.servlet.http.*; 为了能将servlet-api.jar包引入,需要配置环境变量变量值; E:tomcatapache-tomcat-6.0.20libservlet-api.jar 记得带上文件名 根据Servlet规范,我们还需要部署Servlet MyFirstServlet com.hsp.MyFirstServlet 注意:后面不要带.java MyFirstServlet /ABC 在浏览器中测试补充: 如果使用javac 去编译一个java文件,则需要带命令参数javac -d . java文件8. 在MyEclipse中配置tomcat9. 使用通配符在servlet映射到URL中 有两种格式:第一种格式 *.扩展名 比如 *.do *.ss第二种格式 以 / 开头 同时以 /* 结尾 比如 /* /news/* 通配符练习题:l Servlet1 映射到 /abc/* l Servlet2 映射到 /* l Servlet3 映射到 /abc l Servlet4 映射到 *.do 问题(面试题):l 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应Servlet引擎将调用Servlet1。l 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应Servlet引擎将调用Servlet3。l 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应Servlet引擎将调用Servlet1。l 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应Servlet引擎将调用Servlet2。l 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应Servlet引擎将调用Servlet2。在匹配的时候,要参考的标准:(1)看谁的匹配度高,谁就被选择(2)*.do 的优先级最低10. servlet 中的 配置 需求: 当我们的网站启动的时候,可能会要求初始化一些数据,(比如创建临时表), 在比如: 我们的网站有一些要求定时完成的任务 定时写日志,定时备份数据. 定时发送邮件.解决方法: 可以通过 配合 线程知识搞定.111. ServletConfig对象 该对象主要用于 读取 servlet的配置信息. 案例:ServletConfigTestcom.snow.servlet.ServletConfigTest encoding utf-8 如何使用String encoding=this.getServletConfig().getInitParameter(encoding);补充说明:这种配置参数的方式,只能被某个Servlet独立使用.如希望让所有的Servlet都去读取某个参数,这样配置: !- -u如果要把所有的参数都读取,则使用 如下方法 :Enumerationnames=this.getServletConfig().getInitParameterNames();while(names.hasMoreElements()String name=names.nextElement();System.out.println(name);System.out.println(this.getServletConfig().getInitParameter(name);12. http请求消息头1) Accept: text/html,image/* 告诉服务器,我可以接受 文本,网页,图片2) Accept-Charset: ISO-8859-1 接受字符编码 iso-8859-13) Accept-Encoding: gzip,compress 可以接受 gzip,compress压缩后数据.4) Accept-Language: en-us,zh-cn 浏览器支持中,英文5) Host: :80 我要找主机是 :806) If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。7) Referer: /index.jsp 告诉服务器,我来自哪里,该消息头,常用于防止盗链8) User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)告诉服务器,浏览器内核9) Cookie cookie?10) Connection: close/Keep-Alive 保持连接,发完数据后,我不关闭连接11) Date: Tue, 11 Jul 2000 18:23:51 GMT 浏览器发送该http请求的时间13. 状态码原因叙述 状态码含义100-199表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程200-299表示成功接收请求并完成整个处理过程,常用200300-399为完成请求,客户需要进行一步细化请求。例如:请求的资源已经移动一个新的地址,常用302,307400-499客户端的请求有错误 404500-599服务器端出现错误,常用500200:就是整个请求和响应过程没有发生错误,这个最常见.302:表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: response.sendRedirect(“/web应用/资源名”)案例:response.setStatus(302);response.setHeader(Location, /servletPro/Servlet2);/ 上面两句话等价response.sendRedirect(/servletPro/Servlet2);404: 找不到资源500: 服务器端错误14. http响应消息头详解n Location: /index.jsp 【让浏览器重新定位到url】n Server:apache tomcat 【告诉浏览器我是tomcat】n Content-Encoding: gzip 【告诉浏览器我使用 gzip】n Content-Length: 80 【告诉浏览器会送的数据大小80节】n Content-Language: zh-cn 【支持中文】n Content-Type: text/html; charset=GB2312 内容格式text/html; 编码gab2312n Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】n Refresh: 1;url= 【过多久去,刷新到 】n Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】n Transfer-Encoding: chunked 传输的编码n Set-Cookie:SS=Q0=5Lb_nQ; path=/search设置Cookien Expires: -1告诉浏览器如何缓存页面IEn Cache-Control: no-cache 告诉浏览器如何缓存页面火狐n Pragma: no-cache 告诉浏览器如何缓存页面n Connection: close/Keep-Alive 保持连接 1.1是Keep-Aliven Date: Tue, 11 Jul 2000 18:23:51 GMT15. 定时刷新Refresh使用 response.setHeader(Refresh, 5;url=/servletPro/Servlet2);16. 文件下载 Content-Disposition public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html);/PrintWriter out = response.getWriter();/演示下载文件response.setHeader(Content-Disposition, attachment; filename=winter.jpg);/打开文件.说明一下web 站点下载文件的原理/1.获取到要下载文件的全路径String path=this.getServletContext().getRealPath(/images/Winter.jpg);/2创建文件输入流FileInputStream fis=new FileInputStream(path);/做一个缓冲字节数组byte buff=new byte1024;int len=0;/表示实际每次读取了多个个字节OutputStream os=response.getOutputStream();while(len=fis.read(buff)0)os.write(buff, 0, len);/缺点: 没有进度条./图标/关闭os.close();fis.close(); 17. 缓存讲解 有些网站要求及时性很高,因此要求我们不缓存页面代码:/指定该页面不缓存 Ieresponse.setDateHeader(Expires, -1);【针对IE浏览器设置不缓存】/为了保证兼容性.response.setHeader(Cache-Control, no-cache);【针对火狐浏览器等】response.setHeader(Pragma, no-cache);【其他浏览器】 有些网站要求网页缓存一定时间,比如缓存一个小时response.setDateHeader(Expires, System.currentTimeMillis()+3600*1000*24);后面一个参数表示设置的缓存保持时间,-1表示永远缓存18. 中文乱码处理 发生中文乱码有三种情况 表单form (1) post 在服务器端设置成浏览器端的编码方式。解决方法: request.setCharacterEncoding(utf-8); /gbk gb2312 big5(2) get写一个工具类:public class MyTools public static String getNewString(String str) String newString=;try newString=new String(str.getBytes(iso-8859-1),utf-8); catch (Exception e) e.printStackTrace();/ 把iso-8859-1 转换成 utf-8 return newString; 超链接测试该方法和get处理方法一样. sendRedirect() 发生乱码response.sendRedirect(“servlet地址?username=顺平”); 版本低导致的乱码 特别说明,如果你的浏览器是 ie6 或以下版本,则我们的 和 中情况会出现乱码(当中文是奇数的时候)解决方法是 :String info=.URLEncoder.encode(你好吗.jpg, utf-8);测试response.sendRedirect(“servlet地址?username=”+info);说明: 我们应当尽量使用post 方式提交;返回浏览器显示乱码 在服务端是中文,在response的时候,也要考虑浏览器显示是否正确,一般我们通过response.setContentType(“text/html;charset=utf-8”); ok下载提示框中文乱码补充一个知识点: 当我们下载文件的时候,可能提示框是中文乱码 String temp=.URLEncoder.encode(传奇.mp3,utf-8);response.setHeader(Content-Disposition,attachment; filename=+temp);19. HttpServletRequest对象的详解 getRequestURL方法返回客户端发出请求时的完整URL。getRequestURI方法返回请求行中的资源名部分。getQueryString 方法返回请求行中的参数部分(参数名+值)。该函数可以获取请求部分的数据 比如http:/localhost/web名?username=abc&pwd=123request.getQueryString(); 就会得到 username=abc&pwd=123getRemoteAddr方法返回发出请求的客户机的IP地址getRemoteHost方法返回发出请求的客户机的完整主机名getRemotePort方法返回客户机所使用的网络端口号客户机的端口号是随机选择的,web服务器的端口号是一定的getLocalPort方法返回web服务器所使用的网络端口号getLocalAddr方法返回WEB服务器的IP地址。getLocalName方法返回WEB服务器的主机名20. 连接数据库 Connection ct=null;ResultSet rs=null;PreparedStatement ps=null;try /1加载驱动Class.forName(oracle.jdbc.driver.OracleDriver);/2.得到连接 ct=DriverManager.getConnection(jdbc:oracle:thin::1521:ORCL,scott,tiger);/3.创建PreparedSatementps=ct.prepareStatement(select * from users where id=? and passwd=?);/给? 赋值ps.setObject(1, id);ps.setObject(2, password);/4.执行操作rs=ps.executeQuery();/5.根据结果左处理if(rs.next()/说明该用户合法 request.getRequestDispatcher(/MainFrame).forward(request,response);else request.getRequestDispatcher(/LoginServlet).forward(request,response); catch (Exception e) e.printStackTrace();/ TODO: handle exception finally/关闭资源if(rs!=null)try rs.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();rs=null;if(ps!=null)try ps.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();ps=null;if(ct!=null)try ct.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();ct=null;21. 分页操作 定义四个分页变量pageNow 表示第几页,该变量是由用户来决定,因此变化pageSize 每页显示几条记录,由程序指定,也可以由用户定制pageCount 表示共有多少页, 该变量是计算出来-思考 怎样确定rowCount 共有多少条记录,该变量是查询数据库得到pageCount=(rowCount-1)/pageSize+1;22. md5加密算法 import java.security.*; import java.security.spec.*; class MD5_test public final static String MD5(String s) char hexDigits = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f ; try byte strTemp = s.getBytes(); MessageDigest mdTemp = MessageDigest.getInstance(MD5); mdTemp.update(strTemp); byte md = mdTemp.digest(); int j = md.length; char str = new charj * 2; int k = 0; for (int i = 0; i 4 & 0xf; strk+ = hexDigitsbyte0 & 0xf; return new String(str); catch (Exception e) return null; 23. cookie说明 1.cookie默认生命周期是会话级别2.通过setMaxAge() 可以设置生命周期setMaxAge(正数) , 即多少秒后该cookie失效setMaxAge(0) ,删除该cookiesetMaxAge(负数), 相当于该cookie生命周期是会话级别 3. cookie存放中文,怎么处理存放:String val=.URLEncoder.encode(顺平,utf-8); Cookie cookie=new Cookie(name,val);取出:String val=.URLDecoder.decode(cookie.getValue(), utf-8); out.println(name =+val);24. session生命周期设置 (1)一个地方是 tomcat/conf/web.xml 30/表示30分钟的意思对所有的web应用生效(2)另外一个地方,就是在单个web应用的下去修改 web.xml 30session精确到分钟,cookie精确到秒 如果发生冲突,则以自己的web应用优先级高(3)session.setMaxInactiveinterval(60)发呆六十秒后session失效25. 验证码生成算法 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CreateCode extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException / 7.禁止浏览器缓存随机图片response.setDateHeader(Expires, -1);response.setHeader(Cache-Control, no-cache);response.setHeader(Pragma, no-cache);/ 6.通知客户机以图片方式打开发送过去的数据response.setHeader(Content-Type, image/jpeg);/ 1.在内存中创建一副图片BufferedImage image = new BufferedImage(60, 30,BufferedImage.TYPE_INT_RGB);/ 2.向图片上写数据Graphics g = image.getGraphics();/ 设背景色g.setColor(Color.BLACK);g.fillRect(0, 0, 60, 30);/ 3.设置写入数据的颜色和字体g.setColor(Color.RED);g.setFont(new Font(null, Font.BOLD, 20);/ 4.向图片上写数据String num = makeNum();/这句话就是把随机生成的数值,保存到sessionrequest.getSession().setAttribute(checkcode, num); 通过session就可以直接去到随即生成的验证码了g.drawString(num, 0, 20);/ 5.把写好数据的图片输出给浏览器ImageIO.write(image, jpg, response.getOutputStream();/该函数时随机生成7位数字public String makeNum() Random r = new Random();/9999999 可以生成7位String num = r.nextInt(9999) + ; StringBuffer sb = new StringBuffer();/如果不够4位,前面补零for (int i = 0; i 4 - num.length(); i+) sb.append(0);num = sb.toString() + num;return num;public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doGet(request, response);使用:26. 过滤器 开发过滤器的步骤:1. 创建 继承HttpServlet 同时实现Filter接口2. 默认filter不生效,需要配置. MyFilter com.zhy.filter.MyFilter MyFilter/* /*表示对该WEB的所有网页都过滤 3. 在filter的方法中添加业务逻辑.import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.hsp.domain.User;public class MyFilter1 extends HttpServlet implements Filter public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=utf-8);PrintWriter out = response.getWriter();public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException this.doGet(request, response);public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException /获取sessionHttpServletRequest httpServletRequest=(HttpServletRequest)request;/看看请求的资源是什么String uri=httpServletRequest.getRequestURI();if(uri.startsWith(/UsersManager3/imgs)|uri.startsWith(/UsersManager3/Login)/直接放行.chain.doFilter(request, response);elseHttpSession session=httpServletRequest.getSession();User user=(User) session.getAttribute(loginuser);if(user!=null)/该用户合法,放行chain.doFilter(request, response);elserequest.setAttribute(err, 请好好登陆);httpServletRequest.getRequestDispatcher(/LoginServlet).forward(request, response);public void init(FilterConfig arg0) throws ServletException / TODO Auto-generated method stubu 过滤器链实现方式 :1. 在创建一个过滤器 (继承Http
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初创企业家培训课程考试题及答案详解
- 2025-2026学年北师大版(2024)小学数学三年级上册《看一看(四)》教学设计
- 2025年纺织纤维色浆项目合作计划书
- 河北省石家庄第二十八中学2025-2026学年九年级上学期开学考考试英语试卷(含笔试答案无听力音频及原文)
- 第二章 直角三角形的边角关系 单元测试(基础卷)(含答案)初中数学鲁教版(五四制)(2024)九年级上册
- 学前心理学试题及答案
- 2025年辽宁省锦州实验学校中考数学三模试卷(含部分答案)
- 2025年无缝管热连轧机项目发展计划
- 扭伤安全培训反思课件
- 打造卓越销售团队课件教学
- 《政治经济学》(全套课件)
- 人力资源部安全责任清单、履职清单
- 项目管理考核办法实施细则
- 女性盆底解剖结构及功能
- 污水处理厂主要设施操作规程
- 梯笼安全验收表0001
- 全称量词命题与存在量词命题的否定 教案
- 《童心向党欢度国庆》-国庆节主题班会课件
- 监理整改回复单(模板)
- 阿尔茨海默病及其他类型痴呆临床路径表单
- 嗜血细胞综合症护理查房ppt
评论
0/150
提交评论