web笔记

来源:互联网 发布:jsp添加java代码 编辑:程序博客网 时间:2024/05/19 22:04

第一个Web Project项目
1、MyEclipse2014窗口的优化;
1) 保留 console 和 Servers 两个窗口;其它窗口关闭,确保代码窗口最大化.
2) 改变MyEclipse2014在生成项目时默认采用的字符编码集( W… –> P… –> 输入 workspace –> 更改为UTF-8)
3) 改变字体,行号;
4) jsp打开时默认窗口[可视编辑窗口,代码编写窗口]的形式的改变(若只保留代码窗口,则需要改变)
W… –> P… –> 输入 File Ass… —> *.jsp —-> window default —> 点击default按钮
5) 在编码Java代码,为了输入任何一个字母均有提示,则需要改变设置
W… –> P… –> 输入 content Ass { 找 java 下的 } —> 右下角的 “.” 输入 “.abcd….z”

**2、Tomcat的目录结构及其目录的特点;**    其中相关文件的特点;    bin ---- Tomcat 启动和关闭的主目录    conf ---- Tomcat 配置的目录 (web.xml, server.xml,  context.xml )    logs ---- 日志(每次打开Tomcat均会有日志记录)    webapps ---- 项目发布的目录     work ---- 存放JSP编译的文件    lib ---- 用来存放 *.jar包, 凡是项目中使用到的外来的 *.jar均要复制到 lib 目录下。    temp ---- Tomcat 服务器产生的临时文件存放目录。**3、在Web Project项目中搭建架构。**

第一个Servlet程序:
1. 什么是Servlet?
Java Server Applet 它是一个Java的服务器小应用程序。通常为前台(Web网页)按请求来提供相应的服务。
它也是一个java类,一个特殊类;是因为它有一个父类是 HttpServlet

