为了更好的学习框架的知识,前几天复习了下javaee的基础知识,现在我把他总结成博客,与大家一起分享。这篇文章需要您对javaweb基础有足够的了解,适合复习时提纲挈领,有不足之处,请批评指正
一.关于javaweb开发
用户的请求通过web服务插件进行接收,这个插件将动态请求和静态请求分开,如果是静态请求,直接从文件系统中找出返回给用户,如果是动态请求,则将其交给web容器处理,web容器采用拼凑代码的方式(可以操作数据库)动态的生成数据通过web服务器返回给客户端。
Javaee核心的设计模式:MVC,关于MVC,相信从事java开发的小伙伴都不陌生,这里不再多说
二.servlet
jsp本质上就是个servlet,所以我们从servlet说起
1.Tomcat的配置
对于单纯的用jsp,servlet开发,Tomcat的相关配置是必须了解的,这可以帮助我们快速的找到项目中的bug,以及更好的理解整个项目
Tomcat下有个特别重要的文件server.xml,相信大家对这个文件都不陌生,我们可以通过更改这个文件来配置项目的虚拟路径
<Context docBase="rentCar" path="/rentCar" reloadable="true" source="org.eclipse.jst.jee.server:rentCar"/>
比如这个节点,这是我前几天做的一个租车网站的项目,由于是在eclipse中进行的项目,所以虚拟路径帮助我们自动生成了,当然我们也可以自己配置虚拟路径
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
再比如这个节点,可以帮助我们更改默认的开始访问路径
再有,可以更改端口号,相信大家也都遇到过端口被占用的情况。
2.servlet配置
这个也是个容易出错的地方, web.xml修改完要重启服务器,由于servlet在整个web容器中只实例化一次,class别写错,这个是Tomcat找到servlet的关键,当然eclipse会帮助我们自动生成,他以斜杠开头 以webAPP为根路径,这个弄错很容易造成404
可以在这个文件下配置servlet的初始化参数,比较简单
不管怎么说,虽然现在的编译软件比较智能,不需要我们手动配置这些文件,但是理解这些文件的含义,有时可以帮助我们快速找到代码中的bug。
3.servlet生命周期(重点)
servlet是运行在服务器端的小程序, API提供了统一的编程接口,在web容器(tomcat)上运行。
生命周期,
处理流程:
客户端向服务器发出http请求-->
web服务器接受请求并将其发送给servlet,如果这个servlet没有被加载,服务器将其加载到jvm上并执行他-->
servlet执行相应的操作并将处理的结果返回给服务器-->
服务器将处理后的结果返回给客户端
具体:
生命周期分为五个部分:
1加载程序classloader,
2实例化new(通过反射),如果已经存在就不实例化
3初始化init(ServletConfig) 重写必须super(config)只一次,读取资源文件等,如果初始化失败,则直接卸载,
4服务service()doget dopost 多线程?,模板设计模式
5销毁destroy退出webapps时 释放该实例占用的所有资源,等待垃圾回收,若需要再次使用该servlet,则重新调用init()方法实例化,正常情况下只初始化一次,特殊情况(servlet长时间没用)可能会再次初始化
servlet在服务器中只有一个对象,线程共享
4.servlet跳转
这个比较重要,开发中经常用:
客户端跳转:HttpServletResponse 接口的sendRedirect(“”);相对根路径地址;说白了就是response.sendRedirect(“”);只能session
服务器端跳转:
利用RequestDispatcher接口 即
RequestDispatcher dispatcher = request.getRequestDispatcher(“”).forward(request,response);
5.servlet常用对象
在jsp中有内置对象,不过在servlet中传过来的只有request,response,其他的对象需要我们编码获取
关于request常用方法:
getParameter();
Enumeration getParameterNames()
String[] getParameterValues()
GetParameterMap()
Request.setCharacterEncoding(“”);设置统一编码
接受到传过来的值得时候需要判断一下是否为空,否则很容易造成空指针异常,我就吃过这个亏==
request response封装了一些参数信息,更具体的方法实现可以参考API文档,这里注意一下request的范围,他是一次客户端请求的范围,相信大家对这种知识很熟悉了
获得session对象:
这里对于session及他的范围,做一下简单说明,如果获取session可以通过getSession()获得
session:
1.服务器的一块内存,会话范围内,任何跳转都可以,新开浏览器不行,如果客户端一端时间没有操作,服务器自动终止会话,同一个客户端,一个webAPP下所有的servlet jsp共享同一个session
2.对于sessionID,可以通过cookie,(创建session时放入cookie)也可以通过URL重写来实现:?
常用方法:
public String getId(); 取得Session Id即为JSESessionid ,操作session用了cookie机制
Public long getCreationTime()
Public long getLastAccessedTime()
Public boolean isNew()
Public void invalidate()
Public Enumeration getAttributeNames()
对于cookie的知识也是非常重要的:
Cookie
1.服务端的信息保存在客户端的一个文本文件,以键值对的形式
2.一般来说,cookie保存在内存中,关闭客户端,其cookie就消失了,,不过,我们可以通过方法setMaxAge().来设置保存的最大时间,一般一个客户端的cookie最大数量是一定的
3.一个servlet或jsp设置的cookie可以被其目录或子目录下的读到,这里指的是URL路径,非实际路径
4.每次客户端访问服务端,cookie会随着头信息发送能够给服务器,服务器会为每个访问他的客户端设置唯一标识符JSEsessionID的cookie,
常用方法:
Public cookie(String name,String value);
Public String getName();
Public String getValue(); public setMaxAge(int);秒为单位
Response.addCookie(Cookie cookie);
Public Cookie[] Request.getCookies()
Application
API中的表现ServletContext webapps范围
6.过滤器,监听器(后续更新)
三.jsp
1.首先要明确的是jsp的本质就是servlet,我们可以找到编译后的文件找到jsp编译后编程了java文件(servlet)
2.jsp指令
page指令 设置编码,导包,错误页等
Include 指令 :静态包含<%@include file=””%>集中编译处理,先包含再处理
动态包含:<jsp:include page=””/> 将处理界面包含进来,如果是动态页面,先进行动态处理,然后再包含 这种方法可以定义参数 先处理再包含
建议使用动态
<%@%>directive是编译指令
<jsp:> action 运行时指令
跳转指令
<jsp:forward page=””/> 服务器端跳转
3.jsp标签指令:使用Javabean
<jsp:useBean id=”实例化对象名称” scope=”” class=””/> 默认调用bean的五参构造方法,通过反射完成实例化
设置属性
<jsp:setProperty name=”实例化对象名称” property=”*”/> 表示自动匹配,但参数名要一直,通过反射完成
<jsp:getProperty name=”实例化对象名称” property=“属性名称”/>相当于调用getter方法