JSP
------------恢复内容开始------------
JSP
- 什么是JSP
- 浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet,servlet最终会转换成为一个java类,JSP本质上就是一个Servlet
- 在JSP页面中,java代码就会原封不动的输出,如果是HTML代码则会被转义成out.write("<html>\r\n")这样的格式输出到前端
- jSP基础语法和指令
- <%-- 注释命令 --%>
-
<%-- JSP 表达式 用来将程序输出到客户端
<%= 变量或者表达式 %>
--%>
<%= new java.util.Date() %> -
<hr>
<%-- 分割线 --%> -
<%-- JSP声明:使生成的元素在java的类中,提高了元素的作用域!,其他的会生成到_javaService方法中 --%>
<%!
static {
System.out.println("Loading Servlet!");
}
private int globVar = 0;
public void method(){
System.out.println("进入了method方法");
}
%>
- JSP指令
- page指令
-
<%@ page import="java.util.Date" %>导包
<%@ page contentType="text/html;charset=UTF-8" language="java" %>设置网页参数 -
<%-- 定制错误页面 --%>
<%@page errorPage="error/500.jsp" %><%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <img src="../img/500.png" alt = 500> </body> </html> -
在web.xml中配置错误页面
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> </web-app>
-
<%@page isErrorPage="true" %>
<%@page pageEncoding="UTF-8" %> 都是一些页面设置
-
- page指令
-
- include指令
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%@include file="common/header.jsp"%> <h1> 我是主体 </h1> <%@include file="common/footer.jsp"%> <hr> <%-- jsp 标签 --%> <jsp:include page="/common/header.jsp"/> <h1> 我是主体 </h1> <jsp:include page="common/footer.jsp"/> </body> </html>
<%-- 两种方式的不同点是,@include会将两个页面合二为一,jsp标签的include是拼接页面,本质还是三个页面 --%>
-
- include指令
- JSP内置对象和作用域
- jsp9大内置对象
- PageContext 存东西
- Requset 存东西
- Respones
- Session 存东西
- Application[ServletContext] 存东西
- config[ServletConfig]
- out
- exception
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 内置对象 何其不同的作用域--%>
<%
pageContext.setAttribute("name1","duf1");//保存的数据只在一个页面中有效
request.setAttribute("name2","duf2");//保存的数据只在一次数据请求中有效,如果有页面的转发,该数据继续生效,否则该数据死亡
session.setAttribute("name3","duf3");//保存的数据只在一车会话中有效,,从打开浏览器到关闭浏览器
application.setAttribute("name4","duf4");//保存的数据在服务器中有效,从打开服务器到关闭服务器
%>
<%
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5");
%>
<%-- 使用EL表达式输出值 name5没有值就不会输出--%>
<h1>取出的值为</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
<hr>
<%-- 使用jsp语法取值 name5会输出null --%>
<h3><%= name5%></h3>
</body>
</html>- 各个作用域使用的场景
- request:客户端向服务器发送请求,产生数据,用户看完就没用了,比如:新闻等
- session:客户端向服务器发送请求,产生数据,用户用完一段时间还有用,比如:购物车
- application:客户端向服务器发送请求,产生数据,一个用户用完了,其他用户可能还有用,比如:聊天数据
- 各个作用域使用的场景
- jsp9大内置对象
- JSP标签&JSTL标签&EL表达式
<!-- JSTL 表达式的依赖 --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- standard 标签库依赖 --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
- EL表达式:${}
- 获取数据
- 执行运算
- 获取web开发常用的对象
- EL表达式:${}
-
- JSTL标签
- javabean
- 必须要有一个无参构造
- 属性必须私有化
- 必须有对应的set、get方法
- 一般用来和数据库的字段做映射ORM
- 表-->类
- 字段-->属性
- 行记录-->对象
- MVC三层构架
- model 模型
- 业务处理:业务逻辑(service)
- 数据持久层:CRUD(Dao)
- view 视图 (JSP):专注于显示数据
- 展示数据
- 提供连接发起Servlet请求(a、form、img...)
controller 控制器(servlet):专注于处理请求,以及控制视图跳转
- 接收用户的请求(req:请求参数,Session信息)
- 相应用户的请求(交给业务层去做)
- 重定向或转发 (视图的跳转)
- 登录-->接收用户的登录请求-->处理用户的请求(获取用户登录的参数,username,password)---->提交给业务层处理登录业务(判断用户名密码是否正确:事务)---->Dao层查询用户名和密码是否正确---->数据库(数据持久化)
- model 模型
- Filter 过滤器
- 用来过滤网站的数据
- 处理中文乱码
- 登录验证
- Filter开发步骤
- 导包 javax.servlet
- 编写过滤器
- 实现Filter接口,重写对应的方法即可
public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //初始化,服务器启动就会初始化,随时等待过滤对象出现 System.out.println("CharacterEncodingFilter初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("UTF-8"); servletResponse.setCharacterEncoding("UTF-8"); servletResponse.setContentType("text/html;character=UTF-8"); /** * filterChain:链 * 1、过滤中的所有代码在过滤特定请求的时候都会执行 * 2、必须要让过滤器继续通行 * filterChain.doFilter(servletRequest,servletResponse) */ System.out.println("CharacterEncodingFilter执行前...."); filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,如果不写,程序到这里就被拦截停止 System.out.println("CharacterEncodingFilter执行后....."); } @Override public void destroy() { //销毁,关闭服务器时,过滤会销毁 System.out.println("CharacterEncodingFilter销毁"); } }
- filter文件亦需要在web.xml中进行注册和映射
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.twilight.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
此处可以为/servlet下的所有包都可以进行过滤,所以,映射Servlet路径时最好加上该路径
<servlet> <servlet-name>showServlet</servlet-name> <servlet-class>com.twilight.servlet.ShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>showServlet</servlet-name> <url-pattern>/show</url-pattern> <url-pattern>/servlet/show</url-pattern> </servlet-mapping>
- 实现Filter接口,重写对应的方法即可
- 用来过滤网站的数据
- 监听器

浙公网安备 33010602011771号