博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习记录 Day5(JSP进阶)
阅读量:3900 次
发布时间:2019-05-23

本文共 7802 字,大约阅读时间需要 26 分钟。

文章目录

Day 5

2019年7月17日。

这是我学习JavaWeb的第五天。
这一天,我学到了以下的知识。

JSP指令

语法

<%@ 指定名 属性名=属性值:[属性名=属性]... @%>

在JSP中,只有三种指令:page、include、tarlib

  1. page指令

    • autoFlush:自动刷新(true,false:默认)
    • contentType:页面文本类型"text/html"
    • errorPage:如果存在错误页面,就跳转至指定的页面【不推荐使用,但需要掌握】
      可以在web.xml配置<.error-page>标签接下来的属性:
      - error-code:错误码
      - location:错误页面
      - exception-type:异常类型
    • language:JSP使用的语言,默认是Java
    • pageEncoding:页面编码
    • import:因为jsp本质上是一个servlet,所以需要导入相关jar包才能使用
  2. include指令(需要掌握)

    导入其他页面包含到本页,网站中一般有一些公用的位置,我们可以提取出来,比如网站的头部和尾部
    file属性:【要导入页面,一般都是不完整的网页,只包含部分】

  3. taglib指令

    标签库,在jsp中有大量的java代码,所以开发中可以使用一些线程的标签库,就相当于使用一些替代java代码的标签语言
    例如:
    out.print() —> <c:out> :这个c就是别人定义好的标签库,像这样的库有非常多,甚至可以自己定义

page-errorPage命令测试

在 web.xml中,指定一个页面作为404错误时的页面,代码如下:

404
/common/header.jsp
500
/common/footer.jsp

include命令测试

在项目目录中新建一个header.jsp和footer.jsp,在这两个页面中分别编写代码,然后再在index.jsp中使用include指令将这两个页面合并起来,代码如下:

  • header.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

我是header页面

  • footer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

我是footer页面

  • index.jsp
        <%--使用include指定加载网页其他部分--%>    <%@include file="common/header.jsp"%>  

我是index页面

<%@include file="common/footer.jsp"%>

JSP标签

作用

避免在JSP中有大量的Java代码,从而不好维护

语法

常用JSP标签

  1. jsp:include
    page属性:用于表示要包含的页面地址
  2. jsp:forward
    本质:就是request的请求转发,可以携带参数
    page属性:表示要转发到的页面,不会改变url
  3. jsp:param
    作用:一般配合jsp:forwad使用
  4. jsp:useBean
    作用:用于引入一个自定义的对象
  5. jsp:setProperty
    作用:用于设置自定义对象的属性值,常与jsp:setProperty标签配合,默认使用的是实体类中的set方法
  6. jsp:getProperty
    作用:用于获取自定义对象的属性值,常与jsp:getProperty标签配合,默认使用的是实体类中的get方法

jsp:forward和jsp:param标签测试

项目中有两个jsp页面:index.jsp和tag.jsp,在tag.jsp中设置相应的参数值,从而可以在index.jsp接收到,代码如下:

  • tag.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title<%--

我是tag页面

--%>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>        <%--使用include指定加载网页其他部分--%>    <%@include file="common/header.jsp"%>  

我是index页面

<%@include file="common/footer.jsp"%> 名字:<%=request.getParameter("username")%> 年龄:<%=request.getParameter("age")%>

jsp:useBean标签测试

项目中有一个实体类:Student类,通过pojo.jsp获取该类的对象,并且设置和显示对象中的属性值,代码如下:

  • Student.java
public class Student {
// 面向对象编程三大特性:封装、继承、多态 // 封装:属性私有,不让用户随意操作,于是我们设置操作属性的公开方法,我们会在公开的方法中定义安全性代码 private String name; private int id; private int age; private boolean isGraduate; // 是否毕业 public Student() {
} public Student(String name, int id, int age, boolean isGraduate) {
this.name = name; this.id = id; this.age = age; this.isGraduate = isGraduate; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public int getId() {
return id; } public void setId(int id) {
this.id = id; } public int getAge() {
return age; } public void setAge(int age) {
this.age = age; } public boolean isGraduate() {
return isGraduate; } public void setGraduate(boolean graduate) {
isGraduate = graduate; } @Override public String toString() {
return "Student{" + "name='" + name + '\'' + ", id=" + id + ", age=" + age + ", isGraduate=" + isGraduate + '}'; }}
  • pojo.jsp
<%@ page import="pojo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title<%    Student student = new Student();%><%--jsp:useBean标签    创建一个类的实例化对象;    java代码:Student student = new Student();    属性:        id:实例化对象的名称,对象名        class:要实例化的类        scope:对象的作用域,默认是page,千万不要放到application中;--%>
<%--设置对象中的属性值--%><% student.setName("aaa"); student.setAge(18); student.setId(001); student.setGraduate(true);%><%--显示对象中的属性值·方法一--%><%=student.getName()%><%=student.getAge()%><%=student.getId()%><%=student.isGraduate()%>

