跳转:
客户端跳转:直接使用HttpSerletResponse接口的sendRedirect()方法即可(但此跳转只能传递session范围的属性,无法传递request范围的属性)。
req.getSession().setAttribute("name","jordan");//session属性
req.setAttribute("id","23");//request属性
resp.sendRedirect("xx.jsp");//页面跳转
服务器跳转:没有jsp的<jsp:forward>指令 所以要用RequestDispatcher()接口完成,可以收到session和request属性
req.getSession().setAttribute("name","jordan");//session属性
req.setAttribute("id","23");//request属性
//实例化RequestDispatcher对象 并指定跳转路径
RequestDispatcher rd = req.getRequestDispatcher("xx.jsp");
Rd.forward(req,resp);
MVC:
M(Model)模型层:完成一个独立的业务操作组件,一般都是以JavaBean或者EJB的形式进行定义的。
V(View)显示层:主要负责接受Servlet传递的内容,并且调用JavaBean,将内容显示给用户。
C(Controller)控制层:所有的用户请求参数,判断是否合法,根据请求的类型调用JavaBean执行操作并将最终的处理结果交由显示层进行显示。
当用户请求提交时,所有的请求都会交给Servlet进行处理,然后由Servlet调用JavaBean,并将JavaBean的操作结果通过RequestDispatcher接口传递到JSP页面上,由于这些要现实的内容只是在一次请求---回应中有效,所以MVC设计模式中,所有的属性传递都讲使用request属性范围传递,这样可以提升代码的可操作性
能使用page(pageContext)就不要用request
能使用request 就不要用session
能使用session就不要用application
Session主要用于登陆验证较多 request主要死在MVC模式上使用 将Servlet的内容交给JSP显示 而且这种显示在一次提交之后属性就消失了
在JSP中只包含3种类型的代码
接受属性:接受从Servlet传递过来的属性
判断语句:判断传递到JSP中的属性是否存在
输出语句:使用迭代或者VO进行输出
在JSP中唯一允许导入的包只能是java.util包
过滤器
Public void init(FilterConfig config)throws ServletException{
String initParam = config.getInitParameter("ref");
}
Public void doFilter(....){
System.out.println("执行doFilter方法之前");
chain.doFilter(request,response);
System.out.println("执行doFilter方法之后");
}
Init方法只执行一次 doFilter会执行两次 一次在FilterChain之前一次在FilterChain之后
登陆验证
HttpServletRequest req = (HttpServletRequest ) request;
HttpSession ses = req.getSession();//取得session
If(ses.getAttribute("userid") != null){//判读是否登陆
chain.doFilter(request,response);//传递请求
}else{
request.getRequestDispatcher("xx.jsp").forward(request,response);//跳转到登录页
}
通过HttpServlet取得当前的Session 然后判断是否存在userid属性 如存在则登录过 如不存在则跳到登陆页面
监听器
可以对application Session 和request 三种操作进行监听
Application:实际上是对ServletContext(Servlet上下文)监听
Public class contextInitalized(ServletContextEvent event){ //上下文初始化时触发
System.out.println(“event.getServletContext().getContextPath()”);
}
Public class contextDestroyed(ServletContextEvent event){} //上下文销毁时触发
Session: sessionCreated session sessionDestroyed
Request: requestInitalized requesDestroyed
如要配置监听器、过滤器和简单Servlet的时候建议按
(1)先配置过滤器:<filter> <filter-mapping>
(2)再配置监听器:<listener>
(3)最后配置简单Servlet:<servlet> <servlet-mapping>
在线用户监听
Servlet是使用java实现的CGI程序,但是与传统的CGI不同的是,Servlet采用多线程的方式进行处理,所以程序的性能更高
要想实现一个Servlet则一定要继承HttpServlet类,并根据需要覆写响应的方法,还需要在web.xml文件中配置Servlet后才可以使用
Servlet生命周期控制的3个方法:init service(doGet、doPost)和destrop
在Servlet程序中可以通过HttpServletRequest接口的getSession()方法获得一个HttpS对象
在Servlet程序中可以通过getServletContext()方法获得ServletContext对象
在Servlet中设计模式是JavaEE的核心设计模式,使用MVC可以使代码的层次更加清晰,程序维护更加方便
要实现一个过滤器,一定要实现Filter接口,并覆写此接口中相应方法,所有的过滤器都要执行两次,过滤器同意需要在web.xml中配置,但是配置的路径表示的是过滤路径
监听器可以完成对Web操作的监听,主要监听application、session、request的操作
EL表达式
使用4种不同表达式语言输出同一个属性名称,将按照如下顺序查找:
Pageàrequestàsessionàapplication
pageContext.setAttribute(“info”,”page属性范围”); //设置一个page属性
request.setAttribute(“info”,” request属性范围”); //设置一个request属性
session.setAttribute(“info”,” session属性范围”); //设置一个session属性
application.setAttribute(“info”,” application属性范围”); //设置一个application属性
(输出为 page属性范围)