java web 知识点 & 项目结构 & 代码示例
概念
第一部分
- 请求转发在服务器内部完成,地址栏URL不变,适合数据共享;而请求重定向则在客户端完成,导致URL变化,适合需要通知用户访问新页面的场景。
- GET一般用于获取数据,适合用于不改变服务器状态的请求,适合传输少量数据。
POST用于提交数据并可能改变服务器状态,适合传输大量数据和敏感信息。(数据大小无限制,请求方式更安全) - C/S架构的客户端程序直接与数据库服务器端建立连接
B/S架构是客户机上无需安装专门的客户端程序,程序中的业务逻辑处理都集中到了Web服务器上,浏览器并不是直接与数据库服务器建立连接,而是通过Web服务器与数据库服务器需要建立连接。 - Include指令:只有一个file属性,用于指定要包含文件的路径。
css是一种用于(增强)控制网页样式并允许将样式信息与网页内容分离的标签性语言。
Session是指用户与服务器之间的对话,通常从用户登录开始,到用户登出或会话超时结束。它用来存储与用户相关的数据,如身份验证信息和用户偏好设置。
第二部分
- 请列举5个JSP内置对象。
1.request:表示客户端请求的信息,包括请求参数、请求头等。
2.response:用于向客户端发送响应,包括设置响应类型、响应头等。
3.session:用于管理用户的会话信息,允许在多个请求间存储用户信息。
4.application:代表整个Web应用程序的上下文,用于在应用范围内存储数据。
5.out:用于向客户端输出内容,通常是输出HTML或文本信息。 - 请简述JavaScript的主要特点。
解释型语言:JavaScript不需要编译,直接由浏览器解释执行。
基于对象:支持面向对象编程,使用对象和原型来组织代码。
动态类型:变量类型可以在运行时动态变更,支持多种数据类型。
事件驱动:可以通过事件监听器响应用户交互(例如鼠标点击、键盘输入等)。
跨平台:可以在各种操作系统和浏览器上运行,具备良好的兼容性。 - 请简述监听器的概念,并列举出三要素。
概念:监听器是Java EE Web应用中的一种组件,它用于监听特定事件(如会话创建、销毁或上下文变化),并对这些事件进行处理。
三要素:1.事件源:触发事件的对象(例如ServletContext、HttpSession等)。
2.事件类型:监听器感兴趣的事件类型(如会话创建、会话销毁等)。
3.事件处理:监听器对发生事件时执行的具体操作,通过实现相应的接口来定义处理逻辑。 - 请描述5个XMLHttpRequest 对象常用属性及其作用。
1.readyState:表示请求的当前状态,值从0到4逐步变化,最后的状态4表示请求完成。
2.status:返回HTTP状态码,用于检查请求是否成功(如200表示成功,404表示未找到)。
3.responseText:包含服务器返回的文本响应数据,通常是HTML或JSON格式的字符串。
4.responseXML:当服务器返回XML格式的数据时,返回响应的XML文档。
5.onreadystatechange:一个事件处理程序,它在 readyState 变化时调用,可以用于检查请求进度并处理响应。 - 请简述Servlet的5个主要任务。
1.接收请求:Servlet接受来自客户端的HTTP请求,并获取请求参数和信息。
2.处理请求:根据业务逻辑处理请求,例如处理表单数据、访问数据库等。
3.生成响应:构建HTTP响应,包括设置响应类型、数据内容等。
4.发送响应:将生成的响应发送回客户端,通常为HTML页面或JSON数据。
5.管理会话:维护用户会话信息,通过HttpSession对象存储用户数据以在多个请求中共享。
目录结构
servlet代码
package cn.edu.xaut.servlet;
import cn.edu.xaut.bean.UserBean;
import cn.edu.xaut.dao.UserDao;
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.Date;
import java.sql.SQLException;
@WebServlet(name = "RegisterServlet", urlPatterns = {"/RegisterServlet"})
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理字符编码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取表单参数
String username = request.getParameter("username");
String email = request.getParameter("email");
String pwd = request.getParameter("pwd");
//创建JavaBean
UserBean user = new UserBean();
user.setName(username);
user.setEmail(email);
user.setPassword(pwd);
user.setRegisterDate(new Date(System.currentTimeMillis()));
//使用userDao插入数据
UserDao userDao = new UserDao();
try {
userDao.insertUser(user);
} catch (Exception e) {
throw new RuntimeException(e);
}
// 跳转到registerSuccess.jsp进行显示
request.setAttribute("userbean", user);
request.getRequestDispatcher("registerSuccess.jsp").forward(request,response);
}
}
Bean代码
package cn.edu.xaut.bean;
import java.sql.Date;
public class UserBean {
private int id;
private String name;
private String password;
private String email;
private Date registerDate;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", registerDate=" + registerDate +
'}';
}
}
Dao代码
package cn.edu.xaut.dao;
import cn.edu.xaut.bean.UserBean;
import cn.edu.xaut.util.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UserDao {
public boolean insertUser(UserBean user) throws SQLException, ClassNotFoundException {
// 1. 获取连接
Connection conn = JDBCUtil.getConnection();
// 2. 声明sql语句- preparedStatement
String sql = "insert into tb_users (name,password,email,registerDate)" +
"values (?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
// 3. 对预编译的sql语句设置参数
ps.setString(1,user.getName());
ps.setString(2, user.getPassword());
ps.setString(3, user.getEmail());
ps.setDate(4, user.getRegisterDate());
// 4. 执行sql语句
int num = ps.executeUpdate();
// 5. 释放资源
JDBCUtil.release(ps,conn);
if(num > 0 )
return true;
return false;
}
public UserBean findUserByNameAndPassword(String name, String password){
UserBean user = null;
String sql = "select * from tb_users where name = '" + name + "' and password = '" + password +"'";
return user;
}
}
JDBC代码
package cn.edu.xaut.util;
import java.sql.*;
public class JDBCUtil {
/* 返回数据库连接对象*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
Connection conn = null;
// 1. 加载数据库的驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库的连接
String url = "jdbc:mysql://localhost:3306/test6?serverTimezone=GMT%2b8";
String dbUsername = "root";
String dbPassword = "123456";
conn = DriverManager.getConnection(url, dbUsername, dbPassword);
return conn;
}
/*释放数据库资源 - 插入数据时*/
public static void release(PreparedStatement ps, Connection conn) throws SQLException {
if(ps != null){
ps.close();
ps = null;
}
if(conn != null){
conn.close();
conn = null;
}
}
/*释放数据库资源 - 查询数据时*/
public static void release(Statement st, ResultSet rs, Connection conn) throws SQLException {
if(st != null){
st.close();
st = null;
}
if(rs != null){
rs.close();
rs = null;
}
if(conn != null){
conn.close();
conn = null;
}
}
}