# JavaWeb 笔记

# 配置环境

# 下载 Tomcat

Tomcat (opens new window)

# 配置 Tomcat

导入 servlet-api.jspjsp-api.jar

# 配置资源目录(可选)

新建 \web\WEB-INF\class 目录 : 设置编译目录 \web\WEB-INF\lib 目录 : 设置包路径

# 解决中文乱码问题

Idea:

  1. 文件-设置-构建、执行、部署-编译器-Java 编译器-附加命令行参数: -encoding utf-8
  2. idea64.exe.vmoptions : 末尾加上 -Dfile.encoding=UTF-8 Tomcat 运行配置:虚拟机选项: -Dfile.encoding=UTF-8

# 创建项目

  1. Idea-菜单-文件-新建-项目
  2. 选择 Java Enterprise,选中Web Application
  3. 点击确定

# 脚本元素

# 脚本段

<%

%>

# 声明方法

<%!
public 方法名(){

}
%>

# 表达式(计算属性)

<%=
1 + 1
getDate()
%>

提示

表达式不是完整的语句,不能加;

# 指令

# page 指令

用来设定 JSP 页面的全局属性和相关功能 作用于整个 JSP 文件通常放到 JSP 页面开始的位置

一个 JSP 文件可以包含多个 page 指令,指令之间是独立的。 除了 import 和 pageEncoding 属性以外,每个属性只能定义一-次

<%@ page info="JPS文件描述信息"%>
<!--设置编码(比contentType优先级高)-->
<%@ page pageEncoding="GBK|utf-8" %>
<!--是否开启session(默认为true)-->
<%@ page session="true|false" %>
<%@ page import="java.text.*" %>
<!--指定错误异常处理页面-->
<%@ page errorPage="XXX.jsp" %>
<!--设置当前页面为异常处理页面-->
<%@ page isErrorPage="true"%>
<%@ page %>
<%@ page %>
<%@ page %>

# include 指令

向页面插入静态文件(内容)

<%@ include file="URL"%>

# 动作元素

# include

在当前页面中加入静态/动态资源

<jsp:include page="URL">

提示

include 指令的区别是include 动作支持动态资源

# action

# frward

把当前的 JSP 页面重新定向到另一个页面上

<jsp:forward page="重定向的页面">
  <jsp:param name="name" value="value"/>
</jsp:forward>

# taglib 指令

# 注释

<%--注释内容--%>

# 九大内置对象

# Out 对象

用于客户端和浏览器输出数据

# Request 对象

请求对象,封装了客户端和浏览器的各种信息

request.setAttribute("键",)
// 设置字符编码
request.setCharacterEncoding("utf-8");
//getScheme()-协议名  getServerName()-localhost getServerPort()-端口号
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/";
当前页面的URL:<%=basePath%><br />
请求方式:<%=request.getMethod()%><br />
路径:<%=request.getRequestURI()%><br />
协议名称:<%=request.getProtocol()%><br />
表单提交的属性值:<%=request.getParameter("uName")%><br />
设值与取值:<%=request.getAttribute("aa")%>
输出:
当前页面的URL:http://localhost:8080/
请求方式:GET
路径:/res1.jsp
协议名称:HTTP/1.1
表单提交的属性值:null
设值与取值:2

# Response 对象

响应对象,封装的服务器的各种信息

# Exception 对象

封装了 jsp 运行时的异常和错误

# Config 对象

封装了配置信息

# Page 对象

类似 Java 的 this,谁用就是谁,指是的当前页面,类似于“我”

# Session

Session 用于存储数据,存储在浏览器中,关闭浏览器即销毁

# 设置

request.getSession().setAttribute("Session名",值);

# 获取

String[] 值 = (String[])request.getSession().getAttribute("Session名");

# Application

application 用于存储数据,存储在服务器的内存中,重启服务器即销毁

# 设置

application.setAttribute("标识符", 值);

# 获取

application.getAttribute("标识符");

# PageContext

可以得到所有的 jsp 对象

# Cookies

Cookies 用于存储数据,存储在客户端硬盘中,用户清理浏览器垃圾即销毁

# 设置

