MVC & jsp 相关技术

MVC (Model View Control)

web应用程序Servlet

![image-20241121093050508](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241121093050508.png

1.jsp技术

jsp本质就是servlet

jsp源文件不会直接执行 是一种模版引擎 有转化的过程

xxx.jsp    ----------->        xxx_jsp.java       -------->   xxx_jsp.class 执行
      通过jsp-api.jar 转化代码    (servlet结构)          编译

jsp技术的初衷 为了方便生成动态页面

jsp与servlet的区别

jsp的特征:
jsp也是一个servlet 与自己的servlet有些区别
1.与servlet使用的类型 继承关系有区别  但是结构类似
2.通过jsp-api.jar 翻译成 java文件 编译成class文件运行
3.访问地址 根据原文件所在地址虚拟出来的 有服务器自动配置
// servlet使用的是虚拟路径 前缀 后缀都可以加 /myfolder/demo.jsp
   @WebServlet("/myfolder/demo.jsp")

jsp代码结构特征

代码结构  java         + html css javascript
       用特殊标记          直接写
jsp中java代码的写法:
1.<%  %>   java脚本
2.<%= %>   输出到页面
3.<%@ 指令名 指令参数%>
      page      做页面参数设置
      include   组合页面
      //taglib
4.<%-- --% >  jsp注释
示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>$Title$</title>

<style>
      h1{color: red}

    </style>
  </head>

<body>
  $END$
  String a = "abc";
  <%String a = "zzzz";
    System.out.println(a);
    out.print(a);
  %>
  <%=a %>

<h1>你还要</h1>
  <%@ include file="testPage.jsp"%>
  </body><script>
  console.log(123)

</script>
</html>

jsp内置对象 作用域

jsp9种内置对象
jsp源文件中没有 但是可以直接使用的对象(翻译的java文件中会生成的对象)
request
response
session
application
config
out
page
pageContext
exception
jsp4种作用域
域对象
page
request
session
application

el表达式 简化jsp页面中的取值并输出场景

${key}  域中的key
作用域隐式对象
pageScope
requestScope
sessionScope
applicationScope
参数访问对象
param
paramValue
页面上下文隐式对象
pageContext
可以简化取值输出
<%--<h1>欢迎你 <% String user =(String) session.getAttribute("loginUser");out.print(user); %></h1>--%>

<h1>欢迎你${sessionScope.loginUser} </h1>

<h3>欢迎你${param.username} </h3>
  <a href="/$%7BpageContext.request.contextPath%7D/xxx">连接地址</a>

2MVC

M数据 V视图 C 控制

通过C控制层,调用数据处理,并选择数据在哪个视图展示

//                   M数据    V视图    C 控制
//       代码三层结构  service  jsp     servlet
//                   dao
//                   实体类         

3.servlet与jsp组合使用

先由Servlet处理数据 ,再由jsp负责数据显示

需要从servlet跳转到jsp

两种跳转方式

//获得请求转发器 前进
req.getRequestDispatcher("/QueryUserJsp.jsp").forward(req,resp);
        * 转发(请求转发)
        * 服务器内部跳转 浏览器只做一次请求
        * 请求地址落在了第一次请求的地址上
        * 可以通过request共享数据
        * 路径格式  自有规则
        *         相对路径     规则相同
        *         相对根路径    /xxx.jsp  自动补全项目名  /项目名/xxx.jsp
        *
//通知浏览器 重定向访问
resp.sendRedirect("/day11/QueryUserJsp.jsp");
        * 重定向
        * 响应码302 
          多了响应头 Location: QueryUserJsp.jsp  
          浏览器接到这种响应 会向location指向的地址重新发送请求
        *
        * 发送两次请求
        * 请求地址落在了第二次请求的地址上
        * 无法通过request共享数据 需要通过session serveltContext共享数据
        * 路径格式 使用html中的访问路径
        *                  相对路径 相对根路径 绝对路径
示例:
package com.javasm.controller;

import com.javasm.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.ArrayList;

/**
 * @author gfs
 * @version 0.1
 * @className QueryUserServlet
 * @descriptioin:
 * @date 2024/11/21 10:47
 * @since jdk11
 */
@WebServlet("/queryUser")
public class QueryUserServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从数据库查出了用户列表
        ArrayList
<User> listUser = new ArrayList<>();
        listUser.add(new User(1l,"jack","abc123",15));
        listUser.add(new User(2l,"jack2","abc123",17));
        listUser.add(new User(3l,"jack3","abc123",88));

        /*
        * 跳转方式:
        * 转发(请求转发)
        * 服务器内部跳转 浏览器只做一次请求
        * 请求地址落在了第一次请求的地址上
        * 可以通过request共享数据
        * 路径格式  自有规则
        *             相对路径     规则相同
        *             相对根路径    /xxx.jsp  自动补全项目名  /项目名/xxx.jsp
        *
        * 重定向
        * 响应码302 多了响应头 Location: QueryUserJsp.jsp  浏览器接到这种响应 会向location指向的地址重新发送请求
        *
        * 发送两次请求
        * 请求地址落在了第二次请求的地址上
        * 无法通过request共享数据 需要通过session serveltContext共享数据
        * 路径格式 使用html中的访问路径
        *                  相对路径 相对根路径 绝对路径
        *
        *
        *

        *
        *
        * */
        //请求转发
        //通过域对象共享数据
        //HttpSession session = req.getSession();
        //session.setAttribute("listUser",listUser);
        req.setAttribute("listUser",listUser);

        req.getRequestDispatcher("/QueryUserJsp.jsp").forward(req,resp);
        //响应重定向
        //
        //resp.sendRedirect("/day11/QueryUserJsp.jsp");

    }
}

页面文件:

<%@ page import="com.javasm.entity.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/11/21
  Time: 10: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>
  <table border="1">

<tr>

<th>编号</th>

<th>姓名</th>

<th>密码</th>

<th>年龄</th>
      </tr>
    <%
      List
<User> listUser1 =(List<User>) request.getAttribute("listUser");
     // List
<User> listUser1 =(List<User>) session.getAttribute("listUser");
      List
<User> listUser  = listUser1;
//      ArrayList
<User> listUser = new ArrayList<>();
//      listUser.add(new User(1l,"jack","abc123",15));
//      listUser.add(new User(2l,"jack2","abc123",17));
//      listUser.add(new User(3l,"jack3","abc123",88));

    if(listUser!=null){
      for(User user:listUser){%>

<tr>

<td><%=user.getId()%></td>

<td><%=user.getUsername()%></td>

<td><%=user.getPassword()%></td>

<td><%=user.getAge()%></td>
        </tr>
    <%  }}
    %>

  </table>

</body>
</html>

转发和重定向运行方式

![image-20241121114021360](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241121114021360.png

实际使用时 根据什么标准选择使用转发/重定向
1.两个处理单元之间 有没有直接的数据关联(不需要长期存在的数据)
  servlet处理数据 jsp要显示 下次请求时数据可能不一样
  选择请求转发

2.两个处理单元 没有直接数据关联 
  转发和重定向 都可以

3.界面是否会频繁刷新
  如果没有直接数据关联 并会被多次刷新 最好选择重定向 前边的servlet不会重复触发 
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