Servlet之路

    xiaoxiao2021-03-25  136

    IDE(eclipse[ java se] +myeclipse [ 插件  可以支持jsp/servlet/struct/spring/hibernate....])  response.setCharacterEncoding("utf-8"); 防止中文乱码 response.setContentType("text/html;charset=utf-8"); //直接告诉浏览器以什么编码格式编译  response.setCharacterEncoding(this.getServletConfig().getInitParameter("encoding")); //从配置文件中获取编码格式 文件改名要慎重,因为配置文件中还是用的原来文件名 form中的action应该这样写      /web应用名/Servlet的url servlet提供了两种页面跳转的方式  Sendredirect     转向      forward     转发 sendRedirect的url格式: /web应用名/servlet url 可以使用a实现页面跳转  href格式为:/web应用名/servlet url Tomcat原理 import java.net.*; import java.io.*; public class test {         public static void main(String [] args ) throws Exception{              ServerSocket ss = new ServerSocket(9999);               while ( true ){              Socket s = ss .accept();              System. out .println( "在9999等待连接...." );              OutputStream os = s .getOutputStream();              BufferedReader br = new BufferedReader( new FileReader( "d:\\hello.html" ));              String buf = "" ;               while (( buf = br .readLine())!= null ){                                           os .write( buf .getBytes());              }                             br .close();               os .close();               s .close();              }        } } 浏览器会缓存近期访问网站获取的文件。当你再次访问相同的网站时,浏览器会先判断是否有缓存,有的话直接取,没有的话再访问 端口被占用 查看端口占用情况 netstat -an netstat -anb netstat -ano 用任务管理器关闭占用端口的进程 更改需要的端口号 conf\server.xml <Connector connectionTimeout="2000" port="8080"/>(20秒就超时,端口号为8080) tomcat的目录结构 bin:启动和关闭comcat的bat文件 conf:配置文件      server.xml:该文件用于配置和server相关的信息,比如tomcat启动端口后,配置Host,配置Context即           web应用          web.xml:该文件配置与web应用(web应用就相当于是一个web站点)          tomcat-user.xml:该文件用户配置tomcat的用户密码和权限 lib目录:该目录防止运行tomcat运行需要的jar包 logs目录:存放日志,当我们需要去查看日志的时候,很有用 webapps目录:该目录下,放置我们的web应用(web站点) work工作目录:该目录用于存放jsp被访问后 生成的对应的server文件 和.class文件 配置的代码是 web.xml 文件中添加:                                                        <welcome-file-list>                                                             <welcome-file>hello.html</welcome-file>                                                        </welcome-file-list> web-inf目录下的 classes 目录将来是存放 class文件 web.xml 配置当前这个web应用的信息 在C:windows/system32/drivers/etc 下的host文件 在tomcat的server.xml里面添加一个主机名 Servlet基础知识 servlet是用纯java写的程序,运行在服务器端,几乎可以完成网站所有的功能,是jsp的基础,被web服务器管理 <!--根据servlet规范,需要将Servlet部署到web.xml文件,该部署配置可以从examples下拷贝--> <servlet>      <!--servlet-name 给该Servlet取名,该名字可以自己定义:默认就使用该Servlet的名字-->      <servlet-name>MyHttpServlet</servlet-name>      <!--servlet-class要指明该servlet放在哪个包下,形式是包/包/../类-->      <servlet-class>com.lch.MyHttpServlet</servlet-class> </servlet>      <!--Servlet的映射--> <servlet-mapping>      <!--这个Servlet-name要和上面的servlet-name名字一样-->      <servlet-name>MyHttpServlet</servlet-name>      <!--url-pattern 这里就是将来访问该Servlet的资源名部分,默认命名规范:就是该Servlet的名字-->      <url-pattern>/MyHttpServlet</url-pattern> </servlet-mapping> 当编译器找不到servlet包

    解决办法:

    从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、不希望影响界面,同时要使用该数据 数据库验证
    转载请注明原文地址: https://ju.6miu.com/read-4278.html

    最新回复(0)