软件的结构
C/S (Client - Server 客户端-服务器端)
特点:
1)必须下载特定的客户端程序。
2)服务器端升级,客户端升级。
B/S (Broswer -Server 浏览器端- 服务器端)
特点:
1)不需要安装特定的客户端(只需要安装浏览器即可)
2)服务器端升级,浏览器不需要升级
总结:需要安装客户端的是C/S结构,通过浏览器可以直接打开的是B/S结构
javaweb的程序就是B/S软件结构。
工具:IDEA,Tomcat
Servlet
Servlet就是不同的用户拼接动态网页的组件。
Servlet运行在服务端的Java小程序,是sun公司提供的一套规范(接口),用来处理客户端的请求、响应动态资源给浏览器的。
JSP
Servlet的作用: 用java语言开发动态资源的技术
JSP的作用:用java语言(+html语言)开发动态资源的技术
JSP就是servlet
JSP模板:JSP页面中的html代码就是JSP的模板
JSP的脚本:(脚本就是一段代码)
语法:<%java代码 %>
作用: 执行java代码
JSP表达式:
语法:<%=变量或表达式%>
作用: 向浏览器输出变量的值或表达式计算的结果
项目建立
1.new project
创建成功后添加框架支持
实例
package com.test.web;
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 java.io.IOException;
@WebServlet("/hello")//当跳转到./hello的时候自动运行下列代码
public class hello extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello.service");
}
}
运行成功自动弹出浏览器打开web软件包中的index.jsp
下面拿我之前的JDBC连接数据库配合servlet将数据库的表打印在浏览器页面上
Hello.java
package com.zhp.web;
import javax.servlet.Servlet;
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 java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
@WebServlet("/hello")
public class Hello extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello.service");
ResultSet resultSet = null;
PreparedStatement statement = null;
Connection connection = null;
ArrayList<Student> list = null;
try {
connection = JDBCUtil.getConnection();
String sql = "select id,name,age,gender from student";
statement = connection.prepareStatement(sql);
resultSet = statement.executeQuery();
list = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
Student student = new Student(id, name, age, gender);
list.add(student);
}
for (Student student : list) {
System.out.println(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtil.close(connection, statement, resultSet);
}
req.setAttribute("list", list);
req.getRequestDispatcher("/Student_list.jsp").forward(req, resp);
}
}
Student.java
package com.zhp.web;
public class Student {
private int id;
private String name;
private int age;
private String gender;
public Student(int id, String name, int age, String gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
JDBCUtil.java
package com.zhp.web;
import java.sql.*;
public class JDBCUtil {
private JDBCUtil() {
}
//静态代码块,只执行一次,保证驱动只加载一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws ClassNotFoundException, SQLException {
//Class.forName("com.mysql.jdbc.Driver");//每次调用都要加载驱动,很浪费,卸载静态代码块中只加载一次即可
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8", "root", "");
return connection;
}
public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
if (resultSet != null)
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (preparedStatement != null)
try {
preparedStatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (connection != null)
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
Student_list.jsp
<%@ page import="java.util.List" %>
<%@ page import="com.zhp.web.Student" %>
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: zhp10
Date: 2021/8/10
Time: 16:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<style type="text/css">
div{
width: 500px;
margin: 0 auto;
}
</style>
<title>Title</title>
</head>
<body>
<div>
<%-- ${list}--%>
<table border="1" cellspacing="0">
<tr>
<td>ID</td>
<td>名字</td>
<td>年龄</td>
<td>性别</td>
</tr>
<%
// 在这里面可以写java代码
ArrayList<Student> list = (ArrayList<Student>) request.getAttribute("list");
for (Student student : list) {
%>
<tr>
<td><%=student.getId()%></td>
<td><%=student.getName()%></td>
<td><%=student.getAge()%></td>
<td><%=student.getGender()%></td>
</tr>
<%
}
%>
</table>
</div>
<%-- ${list}--%>
</body>
</html>
通过访问./hello运行servlet的service将表的数据写入jsp打印到浏览器页面中;
打印成功