Java Web 实习笔记(二)

这篇博客回顾了Java Web实习的内容,包括HTTP协议的请求和响应数据包,讲解了如何使用Servlet处理HTTP协议。还介绍了如何构建登录功能,涉及login.html、LoginServlet的创建和web.xml配置。此外,博主探讨了JSP的组成部分、重定向与转发的区别,并概述了关系型数据库的ORM映射和JDBC连接数据库的基本步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java web实习笔记目录导航

1. Java Web 实习笔记(一)

2.Java  Web 实习笔记(二)

3.Java Web 实习笔记(三)

4.Java Web 实习笔记(四)

笔记(一)复习:

新建一个项目,创建一个新的servlet(SecondServlet,不要直接叫servlet)配置好web.xml,部署到Tomcat服务器上,通过浏览器访问到该servlet

一、HTTP协议

1.一种数据传输格式

2.数据包(报文)的形式

(1)请求数据包

    ①浏览器:服务器发送请求时

    ②请求行:请求浏览器以及地址信息

    ③消息头:以一种name-value的形式存在的数据

    ④实体内容:实体参数

(2)相应数据包

    ①服务器:服浏览器发送请求时

    ②状态行:信息提示码-状态码

    ③消息头

    ④实体内容

二、如何处理HTTP协议

1.使用Servlet

  (1)任何的一个http的连接在传输数据时都会被分解为两个部分

    ①请求(HttpServletRequest)

    ②接受(HttpServletReseponse)

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.Response;


/**
 * @author HMM
 * 所有自定义的servlet 都是servlet接口的实现类
 *
 */
public class FirstServlet extends HttpServlet{
	//重写service方法
	/*
	 * 此方法中有两个参数
	 * HttpServletRequest 请求 请求数据报数据
	 * HttpServletResponse 响应 响应数据报的数据
	 * */
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		System.out.println("这是一个servlet,已经接收到前端的请求");
		//当前访问此servlet的网址 http://localhost:8080/day01/firstServlet
		String uri=request.getRequestURI();
		System.out.println(uri);
		//设置响应的编码格式,一定要在输出流之前,不然会乱码
		response.setContentType("text/html;charset=UTF-8");
		//做出响应 得到响应对象的网络输出流
		PrintWriter out =response.getWriter();
		out.println("你好啊");
		
	}
}

三、写登录

1.登录界面

(1).新建login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
	<!-- 
	method提交方式
	get:路径传参,数据会附带在URL的尾部,安全性较低,数据传输量较少(2kB左右),请求数据
	post:实体内容传参,安全性较高(默认不受限制),接收数据
	
	action:表单
	 -->
	<form action="login" method="post">
		账号:<input type="text" name="code"><br>
		密码:<input type="password" name="pwd"><br>
		<input type="submit" value="登录">
	</form>
</body>
</html>

注:如果是get方法

(2).新建LoginServlet

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		//得到请求参数
		String code=request.getParameter("code");
		String pwd=request.getParameter("pwd");
		//设置请求的编码格式,一定要在输出流之前,不然会乱码
		response.setContentType("text/html;charset=UTF-8");
		//做出相应,得到响应对象的网络输出流
		PrintWriter out=response.getWriter();
		if(code.equals("hmm")&&pwd.equals("123")) {
			out.println("COME ON BABY!!");
		}else {
			out.println("啊哦...");
		}
	}
	

}

(3)在web.xml里添加配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>day01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 在浏览器端发送请求时,把这个请求基于HTTP协议发送到服务器,
  在服务器内部通过servlet来处理HTTP协议,在分配到相应的servlet之前,会在
  web.xml文件中进行请求的路径分析 -->
  
  <servlet>
 	 <!-- 3.找到之后找相应的servlet servlet class  -->
  	<servlet-name>first</servlet-name>
  	<!-- 4.servlet 的完整路径(包括包名) -->
  	<servlet-class>web.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<!-- 2.找到别名之后根据相应的别名找到servlet中的别名  -->
  	<servlet-name>first</servlet-name>
	<!-- 1. 网址,网名 ,根据网名找到相对应的别名servlet-name -->
	<url-pattern>/firstServlet</url-pattern>
  </servlet-mapping>
  
   
  <servlet>
  	<servlet-name>login</servlet-name>
  	<servlet-class>web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>login</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
