JavaEE知识总结

JavaEE知识总结
一、JSP基础
1、JSP的本质是Html嵌入Java程序
2、JSP属于View层,只能访问Service(Ctrl)层
3、Tomcat是一个容器,用来把.jsp转成.java,编译成.class
4、在JSP里面写Java代码:
<%@page import="包名命令"%> JSP导包
<% %>Java代码
<%=变量名%>输出数据
<%! 变量%> 定义属性
<%-- --%>注释
二、JSP九大内置对象
1、out javax.servlet.jsp.JspWriter 用于页面的输出
2、request javax.servlet.http.HttpServletRequest 请求
3、response javax.servlet.http.HttpServletResponse 响应
4、config javax.servlet.ServletConfig
服务器的配置信息,可以得到初始化信息
5、session javax.servlet.http.HttpSession
它是一个域对象(用来存用户信息)
6、application javax.servlet.ServletContext
它也是一个域对象(用来存用户的信息)
7、pageContext javax.servlet.jsp.PageContext
它是jsp的页面容器,也是域对象(可以得到其它内置对象)
8、page 就是当前的jsp类的对象
9、exception java.lang.Throwable 当页面发生异常,在错误页中才起作用
四大作用域:都有setAttribute()和getAttribute()方法
request: 保存在一次请求当中
pageContext : 保存在当前页
session: 保持在一次会话当中
application: 保持在服务器, 至到服务器关闭
三、EL表达式
1、格式
输出数据:${变量 }
判断是否为空:${empty 变量}返回值true为空
计算:${表达式}
2、EL表达式有11个内置对象
1.pageScope
作用:在pageContext域对象中去获取值;
用法:${pageScope.xxx}
2.requestScope
作用:在request域对象中去获取值;
用法:${requestScope.xxx}
3.sessionScope
作用:在session域对象中去获取值;
用法:${sessionScope.xxx}
4.applicationScope
作用:在application域对象中去获取值;
用法:${applicationScope.xxx}
5.param
作用:用于在页面接收参数,类似于request.getAttribute(),获取出来是单值,就是说你传个数组来,我只能接受到第一个值。
用法:${param.xxx}
6.paramValues
作用:同样用于在页面接收参数,同样类似于request.getAttribute(),获取出来就是多值。
用法:${param.xxx}
7.header
作用:用于获得请求头中的值;
用法:${header[‘User-Agent‘]};
8.headerValues
同上。。。
9.initParam
作用:可以获得在web.xml中配置的<context-param>中的值;
用法:
<context-param>
<param-name>name</param-name>
<param-value>tom</param-value>
</context-param>
${initParam.name}就可以得到tom了。
10.cookie
作用:得到cookie的值,
用法:${cookie.JSESSIONID.value}
因为cookie.JSESSIONID得到的是一个cookie对象,所以需要.value才能得到cookie的值。
11.pageContext
作用:例如:获得其他的域,操作其他的域。
用法:
例如:${pageContext.session.id}
得到session并且得到session的id
*当只输入参数名,不输入域的时候,EL表达式优先显示范围小的参数
page<request<session<application
四、JSTL
1、准备工作
使用工具包:jstl.jar,standard.jar;
导包: <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
如果出现报错:HTTP Status 500 - /TestEL.jsp (line: 21, column: 0) According to TLD or attribute directive in tag file, attribute items does not accept any expressions
原因是core不兼容,改成core_rt就行了
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
2、语法
循环遍历:
<c:forEach items="${list}" var="str">${str}<br/></c:forEach>
判断:
<c:if test="${3>2}">如果满足条件,就输出这句话</c:if>
五、Cookie
1、写入cookie
//登录时间
Calendar datetime= Calendar.getInstance();
SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result=format.format(datetime.getTime());
//写入cookie
Cookie cookie=new Cookie("LoginTime",result);
cookie.setMaxAge(60*60*24);//cookie保存时间单位是秒,目前保存一天
cookie.setPath("/WebProject");
response.addCookie(cookie);
2、读取cookie
boolean Loginflag=false;
Cookie[] cookies=request.getCookies();//先获取所有cookie
String welcome="欢迎"+name+"!";
session.setAttribute("name", name);
for(Cookie c:cookies){//然后遍历查找我们需要的cookie
if(("LoginTime").equals(c.getName()))
{
welcome+="上次登录时间:"+c.getValue();
Loginflag=true;
}
3、清理cookie
//清除登录信息
Cookie cookie=new Cookie("LoginTime","");
cookie.setMaxAge(0);
cookie.setPath("/WebProject");
response.addCookie(cookie);
六、Servlet
1、JSP改servlet步骤:
1: 先写一个servlet
2: 再写配置文件
3: 再根据web.xml里配置的路径,调用servlet
2、配置Servlet映射地址(两种方法)
(1)在Servlet中加注释@WebServlet("/HelloServlet")
(2)配置web.xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.swiss126.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
3、Servlet的生命周期
init:第一次访问Servlet所在地址时执行初始化方法
doGet:Servlet收到get请求调用的方法
doPost:Servlet收到post请求调用的方法
destroy:正常关闭服务器时执行的销毁Servlet释放资源的方法
service:收到get和post请求都能调用的方法
4、Servlet可以使用的方法与对象
(1)重写Servlet中的所有方法
(2)JSP中的所有作用域都可以使用,因为JSP的本质就是一个Servlet
七、Filter
1、配置方法:
(1)注释:@WebFilter("/*")
(2)配置web.xml:
<filter>
<filter-name>characterFilter</filter-name>
<filter-class>
com.swiss126.productmanager.filter.CharacterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、Filter的用处是根据条件过滤掉用户发出的不合法请求,减少服务器的工作量。doFilter就是用来判断是否过滤请求的方法。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(!(((HttpServletRequest)request).getRequestURI().toLowerCase().contains("login"))||((HttpServletRequest)request).getRequestURI().contains("QuitServlet")){
try{
if(((HttpServletRequest)request).getSession().getAttribute("name")==null)
((HttpServletResponse)response).getWriter().print(
"<script type=\"text/javascript\">alert(\"请先登录!\");top.location=\"login.jsp\";</script>");
else chain.doFilter(request, response);
}catch(Exception e){
((HttpServletResponse)response).getWriter().print(
"<script type=\"text/javascript\">alert(\"请先登录!\");top.location=\"login.jsp\";</script>");
}
}else{
chain.doFilter(request, response);
}
}
doFilter中有很多条件,只有满足条件请求的才会执行chain.doFilter(request, response);方法,让请求通过Filter。
八、Listener
Listener监听器用来监听Servlet中的各种事件
public class OnlineListener implements HttpSessionListener {
/**
* Default constructor.
*/
public OnlineListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
InitServlet.online++;
System.out.println("---创建session---");
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
InitServlet.online--;
System.out.println("---销毁session---");
}
}
Listener的配置方法:
(1)注释:@WebListener
(2)配置web.xml:
<listener>
<listener-class>
com.swiss126.productmanager.listener.OnlineListener</listener-class>
</listener>