JSP基础知识与案例

本文介绍了JSP的基础知识,包括JSP的定义、工作原理和基本语法。重点讲解了JSP如何将页面转换为Servlet以及如何获取和使用变量。此外,还通过一个综合案例展示了如何使用JSP模拟数据库操作,涉及到实体类、DAO层、Service层以及Servlet的配置。

一、什么是JSP?

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

二、JSP原理和语法

Web服务器是如何调用并执行一个jsp页面的?
 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet.

JSP语法

  • JSP获得变量的值 <%= 表达式或者变量值 %>

  • JSP定义局部变量:写一段Java代码 <% Java代码 %>
    注意点:必须严格遵守Java规范

  • JSP定义全局变量 <%! 全局变量或方法 %>

  • EL表达式 ${} == <%= %>

EL表达式一般用来输出对象和变量,不能是一个对象

Web服务器在调用jsp时,会给jsp提供一些什么java对象?
 查看jspService方法可以看到,Web服务器在调用jsp时,会给Jsp提供如下的8个java对象

1 PageContext pageContext;
2 HttpSession session;
3 ServletContext application;
4 ServletConfig config;
5 JspWriter out;
6 Object page = this;
7 HttpServletRequest request, 
8 HttpServletResponse response

其中page对象,request和response已经完成了实例化,而其它5个没有实例化的对象通过下面的方式实例化

1 pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);
2 application = pageContext.getServletContext();
3 config = pageContext.getServletConfig();
4 session = pageContext.getSession();
5 out = pageContext.getOut();

这8个java对象在Jsp页面中是可以直接使用的,如下所示

<%
        session.setAttribute("name", "session对象");//使用session对象,设置session对象的属性
        out.print(session.getAttribute("name")+"<br/>");//获取session对象的属性
        pageContext.setAttribute("name", "pageContext对象");//使用pageContext对象,设置pageContext对象的属性
        out.print(pageContext.getAttribute("name")+"<br/>");//获取pageContext对象的属性
        application.setAttribute("name", "application对象");//使用application对象,设置application对象的属性
        out.print(application.getAttribute("name")+"<br/>");//获取application对象的属性
        out.print("Hello Jsp"+"<br/>");//使用out对象
        out.print("服务器调用index.jsp页面时翻译成的类的名字是:"+page.getClass()+"<br/>");//使用page对象
        out.print("处理请求的Servlet的名字是:"+config.getServletName()+"<br/>");//使用config对象
        out.print(response.getContentType()+"<br/>");//使用response对象
        out.print(request.getContextPath()+"<br/>");//使用request对象
%>
--------------------- 

JSP综合案例:模拟数据库

1.模拟数据库

package com.kuang.db;

import com.kuang.pojo.News;

import java.util.ArrayList;
import java.util.List;

public class NewsDB {

    public static List<News> list = new ArrayList<News>();

