Java Web
JavaWeb
-
请求和响应
-
请求
-
当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。
-
-
响应
-
当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他资源)为止。
-
-
常见的状态码
-
1XX:成功的接收
-
2XX:200成功完成请求的内容
-
3XX:302借钱,304,307缓存有关
-
4XX:客户端有错误404请求的资源不存在(路径) 403有资源没有权限
-
5XX:服务端出问题
-
-
-
HTTP协议
-
基本概念
-
无状态协议,通过Internet发送请求消息和响应消息。使用端口接收和发送消息,默认为80端口。
-
-
请求头
-
GET方式
不提交大量数据,无敏感,保密数据时使用。超链接访问默认是GET方法。form提交,不指定method方法,默认为GET方法。form提交,制定方法method="GET",很少使用这种方式。POST方法:需要提交敏感、保密数据,或数据量较大。form提交,指定method="POST"
-
Accept-Charset:浏览器可接受的字符集
-
Accept-Encodingd:浏览器能够进行解码的数据编码方式,比如gzip
-
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
-
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304"NotModified"应答
-
POST方式
-
Content-Type说明了请求主体的内容是如何编码的。浏览器始终以application/x-www-form-urlencoded的格式编码来传送数据。
-
Content-Length说明了主体的字节数。
-
在首部Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的"名称-值"对的形式给出的,其中name是Professional Ajax,pulisher是Wilery
-
-
响应头
状态行
-
HTTP版本:向客户端指明其可理解的最高版本
-
响应代码:3位的数字代码,指出请求的成功或失败,如果失败则指出原因。
-
响应描述:为响应代码的可读性解释。例如:HTTP/1.1 200 OK
响应头标
-
像请求头标一样,它们指出服务器的功能,标识出响应数据的细节
空行
-
最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标
响应数据
-
HTML文档和图像等,也就是HTML本身
-
-
WebXML
-
作用
-
web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程
-
-
配置
指定欢迎页面
<welcome-file-list>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
命名与定制URL
为Servlet命名:
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>net.test.TestServlet</servlet-class>
</servlet>
为Servlet定制URL、
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
定制初始化参数
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>net.test.TestServlet</servlet-class>
<init-param>
<param-name>userName</param-name>
<param-value>Tommy</param-value>
</init-param> <init-param> <param-name>E-mail</param-name> <param-value>Tommy@163.com</param-value> </init-param> </servlet>
经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值
指定错误处理页面,可以通过"异常类型"或"错误码"来指定错误处理页面
<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> ----------------------------- <error-page> <exception-type>java.lang.Exception<exception-type> <location>/exception.jsp<location> </error-page>
设置过滤器:比如设置一个编码过滤器,过滤所有资源
<filter> <filter-name>XXXCharaSetFilter</filter-name> <filter-class>net.test.CharSetFilter</filter-class> </filter> <filter-mapping> <filter-name>XXXCharaSetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
设置监听器
<listener> <listener-class>net.test.XXXLisenet</listener-class> </listener>
设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时
<session-config> <session-timeout>60</session-timeout> </session-config>
-
JSP
-
内置对象
-
request
request是HttpServletRequest类型的对象,可以在JSP中直接通过request调用HttpServletRequest接口中的任何方法。
-
response
response是HttpServletResponse类型的对象,可以在JSP中直接通过response调用HttpServletResponse接口中的任何方法。
-
session
session是HttpSession类型的对象,可以在JSP中通过session调用HttpSession接口中的任何方法
-
application
application是ServletContext类型的对象,可以在JSP中通过application调用ServletContext接口中的任何方法
-
out
out是JspWriter类型的对象,可以在JSP中调用JspWriter的方法向客户端输出内容。然而,由于<%=%>可以更为便捷地进行输出,因此在JSP文件中往往不使用out对象进行输出。
-
config
config是ServletConfig类型的对象,在JSP中可以使用config来调用ServletConfig接口中的任何方法。在web.xml中可以像配置Servlet那样配置JSP。使用配置的url-pattern访问JSP
-
exception
exception是一个Throwable类型的对象,默认情况下不会生成这个内置对象,当JSP页面被指定为错误页面时,才会有exception这个内置对象。
-
page
page指代当前的对象,即this
-
pageContext
pageContext是所有内置对象中最重要的内置对象,是JSP中的上下文对象。
pageContext是java.servlet.jsp.PageContext类的对象
很多内置对象通过pageContext对象获取。JSP的_jspService方法中总是包含如下部分代码。 application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut();
所有的内置对象都自动地被添加到pageContext对象中。pageContext也可以存储属性,具有setAttribute、getAttribute,removeAttribute方法,可以对pageContext中的属性进行处理
-
-
域对象
-
pageContext
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
-
request
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
-
session
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,
-
application
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说"从服务器启动,到服务器关闭"是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request, session都是完全隔离的,无论如何修改都不会影响其他
-
-
静态与动态包含
-
静态包含
所谓静态包含,指的是在翻译期间,把包含的页面也翻译到当前页面的Java文件中,所谓java源文件就实现"二合一"
-
<%@include file="copyright.jsp"%>
-
动态包含
在运行时,将所需要的class文件导入到当前文件中(分开编译,运行时合并)。
-
<%request.getRequestDispatch(" ").include()%>
-
<jsp:include page="date.jsp" flush="true"/>
-
-
-
Servlet
-
跳转到其他组件的方式
-
方式
响应重定向
-
HttpServletResponse中定义了响应重定向的方法sendRedirect(String path).响应重定向是向目标资源重新发送请求,生成新的响应
-
响应重定向是使用GET方法提交请求,所以调用目的资源的doGet方法
-
响应重定向生成新的请求,所以当前请求中的数据不会再传到目标资源中,因此,输入用户名和密码后,响应重定向到LoginSuccessServlet,输出的用户名是null
请求转发
-
能够吧当前的请求对象转发到目标资源,是最常用的跳转方法
-
使用请求转发后,当前的请求对象被转发到下一个资源,因此可以得到请求对象中的数据,包括请求参数,请求方法等。在doPost中调用该方法,将调用下一个资源的doPost方法;在doGet方法调用该方法,调用下一个资源的doGet方法
-
request.getRequestDispatcher("LoginSuccessServlet").forward(request, response);
-
差别
简单来说,响应重定向是你找我借钱,我没有,我告诉你谁有,你自己再去找他借钱。请求转发是你找我借钱,我没有,我去找其他人借钱,借完了再给你。响应重定向:(1)两次请求。(2)地址栏会发生变化请求转发:(1)一次请求(2)地址栏没有变化。
-
-
访问方式
-
通过地址栏访问Servlet
-
通过超链接访问Servlet
-
通过表单提交访问Servlet,使用Submit按钮
-
通过表单提交访问Servlet,使用JS提交
-
-
生命周期
-
Servlet是单实例,多线程的
-
调用顺序
构造方法
init方法
-
默认情况下,在第一次访问Servlet的时候被初始化,而且只初始化一次。
-
可以在web.xml中<servlet></servlet>下进行配置,指定在启动容器的时候初始化
service方法
doXXX方法
destroy方法
注:第一次通过地址栏调用,控制台输出:构造方法,初始化,doXXX方法。第二次及以后若干次通过地址栏调用,控制台输出doGet()。正常关闭Tomcat,控制台输出 destroy()
-
通常覆盖的方法有init/doXXX
-
request.getRequestDispatcher("LoginSuccessServlet").forward(request, response);
-
-
-
cookie与session
-
cookie
-
Cookie是保存在客户端的小脚本,保存的位置分为两种:(1)Cookie可能保存在客户端的小文本,关闭浏览器后,Cookie就不再存在
(2)Cookie也可能保存在客户PC机的硬盘上,设置有效时间,超过有效时间后失效
-
-
session
-
客户端向服务器发送请求,服务端接受请求并生成响应返回给客户端,客户端对服务端这样一次连续的调用过程,被称为会话(session)
-
-
cookie和session区别
-
session是在服务端保存用户信息,Cookie是在客户端保存用户信息
-
session中保存的是任意对象,Cookie保存的是字符串
-
session随会话结束而关闭,Cookie可以长久保存在客户端硬盘上,也可以临时保存在浏览器内存中。
-
Cookie通常用于保存不重要的用户信息,重要的信息使用session保存
-
-
-
JDBC
-
步骤
-
把数据库的驱动程序包拷贝到WEB-INF/lib下
-
使用Class.forName加载驱动类,每个数据库驱动类不同
-
使用DriverManager.getConnection获得连接对象,每个数据库的连接串不同
-
使用Connection中的createStatement方法获得Statement对象,或者preparedStatement方法获得PreparedStatement
-
使用语句对象中的方法执行SQL语句,查询使用executeQuery方法,增删改使用executeUpdate方法
-
查询返回ResultSet结果集,使用next方法进行迭代
-
关闭资源:连接对象,语句对象,结果集对象
-
-
-
JavaBean
-
编码规则
-
必须是public类
-
必须有一个无参的public构造方法
-
属性私有化
-
私有化的属性必须用public方法暴露出来
-
返回属性的方法为getXxxx()格式
-
设置属性的方法为SetXxxx(形式参数)格式
-
-
作用
-
JavaBean就是遵守规范的Java类,结合JSP的标准动作,可以比较便捷地在JSP之间传递数据,封装数据
-
-