1.九大内置对象:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %><!-- 默认是隐藏的false -->
<%@ page session="true" %><!-- session默认是显示的true --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>My JSP 'index.jsp' starting page</title>
</head> <body> <%
application.setAttribute("name", "zhangsan");
%> <%=session.getAttribute("name")%>
<pre> jsp的四大作用域:servlet和servlet之间的参数传递
setAttribute()// 存储变量
getAttribute()// 获取变量
removeAttribute()// 移除变量
application:(应用)(一般情况下,存储的是字典表中的信息)
就作用于整个项目,存储一些和项目相关的信息(比如省市区这些信息)(字典表)
当服务器(tomcat)启动的时候application就已经被创建并初始化,而且所有的用户都共享同一个application
直到服务器(tomcat)关闭时候,才会被销毁
作用域:整个项目
生命周期:当服务器(tomcat)启动的时候,就会被创建,当服务器关闭的时候就会被销毁 request:(一次请求)(一般情况下,存储一些需要请求转发的信息)
作用域:一次请求
生命周期:一次请求以及所有通过请求转发(request.getRequestDispatcher().forward(request, response))的页面,直到页面跳转和重定向 session:(一次会话)(一般情况下,存储和用户相关的信息)
作用域:请求和响应
生命周期:当发送一次请求,session就会被创建,当关闭浏览器或者关闭服务器的时候session就会被销毁 pageContext:(页面的上下文)(就是当前页面)(一般情况下,存储临时变量)(不使用)
作用域:当前页面
生命周期:从页面访问开始到当页面跳转结束
pageContext召唤另外八个神兽 从小到大排序:
pageContext--->request--->session--->application 九大内置对象(内键对象):
直接可以使用,无需创建的对象就称之为内置对象
*request
请求信息
*response
响应信息response.getWriter().print();
*session
一次会话(一般存储用户相关的信息)
(*)application
作用于整个项目
pageContext
页面上下文(和页面有关的数据(临时数据))
config(绝对不能动(当前jsp的配置信息(servlet的配置信息)))
配置信息
out
打印的信息
page
当前页面的信息
exception:默认是隐藏的,如果需要显示< % @ page isErrorPage="true" % >
异常信息 4(作用域)+2(输出)+3(打酱油)
pageContext--request--session--application

         response--out

         page--config--exception
</pre> <% request.setAttribute("name", "zhangsan");
session.setAttribute("name", "lisi");
application.setAttribute("name", "wangwu");
pageContext.setAttribute("name", "zhaoliu");
// 如果使用el表达式取值的情况下,pageContext--${pageScore.property } %> ${pageScope.name }
</body>
</html>

2.计算服务器访问次数:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>My JSP 'app.jsp' starting page</title> </head> <body> <%
Integer count = (Integer) application.getAttribute("count");
if (count == null) {
count = 1;
} else {
count++;
}
application.setAttribute("count", count);
%> 我一共被访问<%=application.getAttribute("count")%>次 </body>
</html>

3.filter:

  index主页:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<pre> filter:
过滤器:通过访问路径进行拦截
作用:防止恶意访问,未登录的情况下访问用户信息,用户订单。。 生命周期:
当服务器(tomcat)启动的时候,就被初始化,当服务器关闭的时候会被销毁,有且只被创建一个对象(单例模式) 建立Class(FilterClass)--->实现Filter接口(javax.servlet.Filter)---->重写init方法,destroy方法,doFilter方法---->在doFilter方法中chain.doFilter(request, response):当第一次被过滤后放行,在chain.doFilter()方法之后的代码会进行二次过滤
特点:如果有多个filter同时过滤的话,正着进倒着出
加载顺序:在web.xml中配置先后顺序进行加载
如果一个项目有多个配置:
filter配置顺序:
首先一定要配置filter,其次配置listener(监听:监听一定要配在filter之后,servlet之前),最后配置servlet </pre>
</body>
</html>

  web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>20170728_filter</display-name> <filter>
