2020-08-05 JSP基本语法指令、内置对象、作用域、JSP/JSTL标签、JavaBean对象、过滤器监听器

JSP基本语法

Java Server Pages,和servlet一样用于开发动态web
原理:不管浏览器怎么发送请求,怎么都是请求servlet
JSP最终也会转变为一个JAVA的类

1.判断请求
2.内置了对象(pagecontext页面上下文、session、applicationcontext、config、out等)

基础语法指令:

注释:

<%--  注释  --%>

<%= new Date()%>


JSP脚本片段:
<%
	int sum = 0;
	for(int i=0;i<100;i++){
	}
%>


<%
	int sum = 0;
	for(int i=0;i<100;i++){
%>
111
<%
	}
	int sum = 0;
	for(int i=0;i<100;i++){
	}
%>

JSP声明:

<%!
private int global = 10 ;
%>
//这个会被编译到类中,全局变量,其他的都是进入到jspservice方法中

${}-----------------------el表达式

JSP指令

导包
<%@ page import=""%>

自己制定报错页面,在相应JSP中编写相关的内容:
在web.xml中配置:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
</error-page>

JSP的标签:
<jsp:include page="/common/head.jsp"> ---------页面添加固定的头块
<jsp:include page="/common/footer.jsp"> ---------页面添加固定的尾块

@include会把两个页面合二为一,而jsp的include标签会把页面进行拼接

JSP的内置对象

一) PageContext ----------存东西的,保存的数据只在一个页面中有效
PageContext.setAttribute(“name1”,“wang”);
String s1 = (String) PageContext.getAttribute(“name1”);
//用EL表达式取值,从底层到高层
${s1} ---------------这个是在HTML代码中存在的
可以转发PageContext.forward("/index.jsp");
二) Request ----------存东西的,只在一次请求中有效
Request.setAttribute(“name2”,“wang”);
三) Response

四) Session ----------存东西的,一次会话中有效
Session.setAttribute(“name3”,“wang”);
五) Application ----------存东西的,在服务器中有效
Application.setAttribute(“name4”,“wang”);
六) config

七) out

八) page 不用了

九) exception

JSP标签、JSTL标签、EL表达式

EL表达式:${} ============获取数据、执行运算、获取WEB开发常用对象

<input type="text" name="username" value="${param.username}">

JSP标签

//第一个JSP中进行转发并携带参数
<jsp:forward page="/jsp2.jsp">
	<jsp:param name="name" value="wang"><jsp:param>
	<jsp:param name="age" value="12"><jsp:param>
</jsp:forward>

//第二个JSP中获取参数
姓名:<%=request.getparameter("name")%>
年龄:<%=request.getparameter("name")%>

JSTL标签
弥补HTML标签的不足,自定义许多标签

JSTL核心标签必须引用:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

JavaBean

有一个无参构造
属性必须私有化
有对应的get/set方法
一般用来做数据库字段做映射

MVC三层架构

Model 模型
业务处理、业务逻辑(service)
数据持久层(DAO)

View 视图
展示数据
提供链接发起servlet请求(a,form,img)

Control 控制器
接受用户请求
交给业务层处理对应的代码
控制视图的跳转

Servlet专门用于处理请求、控制视图跳转
JSP专门用于显示数据

过滤器Filter

Filter:过滤器,过滤网站的数据
功能:处理中文乱码,登陆验证…

过滤器实现编码修正:
一)添加依赖:pom.xml文件

  <dependency>
		<groupId>taglibs</groupId>
		<artifactId>standard</artifactId>
		<version>1.1.2</version>
	</dependency>

二)导包记得要导javax下的filter包
三)实现接口后,重写相应方法
四)web.xml配置Filter

过滤器代码

//这是一个过滤器
public class CharactorEncodingFilter implements Filter {
    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharactorEncodingFilter执行初始化步骤");
    }
    //过滤器方法
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("GBK");
        servletResponse.setCharacterEncoding("GBK");
        servletResponse.setContentType("text/html;charset=GBK");
        System.out.println("过滤前");
        //这里的作用是让请求通过过滤器
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("过滤后");
    }
    //销毁过滤器,一般是在服务关闭的时候就会执行
    public void destroy() {
        System.out.println("CharactorEncodingFilter执行了销毁步骤");
    }
}

测试代码:

public class ShowFilter extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("中华人民共和国");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml代码:

    <servlet>
        <servlet-name>Show</servlet-name>
        <servlet-class>com.wang.servlet.ShowFilter</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Show</servlet-name>
        <url-pattern>/show</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Show</servlet-name>
        <url-pattern>/s1/show</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>Filter</filter-name>
        <filter-class>com.wang.servlet.CharactorEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Filter</filter-name>
<!--    这里的意思是放行/s1/的任何请求,只要符合这个要求,就进入这个过滤器,进行过滤器中的代码执行,否则就不执行   -->
        <url-pattern>/s1/*</url-pattern>
    </filter-mapping>

监听器

例子:统计在线人数
一)编写类,实现HttpSessionListener接口
重写sessionCreated、sessionDestroyed方法
二)去web.xml注册监听器(只写一个类url)
三)看情况是否使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值