<%--显示对象中的属性值·方法二--%>${
student.name}${
student.age}${
student.id}${
student.graduate}

jsp:setProperty和jsp:getProperty标签测试

项目中一个实体类:Student类,通过pojo.jsp获取该类的对象,并且设置和显示对象中的属性值,代码如下:

  • Student.java
public class Student {
// 面向对象编程三大特性:封装、继承、多态 // 封装:属性私有,不让用户随意操作,于是我们设置操作属性的公开方法,我们会在公开的方法中定义安全性代码 private String name; private int id; private int age; private boolean isGraduate; // 是否毕业 public Student() {
} public Student(String name, int id, int age, boolean isGraduate) {
this.name = name; this.id = id; this.age = age; this.isGraduate = isGraduate; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public int getId() {
return id; } public void setId(int id) {
this.id = id; } public int getAge() {
return age; } public void setAge(int age) {
this.age = age; } public boolean isGraduate() {
return isGraduate; } public void setGraduate(boolean graduate) {
isGraduate = graduate; } @Override public String toString() {
return "Student{" + "name='" + name + '\'' + ", id=" + id + ", age=" + age + ", isGraduate=" + isGraduate + '}'; }}
  • pojo.jsp
<%@ page import="pojo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>    Title<%    Student student = new Student();%><%--jsp标签--%><%--setProperty默认使用的是实体类中的set方法--%>
<%--setProperty默认使用的是实体类中的get方法--%>

JSTL标签库

作用

和jsp标签一样,为了解决jsp中嵌入java代码看着不舒服

注意点

  • 项目要导入对应的jstl标签库的jar包
  • Tomcat中也需要放置对应的jar包
  • 代码中,有些特殊符号需要使用转义字符
<%@ page import="com.kuang.pojo.Student" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><%--使用jstl或者其他标签库需要先导入,需要下载对应的jar包-jstl-1.2;prefix:需要使用的标签库名tagdir:标签库的本地目录uri : 对应库的网络地址--%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    Title<%--
--%>
<%--
<% request.getSession().setAttribute("name","qinjiang"); Student student = new Student(); student.setName("qinjiang");%><%=student.getName().equals("qinjiang")%>${
sessionScope.name=='qinjiang'}
">

EL表达式

作用

简化jsp的代码难度

${
表达式}${
page、session、request、Application的变量}

过滤器

在这里插入图片描述

主要用它来实现过滤乱码问题!

过滤器一般就用来过滤一些违规词语,解决乱码问题;主要还是为了解耦,职责统一

实现步骤

  1. 写一个类实现Filter接口,必定会重写三个方法
    • 初始化
    • doFilter(req,resp,doFilterChain)
      • doFilterChain(req,resp)
    • 注销
  2. 配置web.xml
myFilter
com.kuang.filter.MyFilter
myFilter
/*

测试代码

import javax.servlet.*;import java.io.IOException;//filter过滤实现//1.实现Filter接口   : javax.servlet.Filter;//2.配置web.xmlpublic class MyFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter初始化了"); } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
//主要过滤方法编写在doFilter中 req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); if (req.getParameter("username")!=null){
System.out.println(req.getParameter("username")); if (req.getParameter("username").equals("aaa")){
resp.getWriter().println("?????????????????????????????"); } } System.out.println("执行方法filterChain.doFilter(req,resp);前==========="); filterChain.doFilter(req,resp); //这行代码代表过滤器放行 System.out.println("执行方法filterChain.doFilter(req,resp);后==========="); } @Override public void destroy() {
System.out.println("MyFilter注销了"); }}

转载地址:http://gicen.baihongyu.com/

你可能感兴趣的文章
nginx配置查看服务器日志目录文件
查看>>
tomcat性能优化配置-协议类型选择nio或APR
查看>>
用jquery实现简单的模块开发
查看>>
spring-data-redis 整合配置redis
查看>>
解决Could not resolve placeholder 'redis.maxTotal' in string value "${redis.maxTotal}
查看>>
redis+lua实现高并发商品秒杀案例
查看>>
arttemplate基础语法介绍
查看>>
FreeMarker基础语法介绍
查看>>
linux 下安装minio并配置
查看>>
js 验证身份证合法性以及真实性18位和15位
查看>>
js 图片上传进行FileReader解析展示
查看>>
tomcat配置war包路径启动
查看>>
mysql 为现有表建立范围分区
查看>>
java 后端做重复提交拦截基于aop
查看>>
spring 框架ResponseEntity实现文件下载
查看>>
springboot+activiti整合并简单开发审批流程以及流程打回发起人
查看>>
js两种金额格式化保留小数
查看>>
springboot rabbitmq对消费者和生产者丢消息设置
查看>>
解决springboot 无法找到html页面报404以及静态文件找不到问题
查看>>
springboot 中配置SSL证书实现https访问
查看>>