<filter-name>shiwei</filter-name>
<filter-class>cn.zzsxt.lee.web.filter.ShiweiFilter</filter-class>
</filter> <filter-mapping>
<filter-name>shiwei</filter-name>
<!-- <url-pattern>/visitKing.huanggong</url-pattern>/*, *.xxx, /xxx, /xxx/*
<url-pattern>/visitKing.weifusifang</url-pattern>
<url-pattern>/visitKing.yuhuayuan</url-pattern>
<url-pattern>/visitKing.tiantan</url-pattern> -->
<servlet-name>king</servlet-name>
</filter-mapping>
---------------------------------------------------------------------------------------------------------
<filter>
<filter-name>wuqi</filter-name>
<filter-class>cn.zzsxt.lee.web.filter.WuqiFilter</filter-class>
</filter> <filter-mapping>
<filter-name>wuqi</filter-name>
<url-pattern>/*</url-pattern> <!-- /*, *.xxx, /xxx, /xxx/* -->
</filter-mapping>
----------------------------------------------------------------------------------------------------------
<filter>
<filter-name>anqi</filter-name>
<filter-class>cn.zzsxt.lee.web.filter.AnqiFilter</filter-class>
</filter> <filter-mapping>
<filter-name>anqi</filter-name>
<url-pattern>*.huanggong</url-pattern> <!-- /*, *.xxx, /xxx, /xxx/* -->访问方式
</filter-mapping> <servlet>
<servlet-name>king</servlet-name>
<servlet-class>cn.zzsxt.lee.web.servlet.KingServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>king</servlet-name>
<url-pattern>/visitKing.huanggong</url-pattern>
<url-pattern>/visitKing.weifusifang</url-pattern>
<url-pattern>/visitKing.yuhuayuan</url-pattern>
<url-pattern>/visitKing.tiantan</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>queen</servlet-name>
<servlet-class>cn.zzsxt.lee.web.servlet.QueenServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>queen</servlet-name>
<url-pattern>/visitQueen.huanggong</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>nine</servlet-name>
<servlet-class>cn.zzsxt.lee.web.servlet.NineServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>nine</servlet-name>
<url-pattern>/visitNine.huanggong</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

  Filter Class:

package cn.zzsxt.lee.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; // filter特点:过滤的时候是正着进去,倒着出来
// filter特点:根据web.xml配置的先后顺序进行加载
// filter特点:在web.xml中,首先要对filter进行配置,然后再对Listener(监听:监听一定要配置在filter之后和servlet之前)进行配置,最后对servlet进行配置
public class WuqiFilter implements Filter { @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("只要你一进来,我就要检查你身上是否携带武器");
chain.doFilter(request, response);// 如果没有这个方法,需要访问的路径就永远无法访问
// 在chain.doFilter()以后的代码,是为了进行二次过滤
System.out.println("你现在要出去啦,别带着宫女跑了");
} @Override
public void init(FilterConfig config) throws ServletException {
System.out.println("你进来了,我就要上班了");
} @Override
public void destroy() {
System.out.println("我也很累,我需要换岗");
} }

  Servlet:

package cn.zzsxt.lee.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class KingServlet extends HttpServlet { @Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("测试");
} }

4.MVC框架:

        MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  建包的结构:

    

  impl包下的实现类继承封装好的JDBC:

package cn.zzsxt.lee.web.user.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException; import cn.zzsxt.lee.web.basedao.BaseDao;
import cn.zzsxt.lee.web.user.dao.IUserDao;
import cn.zzsxt.lee.web.user.entity.User; public class UserDaoImpl extends BaseDao implements IUserDao { @Override
public User selectUserByUsernameAndPassword(User user) {
String sql = "select * from e_user where username=? and password=?";
String[] params = { user.getUsername(), user.getPassword() };
ResultSet rs = super.execQuery(sql, params);
User u = new User();
try {
while (rs.next()) {
u.setId(rs.getString("id"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setRealPassword(rs.getString("real_password"));
u.setRole(rs.getInt("role"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return u;
} }

  Service实现类调用Dao实现类中的方法:

package cn.zzsxt.lee.web.user.service.impl;

import cn.zzsxt.lee.web.user.dao.IUserDao;
import cn.zzsxt.lee.web.user.dao.impl.UserDaoImpl;
import cn.zzsxt.lee.web.user.entity.User;
import cn.zzsxt.lee.web.user.service.IUserService; public class UserServiceImpl implements IUserService { private IUserDao userDao = new UserDaoImpl(); @Override
public User selectUserByUsernameAndPassword(User user) {
return userDao.selectUserByUsernameAndPassword(user);
} }

  Controller中Servlet内各种方法的封装:

package cn.zzsxt.lee.web.user.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.zzsxt.lee.web.user.entity.User;
import cn.zzsxt.lee.web.user.service.IUserService;
import cn.zzsxt.lee.web.user.service.impl.UserServiceImpl;
import cn.zzsxt.lee.web.utils.MD5; @WebServlet("/user.sxt")
public class UserServlet extends HttpServlet { private IUserService userService = new UserServiceImpl(); @Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getMethod().toLowerCase();// 请求方式
String type = request.getParameter("type");
if ("post".equals(method) && "login".equals(type)) {
doLogin(request, response);
} else if ("post".equals(method) && "register".equals(type)) {
// doRegister(request, response);
} else if ("get".equals(method) && "logout".equals(type)) {
doLogOut(request, response);
} } /**
* @description 注销功能
* @param request
* @param response
* @throws IOException
*/
private void doLogOut(HttpServletRequest request, HttpServletResponse response) throws IOException { User user = (User) request.getSession(false).getAttribute("user");
if (user != null) {
request.getSession().removeAttribute("user");
} if (!"".equals(request.getSession().getAttribute("username"))
&& request.getSession().getAttribute("username") != null) {
System.out.println("我进来了");
request.getSession().removeAttribute("username");
request.getSession().removeAttribute("password");
}
response.sendRedirect("login.jsp");// 重定向
return;
} /**
* @description 登录功能
* @param request
* @param response
* @throws IOException
*/
private void doLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("pwd");
password = MD5.getMD5(password);
User user = new User();
user.setUsername(username);
user.setPassword(password);
User u = userService.selectUserByUsernameAndPassword(user);
if (u.getId() != null && !"".equals(u.getId())) {
// 登录成功
request.getSession().setAttribute("user", u);// 存入session
Cookie nameCookie = new Cookie("username", u.getUsername());
Cookie pwdCookie = new Cookie("password", u.getPassword());
nameCookie.setMaxAge(60 * 60 * 24 * 30);
pwdCookie.setMaxAge(60 * 60 * 24 * 30);
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
response.sendRedirect("index.jsp");
return;
}
} }

  Filter中设置编码和Cookie的获得:

