2021-11-3(java-web2)

一、jsp

1.什么是jsp

java server pages :java服务器端页面,也和servlet一样,用于动态web技术

最大的特点:

  • 和html差不多
  • 区别
    • html只给用户提供静态数据
    • jsp页面可以嵌入java代码,为用户提供动态数据

2.jsp原理:

jsp本质上是servlet

//初始化
public void _jspInit() {
  }
//销毁
  public void _jspDestroy() {
  }
//jspservice
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException

一些内置对象

    final javax.servlet.jsp.PageContext pageContext;    //页面上下文
    javax.servlet.http.HttpSession session = null;        //session
    final javax.servlet.ServletContext application;    //applicationContext
    final javax.servlet.ServletConfig config;        //config
    javax.servlet.jsp.JspWriter out = null;        //out
    final java.lang.Object page = this;                //page:当前
    HttpServletRequest request                        //请求
    HttpServletResonse response                        //响应

流程图

在jsp页面中:

java代码原封不动

htmt转化为out.write

 3.jsp基础语法:

jsp表达式<%=变量或者表达式%>

<%--  jsp表达式--%>
  <%=new java.util.Date()%>

jsp脚本片段<%   %>

<%
  int sum=0;
  for (int i = 0; i < 10; i++) {
    sum+=i;
  }
  out.println("<h1>sum="+sum+"</h1>");
%>
<p>这是一个jsp文档</p>
<hr>
<%
  for (int i = 0; i < 5; i++) {
%>
<h1>拆分</h1>
<%
  }
%>

jsp声明<%! %>

声明会被编译到java的类中,其他的会被写到_jspService方法中

<%!
  static {
    System.out.println("Loading");
  }
  private int globalVar=0;
  public void kun(){
    System.out.println("进入了kun方法");
  }
%>

jsp的注释无法显示在客户端

4.jsp的指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="error/500.jsp" %>      //定制错误页面
<%@ include file="文件" %>

5、九大内置对象

  • PageContext        存东西
  • Request               存东西
  • Response
  • Session                  存东西
  • Application                  [SerlvetContext]           存东西
  • config                      [ServletConfig]
  • out
  • page
  • exception
    <%
        pageContext.setAttribute("name","小ing");   //只在一个页面中有效
        request.setAttribute("name2","小明2");        //一次请求中有效
        session.setAttribute("name3","小明3");        //一次会话中有效
        application.setAttribute("name4","小明4");    //在服务器中有效
    %>

6、jsp标签,jstl标签,el表达式

el表达式:

  • 获取数据
  • 执行运算
  • 获取web开发常用对象
<!--JSTL表达式的依赖-->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!--standard标签库-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

jsp标签

<jsp:forward page="jsptag2.jsp">
    <jsp:param name="name" value="xianyan"/>
    <jsp:param name="age" value="age"/>
</jsp:forward>

jstl表达式

<%--引入jstl核心标签库 core--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入jstl核心标签库 core--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h4>If测试</h4>
<hr>

<form action="coreif.jsp" method="get">
    <%--
    el表达式获取表单中的数据
    ${param.参数名}
    --%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>

<%--判断提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="管理员欢迎您!"/>
</c:if>
<c:out value="${isAdmin}"/>


</body>
</html>

二、javaBean

实类体

javabean有特定的写法

  1. 必须有一个无参构造
  2. 属性必须私有化
  3. 必须有对应的get、set方法

一般用来左数据库映射

orm:对象关系映射

  1. 表——> 类
  2. 字段——>属性
  3. 行记录——>对象
id name age address
1 小明 10 北京
2 小明 11 天津
3 小明 12 武汉
class People{
    private int id;
    private String name;
    private int age;
    private String address;
}

class A{
    new People(1,"小明",10,"北京");
    new People(2,"小明",11,"天津");
    new People(3,"小明",12,"武汉");
}

三、mvc三层架构

什么是mvc:model view controller   模型、试图、控制器

Model

  • 业务处理:业务逻辑(service)
  • 数据持久层:CRUD(dao)

View:

  • 展示数据
  • 提供链接发起servlet请求(a,form...)

Controller(servlet)

  • 接受用户的请求(req:请求参数,session信息)
  • 交给业务层处理对应代码
  • 控制试图的跳转

登录——接受登录请求——处理用户的请求(获取用户登录的参数)——交给业务层处理登录业务(判断用户账号密码是否正确:事务)——dao层查询用户账号密码是否正确——数据库

四、过滤器(Filter)

filter:用来过滤网站的数据

filter开发步骤

  1. 导报
  2. 编写过滤器
public class CharacterEncodingFilter implements Filter {
//    初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }
//chain:链
    /*
    1.过滤中的所有代码,在过滤特定请求的时候都会执行
    2.必须要让过滤器继续同行
    * */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        System.out.println("执行前");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("执行后");
    }
//  销毁
    public void destroy() {
        System.out.println("销毁");
    }
}

用Filter实现拦截(登录拦截)

登录界面

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        获取参数
        String username = req.getParameter("username");
        if (username.equals("admin")){   //登陆成功
            req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
            resp.sendRedirect("/sys/success.jsp");
        }else {             //登陆失败
            resp.sendRedirect("/error.jsp");
        }
    }

登录成功注销界面

public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object user_session = req.getSession().getAttribute(Constant.USER_SESSION);
        if(user_session!=null){
            req.getSession().removeAttribute(Constant.USER_SESSION);
            resp.sendRedirect("/login.jsp");
        }
    }

filter拦截

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request1 = (HttpServletRequest) request;
        HttpServletResponse response1 = (HttpServletResponse) response;
        Object user_session = request1.getSession().getAttribute(Constant.USER_SESSION);
        if (user_session==null){
            response1.sendRedirect("/login.jsp");
        }
        chain.doFilter(request,response);
    }
<servlet>
        <servlet-name>loginservlet</servlet-name>
        <servlet-class>com.kun.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginservlet</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>logoutservlet</servlet-name>
        <servlet-class>com.kun.servlet.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>logoutservlet</servlet-name>
        <url-pattern>/servlet/logout</url-pattern>
    </servlet-mapping>
    
    <filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.kun.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>

JDBC

package com.kun.test;

import java.sql.*;

public class Testjdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
//        解决中文乱码
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=gbk";
        String username="root";
        String password="root";
//        加载驱动
        Class.forName("com.mysql.jdbc");
//        连接数据库
        Connection connection = DriverManager.getConnection(url, username, password);
//        向数据库发送sql的对象
        Statement statement = connection.createStatement();
//        编写sql
        String sql="select * from student.teacher";
//        执行sql
        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()){
            System.out.println("id:"+resultSet.getObject("id"));
            System.out.println("name:"+resultSet.getObject("name"));
            System.out.println("pwd:"+resultSet.getObject("pwd"));
            System.out.println("sex:"+resultSet.getObject("sex"));
            System.out.println("birthday:"+resultSet.getObject("birthday"));
            System.out.println("address:"+resultSet.getObject("address"));
            System.out.println("email:"+resultSet.getObject("email"));
            System.out.println("age1:"+resultSet.getObject("age1"));
        }
//        关闭链接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45688193/article/details/121120237