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. Zen Cart 常用SQL命令

    网店日常维护过程中,难免要跟各种批量操作打交道, 虽然大多数操作可以通过批量上传 (easy populate) 和 快速更新 模块来完成, 但在应用便捷性和一些功能性的调整上, 总有一定的局限性; ...

  2. 清北学堂提高组突破营考试T1

    题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<ios ...

  3. String中的intern方法

    上一篇你真的会用String吗(3)-关于字符串拼接中我们提到了String.intern()方法,本篇我们就来详细的看下这个方法是干嘛的.首先来看下jdk8中这个方法的注释: When the in ...

  4. robotframework 找出重复元素

    思路 一.把需要进行比较的元素取出来组装成一个list 二.利用python函数,从list中找出重复函数 python函数: from collections import Counter #引入C ...

  5. python-文件校验

    使用hashlib的md5方法对文件进行加密,目的是为了保证文件在传输的过程中是否发生变化. #!/usr/bin/python3 # coding:utf-8 # Auther:AlphaPanda ...

  6. HTML的<form>表单标签

    表单 HTML 表单用于搜集不同类型的用户输入. ㈠Form标签 ⑴form标签简介 在HTML中,如果创建一个表单,就把各种表单标签放在<form></form>标签内部.我 ...

  7. Clojure的引用类型:var,ref,agent和atom

    作为其他值的容器,也都可以解引用. deref不会阻塞. add-watch (add-watch reference key fn) 可以定义引用值发生改变时的回调,fn是4个参数 :key (at ...

  8. codevs 2597 团伙x

                         题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的 ...

  9. sklearn.model_selection Part 1: Splitter Classes

    1. GroupKFold(_BaseKFold) 主要参数: n_splits : int, default=3 在GroupKFold.split(X[, y, groups])中会调用下面的方法 ...

  10. 9、kubernetes之statefulset控制器

    一.StatefulSet 有状态副本集 必要的三个组件:headless service.StatefulSet.volumeClaimTemplate 准备pv apiVersion: v1 ki ...