Cookie cookie = new Cookie("标识符",值);
//设置cookies的生命周期
cookie.setMaxAge(3*24*60*60);
response.addCookie(cookie);

# 获取

Cookie[] cookies = request.getCookies();
for(int i = 0; i < cookies.length; i++){
  if (cookies[i].getName().equals("标识符")){
    out.print(Integer.parseInt(cookies[i].getValue()))
    break;
  }
}

# Servlet

Servlet 是用来响应客户端网路请求(http 请求)的服务器端 Java 程序,在 MVC 开发模式中担任控制层

# 创建

src\Servlet 名称.java

public class Servlet名称 extends HttpServlet {
    public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //设置字符编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter o = resp.getWriter();
        String uri = req.getRequestURI();
        if (uri.equals("/跳转页名.do")) {
            String 参数名 = req.getParameter("参数名");
            o.print(参数名);
        } else if (uri.equals("/跳转页名.do")) {
            String 参数名 = req.getParameter("参数名");
            o.print(参数名);
        }
    }
}

# 声明

\web\WEB-INF\web.xml

<servlet>
  <servlet-name>Servlet名称</servlet-name>
  <servlet-class>action.AjaxSer</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Servlet名称</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

# 使用

<form action="跳转页名.do" method="post">
</form>

# MySQL 数据库

# 连接数据库

<%
try{
  Class.forName("com.mysql.cj.jdbc.Driver");
  } catch(ClassNotFoundException e){
    out.print("装载驱动程序失败");
  }
try {
  con=DriverManager.getConnection("jdbc:mysql://数据库地址:3306/数据库名?useSSL=FALSE&serverTimezone=UTC","用户名","密码");//3
  } catch (SQLException e) {
    out.print("链接数据库失败");
    out.print("<br>错误信息:" + e);
    e.printStackTrace();
}
%>

# 查询数据

<%
try {
  sql = con.createStatement();//4
  rs=sql.executeQuery("SELECT * FROM 表名");//5
} catch (SQLException e) {
  out.print("<br>运行SQL语句失败");
  e.printStackTrace();
}
while(rs.next()){
  out.print(rs.getString(1));
  out.print(rs.getString(2));
  out.print(rs.getString("字段名"));
}
rs.close();
sql.close();
%>

# 增加数据

<%
	String sql="insert into 表名 values(?,?)";
	PreparedStatement pstmt = con.prepareStatement(sql);
	pstmt.setString(1, 字段名1);
	pstmt.setString(2, 字段名2);
	if(pstmt.executeUpdate() == 1){
		//增加成功
	}
	pstmt.close();
	con.close();
%>

# 修改数据

<%
String sql="update 表名 set 字段名=?,字段名=? where 字段名=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, 字段值);
pstmt.setString(2, 字段值);
pstmt.setString(3, 字段值);
if(pstmt.executeUpdate() == 1){
  //修改成功
}
pstmt.close();
con.close();
%>

# 删除数据

<%
String sql="delete from 表名 where 字段名=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 字段值);
if(pstmt.executeUpdate() == 1){
  //删除成功
}
pstmt.close();
con.close();
%>

# Oracle 数据库

# 连接数据库

//加载类,并执行类中的静态代码块
Class.forName("oracle.jdbc.OracleDriver");
//连接数据库
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@数据库地址:1521:XE", "用户名", "密码");

# 增加数据

String sql = "insert into 表名 values (?,?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, 值);
preparedStatement.setString(2, "值");

preparedStatement.executeUpdate();

# 删除数据

String sql = "DELETE FROM 表名 WHERE 字段值=?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, "值");
preparedStatement.executeUpdate();

# 查询数据

String sql = "select * from 表名 where 字段名=?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, 值);
ResultSet rs = preparedStatement.executeQuery();
white (rs.next()) {
  System.out.println(rs.getInt("字段名"));
  System.out.println(rs.getString("字段名"));
}

# 修改数据

String sql = "Update 表名 Set 字段名=? where 字段名=?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, 值);
preparedStatement.setString(2, "值");

preparedStatement.executeUpdate();
最后更新: 2021/10/8 20:10:30