</web-app>

三、JSP

四、JSP

1.jsp的组成部分

(1)HTML(主体部分)
(2)java代码

    ①java小脚本

    ②java表达式

    ③标签

(3)jsp特有语法

    ①jsp的标签 page include taglib

    ②el表达式:简化了java表达式

    ③jstl标签:简化了java代码

2.什么是JSP

(1)Servlet的页面表示形式,本质上是一个java代码(Servlet),jsp在架子啊时会先转换为java代码,再编译运行

 

3.WEB根目录下的文件和WEB-INF下的文件的区别

    WEB-INF下的文件只能通过服务器访问(转发)

五、重定向和转发

1.重定向

服务器立刻发出一个响应给浏览器,发出的是一个302状态码和一个消息头(location=url)

(1)重定向的地址必须是浏览器能访问到地址,不能是WEB-INF下的,但是可以是相同服务器的其他网址或者其他服务器地址(重定向的地址实际上就是)

2.转发

同一个服务器内部进行的,将未完成的请求转交给下一个组件(web组件:Server,Filter,...)继续处理

3.区别

(1)重定向实际是浏览器进行了2次请求,转发只是一次请求

(2)地址栏的地址,重定向是改变的,但是转发没有改变

(3)重定向的地址(看上面),转发的地址只能是当前服务器地址(因为转发是在服务器内部进行的)

六、关系型数据库

1.遵循ORM映射

(1)数据库中的一张表对应Java中的一个实体类

(2)数据库中的一个字段名对应一个实体类中的成员变量

(3)数据库中的表数据,一条数据对应一个实体类对象

2.创建实体类

(1)重写toString方法

(2)添加无参和有参构造

  (3)重写equals和hashCode方法

 (4)实现序列化接口并生成唯一标识

package com.hmm.entity;

import java.io.Serializable;

public class User implements Serializable{

	private static final long serialVersionUID = -1413125173463696530L;
	private Integer userId;
	private String userName;
	private String userPassword;
	
	//无参构造
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	//有参构造
	public User(Integer userId, String userName, String userPassword) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userPassword = userPassword;
	}
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((userId == null) ? 0 : userId.hashCode());
		result = prime * result + ((userName == null) ? 0 : userName.hashCode());
		result = prime * result + ((userPassword == null) ? 0 : userPassword.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (userId == null) {
			if (other.userId != null)
				return false;
		} else if (!userId.equals(other.userId))
			return false;
		if (userName == null) {
			if (other.userName != null)
				return false;
		} else if (!userName.equals(other.userName))
			return false;
		if (userPassword == null) {
			if (other.userPassword != null)
				return false;
		} else if (!userPassword.equals(other.userPassword))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + ", userPassword=" + userPassword + "]";
	}
	
	
}

 

3.使用JDBC连接数据库

 

(1)DBUtils.java

package com.hmm.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;


import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBUtils {
	private static DataSource dataSource;

	static {
		try {
			InputStream is = DBUtils.class.getClassLoader()
					.getResourceAsStream("db.properties");
			Properties p = new Properties();
			p.load(is);
	
			dataSource = BasicDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection() {
		try {
			return getDataSource().getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	public static DataSource getDataSource() {
		return dataSource;
	}
	public static void closeConnection(Connection conn){
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

  (2)db.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hmm7
username=root
password=123456
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode\=true;characterEncoding\=utf8

  (3)jar包(可自行下载)

jar包1下载地址:https://download.youkuaiyun.com/download/mogot7/10474753

(4)测试类:TestJdbc.java

package com.hmm.test;

import org.junit.Test;

import com.hmm.util.DBUtils;

public class TestJdbc {
	@Test
	public void test01() {
		System.out.println(DBUtils.getConnection());
	}
}

 

 

 

测试成功

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值