美文网首页
JavaWeb入门——JSP

JavaWeb入门——JSP

作者: ironycc | 来源:发表于2020-05-07 17:32 被阅读0次

    1.jsp环境搭建及入门

    1.1CS架构和BS架构

    1.2Tomcat解压后目录

    1.3Tomcat配置

    1.配置JAVA_HOME,JDK
    2.配置CATALINA_HOME
    双击startup.bat

    1.4常见状态码

    200:一切正常
    300/301:页面重定向(跳转)
    404:资源不存在
    403:权限不足(如果访问a目录,但是a设置不可见)
    500:服务器内部错误(代码有误)
    其他编码:要积累

    2.使用eclipse快速开发jsp

    2.1字符集编码问题

    编码分类:
    设置jsp文件的编码(jsp文件中的pageEncoding属性):jsp -> java
    设置浏览器读取jsp文件的编码(jsp文件的content属性)
    一般将上述设置为一致的编码,UTF-8
    文本编码
    一般将eclipse中的文件统一设置为UTF-8

    2.2jsp的页面元素

    1.脚本Scriptlet
    i.
    <%
    局部变量、Java语句
    %>
    ii.
    <%!
    全局变量、定义方法
    %>
    iii.
    <%= 输出表达式%>
    一般而言,修改web.xml、配置文件、java 需要重启Tomcat服务
    但是如果修改Jsp、HTML、CSS、js、 不需要重启

    注意:out.println()不能回车,要想回车:“
    ”,out.print() <%= %>可以直接解析HTML代码

    2.指令
    page指令
    <%@page ...%>
    page指定的属性:
    language:jsp页面使用的脚本语言
    import:导入的类
    pageEncoding:jsp文件自身编码
    contentType:浏览器解析jsp的编码

    3.注释
    HTML注释
    java注释 // /* */
    jsp注释 <%-- -->

    4.JSP九大内置对象(自带的,不需要new也能使用的对象)
    out:向客户端输出内容

    REQUEST

    request:请求对象;存储“客户端向服务端发送的请求信息”

    String getParameter(String name):根据请求的字段名key,返回字段值value
    String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value   (CheckBox)
    void setCharacterEncoding(“编码格式utf-8”):设置post请求编码(Tomcat7及以前默认为iso-8859-1,Tomcat8以后改为了utf-8)
    getRequestDispatcher("b.jsp").forward(request, response); 请求转发的方式跳转页面A -> B
    getServerContext():获取项目的ServletContext对象
    

    示例:
    register.jsp,show.jsp
    [http://localhost:8888/MyJspProject/show.jsp?uname=wjc&upwd=diang520&uage=21&uhobbies=%E8%B6%B3%E7%90%83&uhobbies=%E4%B9%92%E4%B9%93%E7%90%83]
    链接/文件>?参数名1=参数值1&参数名2=参数值2&。。。
    get提交方式:method=“get”和地址栏、超链接(<a herf="xx">)请求方式 默认都属于get提交方式
    get与post请求方式的区别:
    1.get方式 在地址栏现实请求信息;post则不会。但是地址栏能容纳的信息有限,4-5KB;如果请求大文件,如图片等,会报错
    2.文件上传操作,必须是post,根本原因还是1

    5.统一请求的编码request
    get方式请求如果出现乱码,解决(tomcat7默认编码为iso-8859-1
    1.统一每一个变量的编码_不推荐
    使用new String(旧编码,新编码);
    eg:
    name = new String(name.getBytes("iso-8859-1"), "utf-8");
    2.修改server.xml,一次性的更改Tomcat默认的get提交方式编码(UTF-8)
    建议使用Tomcat时,首先在server.xml中统一get方式的编码 URIEncoding="UTF-8"
    (以上仅针对get
    post
    void setCharacterEncoding(“utf-8”)

    RESPONSE



    Cookie


    check.jsp
    <body>
        <%
            request.setCharacterEncoding("utf-8");
            String name = request.getParameter("uname");
            String pwd = request.getParameter("uname");
            /* if(name.equals("zs") && pwd.equals("abc")){
                response.sendRedirect("success.jsp");
            }else{
                out.println("用户名或密码错误");
            } */
            
            //将用户名加入到Cookie中
            Cookie cookie = new Cookie("name",name);//不要中文
            response.addCookie(cookie);
            
            response.sendRedirect("result.jsp");
            
        %>
    </body>
    login.jsp
    <body>
        <%!
            String uname;
        %>
        <%
            Cookie[] cookies = request.getCookies();
            for(Cookie cookie: cookies){
                if(cookie.getName().equals("uname")){
                    uname = cookie.getValue();
                }
            }
        
        %>
        <form action="check.jsp" method="post">
            用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname)%>"><br/>
            密码:<input type="password" name="upwd"/><br/>
            <input type="submit" value="登录">
        </form>
    </body>
    

    SESSION

    session机制



    1.session存储在服务端
    2.session是在同一个用户(客户端)请求时共享
    3.实现机制:第一次客户请求时,产生一个sessionID,并复制给cookie的jsessionID 然后发给客户端
    session方法:
    String getID():获取sessionID
    boolean isNEW():判断是否是新用户
    void invalidate():使session失效(退出登录、注销)

    void setAttribute();
    Object getAttribute();

    void setMaxInactiveInterval(秒) : 设置最大有效非活动时间
    int getMaxInactiveInterval():获取最大有效非活动时间


    四种范围对象作用域


    3.JDBC原理

    3.1 JDBC

    JDBC:Java DataBase Conectivity 可以为多种关系型数据库DBMS提供统一的访问接口


    3.2 JDBC API主要功能


    3.3JDBC访问数据库步骤

    3.4数据库驱动

    jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC

    1~3行的驱动类分别为 Oracle MySQL SQLServer



    3.5 Statement


    Statement 与 PreparedStatement的区别

    2.性能更强,前者多次execute需要多次编译sql语句
    而后者仅一次编译

    3.6CallableStatement调用存储过程、存储函数

    3.7JDBC总结



    3.8JDBC处理大文本CLOB数据及二进制BLOB数据



    4.JSP访问数据库


    4.1JavaBean示例

    WebProject/WebContent/WEB-INF/check.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="com.wjc.LoginDao" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            String name = request.getParameter("uname");
            String pwd = request.getParameter("upwd");
            LoginDao dao = new LoginDao();
            int result = dao.login(name, pwd);
            if(result > 0){
                out.print("登陆成功");
            }else if(result == 0){
                out.print("用户名或密码错误");
            }else{
                out.print("系统异常");
            }
        
        %>
    </body>
    </html>
    
    
    WebProject/Java Resources/src/com.wjc.LoginDao.java
    package com.wjc;
    
    import java.sql.*;
    
    public class LoginDao {
        public int login(String name, String pwd) { //1:登陆成功 0:用户名或密码错误 -1:系统错误
            final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
            final String UNAME = "root";
            final String PWD = "diang520";
            
            Statement stmt = null;
            Connection connection = null;
            ResultSet rs = null;
            
            try {
                // 1.导入驱动,加载具体的驱动类
                Class.forName("com.mysql.cj.jdbc.Driver");// 加载具体的驱动类
                // 2.与数据库建立链接
                connection = DriverManager.getConnection(URL, UNAME, PWD);
                
        //      String name = request.getParameter("uname");
        //      String pwd = request.getParameter("upwd");
                
                // 3.发送SQL,执行(查)
                stmt = connection.createStatement();
                String sql = "select count(*) from login where name='"+name+"' and password='"+pwd+"';";
                //执行SQL,增删改为executeUpdate(),查为executeQuery();
                rs = stmt.executeQuery(sql);
        
                int count = -1;
                
                if(rs.next()){
                    count = rs.getInt(1);
                }
        //      if(count > 0){
        //          out.println("登录成功");
        //      }else{
        //          out.println("登录失败");
        //      }
                return count;
            } catch (Exception e) {
                e.printStackTrace();
                return -1;
            } finally {
                if(rs != null)
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                if(stmt != null)
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }// 对象、方法
                if(connection != null)
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:JavaWeb入门——JSP

          本文链接:https://www.haomeiwen.com/subject/uugightx.html