package cn.zzsxt.lee.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* @description 编码过滤器
* @author Seven Lee
* @date 2017年7月28日下午4:48:59
*
*/
public class GlobalFilter implements Filter { @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 如果是设置编码,就必须添加chain.doFilter();
chain.doFilter(request, response);
// 获取cookie数组
Cookie[] cookies = request.getCookies();
if (cookies != null) {// 防止空指针
String username = "";
String password = "";
for (int i = 0; i < cookies.length; i++) {
System.out.println(cookies[i].getValue());
if ("username".equals(cookies[i].getName())) {
username = cookies[i].getValue();
}
if ("password".equals(cookies[i].getName())) {
password = cookies[i].getValue();
}
}
request.getSession().setAttribute("username", username);
request.getSession().setAttribute("password", password);
} else {
for(int i = 0; i < cookies.length; i++){
System.out.println(cookies[i].getValue());
}
response.sendRedirect("login.jsp"); 重定向两次会造成500错误,请求转发两次,后端会出现错误但页面扔可以跳转
return;
} } @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void destroy() { } }

  Web.xml文档的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>20170728_project_final</display-name> <filter>
<filter-name>encoding</filter-name>
<filter-class>cn.zzsxt.lee.web.filter.GlobalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

 5.MVC和三层架构的关系:

  三层架构:

  是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层)。

  三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。

  比如将数据库操作代码封装到一层中,提供一些方法根据参数直接返回用户需要的相应数据,这样在处理具体的业务逻辑的时候,就不用关心数据的存储问题了。

  MVC:

  是在应用程序(BS结构)的视图层划分出来的不同功能的几个模块。

  MVC主要是为了解决应用程序用户界面的样式替换问题,把展示数据的 HTML 页面尽可能的和业务代码分离。MVC把纯净的界面展示逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Models。

  

  三层可以应用于任何语言、任何技术的应用程序;而MVC只是为了解决BS应用程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使用其中一种。

        

  三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

   1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

   2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

   3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

  MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。

  mvc可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。

  三层是基于业务逻辑来分的,而mvc是基于页面来分的。

  MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器