**2、在自已编写的Servlet类中编写了三个方法:**        1) init() 用来初始化Servlet对象的;        2) service(); 用来为前台请求时提供服务的; [每刷新前台网页一次就服务一次。]            我主要根据前台的请求方式提供相应的服务。            由于前台的请求方式有: get 和  post 两种方式;因此,service()方法会根据get去调用doGet()方法,                根据前台的post去调用doPost()方法;            前台默认的请求方式为: get方式。        3) destroy(); 用来销毁Servlet对象的; 在关闭Tomcat服务器时调用。**3、当Servlet类编写后,需要在项目的WebRoot/WEB-INF/web.xml文件进行配置**    在文件中写上以下代码即可:    格式:     <servlet>        <servlet-name>类名</servlet-name>        <servlet-class>包名.类名</servlet-class>     </servlet>    <servlet-mapping>        <servlet-name>类名</servlet-name>        <url-pattern>映射的目录</url-pattern>    </servlet-mapping>    例如:     <servlet>        <servlet-name>HelloServlet</servlet-name>        <servlet-class>com.hqg.web.servlet.HelloServlet</servlet-class>    //检验: 按住Ctrl键,点击包名;若发生跳转则配置正确。    </servlet>    <servlet-mapping>        <servlet-name>HelloServlet</servlet-name>        <url-pattern>/one</url-pattern>    </servlet-mapping>**4、项目的发布:**    1) 手动发布:        a) 先在Tomcat的 Webapps目录下新建一个目录(如: web1)作为项目(网站)的根;        b) 将项目的 WebRoot目录下的所有内容复制一份,粘贴到 Tomcat的 Webapps/web1目录下。    2) 在MyEclipse2014中发布:        通过工具栏的发布按钮来实现:  ....         通过控制台中的Server页签,找到 Tomcat7.x 服务器,在其上右击选 Add  De... 来发布项目。        最后,启动Tomcat,打开浏览器即可访问。    3) <Context path="/web2"  docBase="D:\JavaDemo2\Web02\ServletDemo2\WebRoot" reloadable="true" />        a)  /web2 就是项目的映射目录( 即: 发布目录 )        b) docBase的值就是项目的真实目录        访问时,在URL中输入:  http://localhost:8080/web2 回车即可打开项目默认的主页 **5、如何访问发布的项目:**     1) 启动 Tomcat 服务器 ( 由Tomcat/bin/startup.bat 文件来启动 );    2) 打开浏览器, 可用以下三种方式来访问指定的资源:        格式:  http://主机名:端口/项目名/资源        a) http://localhost:8080/web1/one        b) http://127.0.0.1:8080/web1/one        c) http://192.168.1.254:8080/web1/one6、Sevlet类服务主要通过哪两个方法来实现:    doGet()方法:  当前台以get方式请求时,由它来服务;    doPost()方法: 当前台以post方式请求时,由它来服务。    注意: 前台默认是get方式。    问: 什么情况下用post方式? ( 数据量大, 安全  )**7、Servlet对象的服务方式:**    请求----> 响应 式。    因此, 在doGet()或doPost()方法中,一定有两个参数:        HttpServletRequest  管请求的对象,即: 获取请求信息[请求头,请求体]时,从该对象中获取。        HttpServletResponse 管响应的对象,即: 若要回传信息[响应头,响应体]给前台,则必须通过它来实现。 **8、Servlet如何为客户端服务?**    1) 启动Tomcat Web服务器;    2) 打开浏览器, 输入: http://localhost:8080/ServletDemo1/sd2         回车发出请求;           3) 当Tomcat接收到客户端的请求时,就会去寻找 ServletDemo1项目(网站的根).  之后,再找 sd2;    4) 再找 sd2 对应的 Servlet-name 类名 . 之后,打开Servlet-name 类名去找对应的类( 包.类  )    5) 将找到的Servlet-class 类实现实例化(创建对象且初始化);此对象根据请求方式(get | post )来分发服务        即: 分发到 doGet()或 doPost()方法上去。    6) 当doGet()或doPost()处理请求之后,进行回传数据( 响应 ) 给 Web 服务器( Tomcat ),由它回传到请求端(客户端)    7) 当客户端拿到这个回传数据时,再根据  MIME( text/html )的格式来进行解释。解释后,将结果呈现在窗口中。  **9、HTTP协议:**    1) 它是什么是协议,用来干什么?        超文传输协议,用来传输 text/html等相关的信息。      2) 它的特点:        HTTP1.1 支持持续连接,即: 一次连接,多次请求;        它是一个无状态的协议(即: 它没有记忆功能,不会记住你的请求)  ---> cookie         它是一种请求响应的协议。    3) 请求:         一个请求行:  请求方式[get|post], 资源路径,  协议及其版本号  [HTTP1.1]        请求头:         请求实体:    4) 响应:        状态行: 状态码 [ 200, 404, 500, 302, 405, ... ]  协议及其版本号, 状态原因。        响应头:        响应体:        注意: 在post方式下,请求实体与请求头之间往往有一个空行。            响应体与响应头之间也有一个空行。**10、Servlet的生命周期:**    1) 加载、实例化、初始化过程 (在请求时发生 | 当在web.xml中配置了 load-on-startup 时,则Servlet对象在Tomcat启动创建并初始化。)        在<servlet></servlet>标签中添加  <load-on-startup>0 或 正整数 </load-on-startup>  此时,Tomcat会按0和自然数的顺序        去加载指定的Servlet并创建其对象和初始化它。     2) 每当有一个请求过来时,就会调用 Service()方法为请求服务(响应);    3) 当Web服务器( Tomcat ) 关闭时,会调用 destroy()方法去销毁当前的Servlet。**11、如何让一个Servlet有多种映射方式;即: 有多种不同的请求方式。**    <servlet-mapping>        <servlet-name>HelloServlet</servlet-name>        <url-pattern>/one</url-pattern>        <url-pattern>/sub/*</url-pattern>        <url-pattern>*.action</url-pattern>             </servlet-mapping>    因此,在访问时, 可采用:        1) http://localhost:8080/项目名/one         2)  http://localhost:8080/项目名/sub/a            http://localhost:8080/项目名/sub/abc            http://localhost:8080/项目名/sub/abc/aaa            即:  http://localhost:8080/项目名/sub/可随意书写        3)  http://localhost:8080/项目名/f1.action             http://localhost:8080/项目名/b1.action            http://localhost:8080/项目名/abc.action            即: http://localhost:8080/项目名/名称可随意.action **12、Servlet默认提交方式:**        get:  在请求资源的后面用  ?参数=值&参数=值......            即: 提交的信息是明示,对于要求安全性较高的情况,则不能采用这种方式。            另外, 这种方式提交的数量是有限的,是较小的。        post: 提交的数据是隐式,是安全的。            另外,理论上提交的数据量没有限制。        对于以上两种提交方式,在Servlet中获取其提交的参数值的方式是一样的。 **13、在Servlet中获取头信息和实体信息**    1) 获取请求行的信息        System.out.println("客户端的请求方式为: " + request.getMethod() );  //掌握        System.out.println("请求资源的绝对路径: " + request.getRequestURL() );        System.out.println("请求资源: " + request.getRequestURI() );        System.out.println("请求时的协议: " + request.getScheme());        System.out.println("请求的发布的项目根: " + request.getContextPath());  //掌握    2) 获取请求头部的信息 (firebug去相看一下请求头的信息名)        System.out.println("请求后可接收数据类型: " + request.getHeader("Accept"));//      System.out.println("请求后可数据字符编码集: " + request.getHeader("Accept-Encoding"));//      System.out.println("请求后可接收的语言种类: " + request.getHeader("Accept-Language"));  //掌握//      System.out.println("请求后是否连接状态: " + request.getHeader("Connection"));//      System.out.println("请求时的主机名: " + request.getHeader("Host"));//      System.out.println("请求时使用的浏览器: " + request.getHeader("User-Agent")); //掌握    3) 获取网络的连接信息        System.out.println("获取远端的IP地址: " + request.getRemoteAddr() ); //掌握//      System.out.println("获取远端的端口号: " + request.getRemotePort() );//      System.out.println("获取远端的主机名: " +  request.getRemoteHost() );//      //      System.out.println("获取Web服务器的IP地址: " + request.getLocalAddr() );//      System.out.println("获取Web服务器的端口号: " + request.getLocalPort() );//      System.out.println("获取Web服务器的名称: " + request.getLocalName() );    *4) 获取实体信息( 重点  )*        //第一种情况: 获取单个值        //1 当 uname参数不存在时,则获取的是一个null;若继续往下针对name操作就会产生NullPointerExdception异常        //2 当 uname参数存在,则提交时未给值,则获取的是一个 "" 的空串。        String name = request.getParameter("uname");          String password = request.getParameter("pwd");        if( name != null ) {            if( request.getMethod().equals("GET") ){                name = new String( name.getBytes("ISO-8859-1"), "utf-8" );            }            System.out.println("实体内容-用户为: " + name );            System.out.println("实体内容-密码为: " + password );        }        String[] favs = { "游泳", "阅读", "健身" };        //第二种情况: 获取多值 [值的数组]        String[] values = request.getParameterValues("fav");        for (int i = 0; i < values.length; i++) {            int n = Integer.parseInt( values[i] ) - 1;            System.out.println("第"+(i+1) + "个值为: " +  values[i] + " = " + favs[n]);**14、在web.xml中配置 404 错误的跳转页面**     <!-- 配置一个错误跳转页 -->       <error-page>        <error-code>404</error-code>        <location>/error.jsp</location>      </error-page>   注意: 在 WebRoot下需要新建一个 error.jsp 页面。   注意: 同样,可以配置405, 500 错误的跳转页面。**16、设置响应头信息:**    1) 设置或改变响应头的信息 content-type 指连接的类型,   text/html; charset=utf-8 是它的值         text/html 是 MIME的一种.         response.setHeader("content-type", "text/html;charset=utf-8");    2) 设置或添加一个响应头信息 refresh 指刷新, 而 3;url=1.jsp 是它的值。        response.addHeader("refresh", "3;url=1.jsp");**17、请求转发和重定向**    1、重定向:        1) 由 HttpServletResponse 的对象来实现;        2) 由 sendRedirect(目标);     注意事项:        1) sendRedirect(目标); 执行后,其后的语句还会执行。             如何解决后面语句执行现象? 答案: 使用 return ;        2) 重定向有几次请求? 有两次。  (一次请求是原来, 重定向后又发一次请求)  [直观地,可从地址中看到。]        3) 通过重写向转向项目的外部。如: 重定向到 百度上。    注意: 在重定向中加一个 / 则此时的 "/" 代表 "http://localhost:8080"  即: Web服务器的根。        response.sendRedirect("/error.jsp");  //会发生404错误。  一般情况下不需要 "/"     2、请求转发:        1) 由 HttpServletRequest 的对象来完成。        2) 由 getRequestDispatcher(url).forward( request,  response); 来实现。    注意事项:        1) request.getRequestDispatcher("url").forward( request,  response);方法执行后,其后的语句是否会执行?            如何解决后面语句执行现象? 答案: 使用 return ;        2) 请求转发有几次请求? 只一次 ( 从浏览地址上看到 第一次请求的url 还在,而页面上的内容发生了变化。)            尽管有多次转发,但在每一次转发中使用的 request 是同一个请求。        3) 通过请求转发是否可以转发到项目的外部?            答案: 不可以。 它只在项目内部转发。 (原因: 在请求转发时,始终会带上项目的根目录 )    注意: 在请求转发时,加了一个 / ,则此时的 "/" 代表 Web项目的根   即: http://localhost:8080/AServlet        request.getRequestDispatcher("/error.jsp").forward( request,  response);        由于,默认状态就是Web项目的根。因此,在请求转发中,写/和不写这个/ 效果一样。**18、在请求转发和重定向时,注意路径问题:**    1) 在重定向中加一个 / 则此时的 "/" 代表 "http://localhost:8080"  即: Web服务器的根。        response.sendRedirect("/error.jsp");  //会发生404错误。  一般情况下不需要 "/"     2) 在请求转发时,加了一个 / ,则此时的 "/" 代表 Web项目的根   即: http://localhost:8080/AServlet        request.getRequestDispatcher("/error.jsp").forward( request,  response);        由于,默认状态就是Web项目的根。因此,在请求转发中,写/和不写这个/ 效果一样。**19、中文乱码问题:**    一) 获取参数乱码问题    在GET方式请求状态下,获取参数,解决中文乱码:        1) new String( 参数.getBytes("ISO-8859-1") , "utf-8");          2) 找到 Tomcat下的conf目录下的server.xml文件,找开在 <Connector>标签中            添加 URLEncoding="utf-8" 代码,如下所示:             <Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" URIEncoding="utf-8" />        注意: 在get方式下,第 1) 种方式是临时的,只针对当前的Servlet有效。            而 第 2) 种方式是永久的,针对所有的Servlet有效。    在Post方式请求状态下,获取参数,解决中文乱码:         1) 在获取参数前写上: request.setCharacterEncoding("utf-8"); 即可。    二) 回传参数乱码问题:        1) 在回传信息之前写上以下两个语句            response.setCharacterEncoding("utf-8"); //回传时字符采用什么编码集            response.setContentType("text/html"); //回传信息的类型         注意: 第一个语句不变;  而第二个语句是 MIME,在实际应用中,根据要求改变它。        2) 在回传信息之前写上以下一个语句即可。            response.setHeader("Content-type", "text/html; charset=utf-8");  
0 0
原创粉丝点击