    static {
        list.add(new News("7.16","学习了JSP的使用以及源码分析"));
        list.add(new News("7.14","学习了Servlet,简单的JSP的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
        list.add(new News("7.13","学习了Tomcat,Servlet的使用"));
    }

}

2.实体类

//实体类,一般放在pojo包下,【 or  entity  or JavaBeans】
//实体类,只有属性,一般用来映射数据库中的字段  ( O R M )
//私有属性 , 无参构造,有参构造
//get/set方法
//为了方便程序打印,建议加上toString();
public class News {

    private String data;
    private String content;

    public News() {
    }

    public News(String data, String content) {
        this.data = data;
        this.content = content;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "News{" +
                "data='" + data + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}

3.DAO层
接口:

//dao包一般用来存放操作数据库的对象类;

import com.kuang.pojo.News;

import java.util.List;

public interface NewsDao {
    //获得所有的新闻
    public List<News> getAllNews();

}

实现类:

import com.kuang.db.NewsDB;
import com.kuang.pojo.News;

import java.util.List;

//NewsDao的实现类
public class NewsDaoImpl implements NewsDao {
    @Override
    public List<News> getAllNews() {
        List<News> list = NewsDB.list;
        return list;
    }

}

4.sevice层
接口:

import com.kuang.pojo.News;

import java.util.List;

//service一般存放业务类
public interface NewsService {
    //获得所有的新闻
    public List<News> getAllNews();
}

实现类:

import com.kuang.dao.NewsDao;
import com.kuang.dao.NewsDaoImpl;
import com.kuang.pojo.News;

import java.util.List;

public class NewsServiceImpl implements NewsService {

    //从dao层中取出相应的操作数据库的方法
    NewsDao newsDao = new NewsDaoImpl();

    @Override
    public List<News> getAllNews() {
        return newsDao.getAllNews();
    }
}

5.servlet

import com.kuang.pojo.News;
import com.kuang.service.NewsService;
import com.kuang.service.NewsServiceImpl;
import org.apache.catalina.Session;
import org.junit.Test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class NewsServlet extends HttpServlet {

    NewsService newsService = new NewsServiceImpl();

    @Test
    public void test(){


    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //写代码读取数据存到某个地方,让前端读取;

        List<News> allNews = newsService.getAllNews();//从业务层去获得数据中的全部新闻

        int i = 1;

        for (News allNew : allNews) { //遍历获得每一个新闻

            String data = allNew.getData();
            String content = allNew.getContent();

            //四大作用域
            //      page(不用它,代表当前页面)
            //      request(一次请求中有效): 登录注册
            //      session (一次会话中存在) : 购物车
            //      application:本质就是Context (全局,所有会话共享) : 广告
            //这四个作用域用来存放一些内容或者对象
            HttpSession session = req.getSession();

            session.setAttribute("data"+i,data);
            session.setAttribute("content"+i,content);

            System.out.println(session.getAttribute("data"+i));
            System.out.println(session.getAttribute("content"+i));

            i++;//自增
        }

        //数据都读取出来了,给你放到session中了,该去访问页面了
        resp.sendRedirect("index.jsp");

    }

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

--------------------- 

6.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">

    <servlet>
        <servlet-name>newsServlet</servlet-name>
        <servlet-class>com.kuang.servlet.NewsServlet</servlet-class>
    </servlet>


    <servlet-mapping>
        <servlet-name>newsServlet</servlet-name>
        <url-pattern>/news.do</url-pattern>
    </servlet-mapping>

</web-app>

7.index.jsp

<%@ page import="com.kuang.db.NewsDB" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>首页</title>

  <%--引入css--%>
  <link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/css/layui.css">
  <%--引入静态资源文件必须带上项目路径位置--%>
  <Script src="${pageContext.request.contextPath}/statics/layui/layui.js"></Script>

</head>
<body>

<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
  <legend>常规时间线</legend>
</fieldset>

<ul class="layui-timeline">


<%
  for (int i = 1; i <= NewsDB.list.size(); i++) {
%>

  <li class="layui-timeline-item">
    <i class="layui-icon layui-timeline-axis"></i>
    <div class="layui-timeline-content layui-text">
      <h3 class="layui-timeline-title">
        <%=request.getSession().getAttribute("data"+i)%>
        <%--${sessionScope.data1}--%>
      </h3>
      <p>
        <%--${sessionScope.content1}--%>
          <%=request.getSession().getAttribute("content"+i)%>
      </p>
    </div>
  </li>

<%
  }
%>

  <li class="layui-timeline-item">
    <i class="layui-icon layui-timeline-axis"></i>
    <div class="layui-timeline-content layui-text">
      <div class="layui-timeline-title">过去</div>
    </div>
  </li>
</ul>


</body>
</html>

顺序如下: 1、多种字体大小显示 2、c:out标记输出 3、获取当前时间 4、include包含语句 5、建立错误处理页面的范例程序 6、jsp:forward 7、简单计数器 8、设置页面属性 9、使用GB2312编码 10、使用Big5编码 11、c:catch的用法 12、 begin、end和step的用法 13 、 循环 14、 varStatus 的四种属性 15、 的用法 16、从客户端传送数据至服务端 17、使用Unicode转义字符 18、使用朝鲜语字符集 19、JSP中最简单的国际化程序 20、错误检测 21、抛出异常 22、 的用法 23、和 的用法 24、 的用法 25、jsp-include的用法 26、汉字处理 27、网页重定向 28、自动更新网页 29、存取session 30、 的用法 31、单选型列表框 32、jsp文件中定义类 33、取得 JSP Container 版本 34、javax.servlet.jsp.JspWriter - out 对象 35、page 隐含对象 36、application 对象 37、PageContext 对象 38、Page范围 - pageContext 39、测试要显示的中文 40、IF控制符的操作 41、HttpServletRequest 接口所提供的方法 42、 网上测验 43、HttpSession - session 对象 44、 多选型列表框 45、解决浏览器 cache 的问题 46、使用 EL、JSTL 处理表单数据 47、 EL隐含对象 param、paramValues 48、EL隐含对象 pageContext 49、EL算术运算符 50、EL关系运算符 51、EL的运算符 52、选择钮的使用 53、检查框的使用 54、群组检查框的使用 55、数字、货币、百分数格式化 56、日期格式化 57、JSTL设置语言地区 58、Cookie数据的存取 59、session有效时间的设置取得 60、session时间ID 61、Cookie有效时间的设置 62、利用隐藏字段传送数据 63、JSP 使用 JavaBean 的方法 64、JSP 使用 JavaBean 65、范围为 Page 的 JavaBean范例程序 66、范围为 Request的 JavaBean 67、范围为 Session 的 JavaBean 68、范围为 Application 的 JavaBean 69、删除 JavaBean 70、url重组 71、Switch语句 72、环境变量 73、forward重定向 74、文件的建立删除 75、取得文件属性 76、取得目录中的文件 77、目录的建立删除 78、自Cookie存取日期/时间数据 79、管理Session变量 80、数据库中的记录数记录指针位置 81、利用absolute方法设置记录位置 82、使用jsp指令生成Word文档 83、JSP网页模板 84、判断是否空白文件 85、cookie 用户登录次数 86、获取用户的真实IP地址 87、获取用户的浏览器信息 88、在客户端进行数据检查 89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、SAX读取XML文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值