java:(九大内置对象,计算服务器访问次数,filter过滤器,MVC框架,MVC和三层架构的关系)的更多相关文章

  1. Java九大内置对象

    Java九大内置对象    内置对象/作用域(每一种作用域的生命周期是不一样的):        1, application 全局作用域        2, session 会话作用域       ...

  2. Java Web(五) JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

  3. 当Java遇见了Html--Jsp九大内置对象篇

    jsp内置对象对象是web容器创建的一组对象,不使用new关键词久可以使用的内置对象. 九大内置对象包括以下: out --JspWriter request --ServletRequest rep ...

  4. jsp九大内置对象与servlet中java对象

    jsp九大内置对象 request对象 :  getParameter(String name)获取表单提交的数据 getParamegerNames() 获取客户端提交的所有参数名 getAttri ...

  5. java Web jsp四大作用域和九大内置对象

    JSP中的四大作用域:page.request.session.application 这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据, ...

  6. 今天我们来认识一下JSP的九大内置对象

    虽然现在基本上我们都是使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的.像request.response.session这些对象,即便使用 ...

  7. 重温JSP学习笔记--三大指令九大内置对象

    最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...

  8. jsp数据交互(一),九大内置对象

    九大内置对象 九大内置对象 内置对象 类型 说明 作用域 request javax.servlet.ServletRequest 请求对象——在 一次请求/一个Request请求周期 中传递数据,请 ...

  9. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

随机推荐

  1. highcharts的基本使用(转载)

    1 概述 Highcharts是一个跨浏览器的JavaScript图表控件,支持柱状图.趋势图.面积图.饼图.环形图.组合图.堆积图.散点图. Highcharts图表的基本功能,只需要引入两个JS类 ...

  2. JavaScript 的 this 指向问题深度解析

    与我们常见的很多语言不同,JavaScript 函数中的 this 指向并不是在函数定义的时候确定的,而是在调用的时候确定的.换句话说,函数的调用方式决定了 this 指向. JavaScript 中 ...

  3. XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面

    问题描述XP系统,用户帐户设置有密码.用户表示之前启动到系统登录界面,会直接出现输入密码的对话框(见图一):现在启动到登录界面只看到用户帐户信息,需手动点击用户名后才能出现输入密码的界面,用户感觉不方 ...

  4. oracle表的列合并(group by)和行合并(union all)

    group by select a.dn,t.dn dnt,a.BEGIN_TIME,a.R032_001,t.R032_001,a.R032_002,a.R032_003,a.R032_004, a ...

  5. k8s存储卷概述

    pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在.docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的 ...

  6. 【Linux学习一】命令行CLI、BASH的基本操作

    ●操作系统的基本结构 操作系统的基本结构通过Kernel(内核)和Shell(壳)构成.常见的Shell分为GUI和CLI GUI 图形方面的shell ------〉windows .mac osC ...

  7. JQuery的deferred.promise()

    jQuery提供的deferred.promise()方法的作用是,在原来的Deferred 对象上返回另一个 Deferred 对象,即受限制的 Promise 对象,受限制的 Promise 对象 ...

  8. Flink SQL 如何实现数据流的 Join?

    无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...

  9. Redis常见面试问题及答案

    大量key在同一时间过期,注意什么? 如果过期时间过于集中,会导致Redis可能会出现短暂的卡顿现象.严重的话会出现缓存雪崩,一般需要在时间上加一个随机值, 使用过期时间分散一些. Redis分布式锁 ...

  10. 总结JavaScript中浏览器的兼容问题

    浅析JavaScript中浏览器的兼容问题 浏览器兼容性问题是在实际开发中容易忽略而又最重要的一部分.我们在讲老版本浏览器兼容问题之前,首先要了解什么是能力检测,它是来检测浏览器有没有这种能力,即判断 ...