JavaWeb入门——JSP

2020-05-07  本文已影响0人  ironycc

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();
                }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读