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
- WEB笔记
- Web笔记
- web笔记
- WEB笔记
- WEB笔记
- web笔记
- web笔记
- web笔记
- web 笔记
- Web笔记
- web笔记
- web笔记
- [学习笔记]web视图
- Web service学习笔记
- Web service 笔记
- Web service 笔记
- Web service 笔记
- Web service 笔记
- JVM: How to analyze Thread Dump
- 十八. 增加一个项目协作留言板功能(四)----- 增加实施步骤的增删改查功能
- 使用cocoaPods import导入时没有提示的解决办法
- HQL:使用面向对象的HQL查询语言
- Leetcode no. 111
- web笔记
- 操作系统-锁机制
- jQuery遍历
- cygwin安装Cygwin/X需要选择的包
- SecureCRT简单的安装和激活教程
- DbUtil组件
- UVA 10635 Prince and Princess【LCS 问题转换为 LIS】
- Android输入事件从读取到分发二:谁在循环监听事件的到来
- 哲学家就餐问题