登录 or

servlet之JSP学习

JSP
1.1为什么需要JSP
Servlet:
优点:逻辑处理方便
缺点:页面表现麻烦
 
为了解决页面表现麻烦的问题,可以使用JSP,为什么不用html?
html标签展现的页面是死的,没法动态改变参数,JSP可以动态生成页面
 
JSP
优点:页面表现方便
缺点:逻辑处理麻烦
 
注意:一般在web项目中,采用JSP+Servlet+JavaBean(entity中的实例,数据库实体类)的技术(SSM)
JSP(Java Server Page)本质就是Servlet,也是java类,通过JSP引擎将JSP转译成Servlet
JSP约等于java+html
 
1.2JSP的执行过程不是简单的访问项目下的1.jsp文件,而是根据tomcat-web.xml-jspservlet-tomcatwork -1_jsp.java-----tomcat\
1.3
page标签/指令
(用来设置转译成servlet文件时的参数)
page:
contentType:表示浏览器解析响应信息的时候使用的解析格式和编码
language:表示jsp要转译成的文件类型
import:导入需要的jar包,多个包使用逗号分割
pageEncoding:设置页面的编码格式,必须与contentType里保持一致
session:用来控制servlet中是否有session对象
errorPage:当页面发生逻辑错误的时候,跳转的页面
extends:选择要转译的servlet类要继承的父类(包名+类名)
 
1.4在jsp中写入java代码
1.4.1局部代码块
可以将java代码跟页面展示的标签写入到一个jsp页面中,java代码转译成的servlet文件中,java代码跟输出是保存在service中的
缺点:代码可读性比较差,开发比较麻烦,一般不使用
1.4.2全局代码块
定义公共的方法的时候需要使用全局代码块使用<%!%>,生成的代码在servlet类中
调用的时候需要使用局部代码块
1.4.3脚本调用方式
使用<%=直接调用变量跟方法(必须有返回值)%>
注意,不能在变量或方法的后面添加;
 
1.5 include导入封装js的jsp类
静态导入:file中的jsp文件是相对路径
<%@include file="error.jsp"%>
优点:运行快
缺点:两个页面会耦合到一起,不利于维护,不能存在同名变量
 
动态导入:
<jsp:include page="index.jsp"></jsp:include>
优点:没有耦合,可以存在同名变量
 
1.6jsp页面请求转发
在jsp中也可以实现servlet的请求转发功能
<jsp:forward page="page.jsp"></jsp:forward>
注意:在标签中间不可以添加任何字符,除了<jsp:param name="" value=""></jsp:param>
在转发的页面中想要获取到属性值,可以通过request.getParameter(String key);
 
1.7 JSP九大内置对象
jsp页面在转译成器对应的servlet文件的时候,会自动声明一些对象,在jsp页面中可以直接使用
注意:内置对象在jsp页面中不能在全局代码中使用
 
九大对象
1.pageContext:表示页面的上下文的对象封存了其他内置对象,封存了当前页面的运行信息
注意:每一个页面都有一个对应的pageContext对象,伴随当前页面结束而结束
2.request:封装当前请求的数据,由tomcat创建,一次请求对应一个request对象
3.session:用来封装同一个用户的不同请求的共享数据,一次会话对应一个request对象
4.application:相当于ServletContext对象,一个web项目只有一个对象,存储着所有用户的共享数据,从服务器开始到服务器结束
5.page:代表当前jsp对象,跟java中的this指针类似
6.response:响应对象,用来响应请求数据,将处理结果发送给浏览器,可以进行重定向
7、exception:异常对象,存储当前运行的异常信息,必须在page指令中添加属性isErrorpage=true
8.config:相当于Servletconfig对象,用来获取web.xml中配置的数据,完成servlet初始化操作
9.out:响应对象,jsp内部使用,带有缓存区的响应对象,效率高于response
 
四大作用域:
pageContext:表示当前页面,解决当前页面内的数据共享问题,获取其他内置对象
request:一次请求,一次请求的servlet的数据共享,通过请求转发的方式,将数据到下一个servlet
session:一次会话,一个用户发送的不同请求之间的数据共享,可以将数据从一个请求流转到其他请求
application:项目内,不同用户的数据共享问题,将数据从一个用户流转到其他用户
 
路径问题:
1.相对路径 ../如果目录结果比较深操作起来比较麻烦
2.绝对路径:在请求路径的前面加/.表示当前服务器的根路径,使用时要添加/虚拟项目名称/资源目录
 
3.
request.getScheme() 返回当前链接使用的协议;一般应用返回http;SSL返回https;
<%
    String path = request.getContextPath();
    System.out.println(path);
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getLocalPort()+path+"/";
    System.out.println(basePath);
%>
<html>
<head>
    <base href="<%=basePath%>">
 
 
2.el表达式
http://localhost:8080/el/el?name=hello&pwd=123
package com.guaguauu;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class ElServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //从请求中获取数据
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        System.out.println(name);
        System.out.println(pwd);
        //给request对象单独设置属性
        request.setAttribute("111","root");
        //请求转发到el.jsp
        request.getRequestDispatcher("el.jsp").forward(request,response);
 
    }
}
 
el.jsp
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/3/21
  Time: 20:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
name:<%=request.getParameter("name")%>
pwd:<%=request.getParameter("pwd")%>
aa:<%=request.getAttribute("111")%>
 
 
</body>
</html>

0 个评论

要回复文章请先登录注册