您的位置:首页 > 科技 > IT业 > 学习Java的日子 Day57 Tomcat,Serlvet,注册功能

学习Java的日子 Day57 Tomcat,Serlvet,注册功能

2024/10/5 18:27:15 来源:https://blog.csdn.net/weixin_69595694/article/details/140682546  浏览:    关键词:学习Java的日子 Day57 Tomcat,Serlvet,注册功能

Day57

1.初识Javaweb

1.1 什么是web开发

WEB,即网页的意思,它用于表示Internet主机上供外界访问的资源。

Internet上供外界访问的Web资源分为:

静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。

动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同,在Java中,动态web资源开发技术统称为Javaweb

1.2 Web容器_Tomcat

Web服务器:负责解析 HTTP 协议,解析请求数据,并发送响应数据

浏览器按照HTTP协议发送请求和数据,后台就需要一个Web服务器软件来根据HTTP协议解析请求和数据,然后把处理结果再按照HTTP协议发送给浏览器

1.3 JavaWeb应用程序

Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射

(1)Request是从客户端向服务端发出的请求对象,

(2)Response是从服务端响应给客户端的响应对象,

(3)JSP是动态网页技术,

(4)会话技术是用来存储客户端和服务端交互所产生的数据,

(5)过滤器是用来拦截客户端的请求,

(6)监听器是用来监听特定事件,

(7)Ajax、Vue、ElementUI都是属于前端技术

1.4 Web应用的组成结构

开发web应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错

在这里插入图片描述

2.编写一个web项目

1.添加web项目框架

在这里插入图片描述

在这里插入图片描述

3.上面2中右下角报黄色警告,直接点击,结跳转到这个页面

在这里插入图片描述

4.项目结构,html文件在web里建,Java代码在src中建
在这里插入图片描述

5.写完代码,配置Tomcat服务器

在这里插入图片描述

在这里插入图片描述

7.Fix修复一下

在这里插入图片描述

8.运行,结束

项目框架

在这里插入图片描述

在这里插入图片描述

在web里建一个Welcome的HTML文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 导入css代码--><link rel="stylesheet" type="text/css" href="css/imgstyle.css"></head>
<body><H1>欢迎页面</H1><img src="img/a.jfif"></body>
</html>

编写css代码

img{width:100px;height: 100px;border-radius: 50%;
}

运行结果:

在这里插入图片描述

注意:需要自己手动输出Welcome.html

将某个网页设置网站默认访问的首页

WEB-INF下的web.xml中编写以下代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><welcome-file-list><welcome-file>Weclome.html</welcome-file></welcome-file-list></web-app>

在这里插入图片描述

3.Servlet 上

3.1 什么是Servlet

Servlet是sun公司提供的一门用于开发动态web资源的技术,可以实现和客户端的交互,接收客户端****请求*和给客户端返回*响应****。

Sun公司在其API中提供了一个Servlet接口

3.2 Servlet的实现类

Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、*HttpServlet*

HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

HttpServlet在实现Servlet接口时,重写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要重写doGet或doPost方法,而不要去重写service方法

注意:Servlet是一个接口,GenericServlet实现了Servlet接口,HttpServlet在继承了GenericServlet

3.3 案例:编写注册页面

新建数据库user表

注意:是name,而不是username

在这里插入图片描述

添加数据

在这里插入图片描述

在Welcome.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 导入css代码--><link rel="stylesheet" type="text/css" href="css/imgstyle.css"></head>
<body><H1>欢迎页面</H1><img src="img/a.jfif"> <br/><a href="login.html">登录</a><a href="register.html">注册</a></body>
</html>

register.html

表单里必须写name属性,才能传给服务器

前端传给后端的数据都是字符串 string

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册页面</title>
</head>
<body><h1>注册页面</h1><form action="#" method="post">账号:<input type="text" name="username"/>  <br/>密码:<input type="text" name="password"/>  <br/>昵称:<input type="text" name="nickName"/>  <br/>年龄:<input type="text" name="age"/>  <br/>性别:<input type="radio" name="sex" value="man" checked="checked"><input type="radio" name="sex" value="woman" ><br/>爱好:<input type="checkbox" name="hobbies" value="football">足球<input type="checkbox" name="hobbies" value="basketball">篮球<input type="checkbox" name="hobbies" value="shop">购物<br/><input type="submit" value="注册"><br><input type="button" value="返回" onclick="goWeclome()"/>
</form><script type="text/javascript">function goWeclome(){window.location="Welcome.html";}
</script>
</body>
</html>

login.html(先不写)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>登录页面</h1></body>
</html>

运行一下

在这里插入图片描述

在这里插入图片描述

将Druids连接池导入到项目中,后续要操作数据库

项目结构

在这里插入图片描述

在Servlet包中建一个RegisterServlet的java文件

记得导servlet包,然后在项目结构操作一下

public class RegisterServlet extends HttpServlet {/*** 客户端发送请求给该Servlet,就会触发service()* @param req 请求对象* @param resp 响应对象*/@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("好好学习");}
}

在web.xml编写前端后端到路径

	<servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.qf.Servlet.RegisterServlet</servlet-class> <!-- 全限类名 --></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/register</url-pattern> <!-- 要加上/,前端不加/ --></servlet-mapping>

将注册页面服务器路径改成register,不要加/;在web.xml中要加/

根据左边的项目结构,分析web.xml中的代码

在这里插入图片描述

在这里插入图片描述

Servlet理解图:

在这里插入图片描述

在RegisterServlet中获取前端的name属性

hobbies特殊,因为是多选框,拿到的是多个值,用数组存储

public class RegisterServlet extends HttpServlet {/*** 客户端发送请求给该Servlet,就会触发service()* @param req 请求对象* @param resp 响应对象*/@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置编码格式req.setCharacterEncoding("UTF-8");//设置请求编码格式//        //获取请求中的数据 -- 方式一
//        String name = req.getParameter("username"); 
//        String password = req.getParameter("password");
//        String nickName = req.getParameter("nickName");
//        String sex = req.getParameter("sex");
//        String age = req.getParameter("age");
//        String[] hobbies = req.getParameterValues("hobbies");
//
//        System.out.println(name);
//        System.out.println(password);
//        System.out.println(nickName);
//        System.out.println(sex);
//        System.out.println(age);
//        System.out.println(Arrays.toString(hobbies));//获取请求中的数据 -- 方式二   用这个Map<String, String[]> parameterMap = req.getParameterMap();//获取映射对象Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();for (Map.Entry<String, String[]> entry:entries){System.out.println(entry.getKey()+"--"+Arrays.toString(entry.getValue()));}}
}

在这里插入图片描述

方式一:

在这里插入图片描述

方式二:

在这里插入图片描述

封装student实体类

package com.qf.pojo;public class User {private String username;private String password;private String nickName;private String sex;private int age;private String hobbies;//无参构造,有参构造,get,set,toString方法省略
}

注册页面代码

注意:

sql语句中的不是username,而是name

要设置编码格式

public class RegisterServlet extends HttpServlet {/*** 客户端发送请求给该Servlet,就会触发service()* @param req 请求对象* @param resp 响应对象*/@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置编码格式req.setCharacterEncoding("UTF-8");//设置请求编码格式resp.setContentType("text/html;charset=UTF-8");//设置响应编码格式//获取请求中的数据 -- 方式一String username = req.getParameter("username");String password = req.getParameter("password");String nickName = req.getParameter("nickName");String sex = req.getParameter("sex");String age = req.getParameter("age");String[] hobbies = req.getParameterValues("hobbies");try {User user = DBUtil.commonQueryObj(User.class, "select * from user where name=?", username); //获取提交查询对象if (user==null){//允许注册//hobbies是数组,拼接字符串StringBuffer sb = new StringBuffer();for (String hobby:hobbies){if(sb.length() != 0){sb.append(",");}sb.append(hobby);}//注册成功,将数据添加到数据库中DBUtil.commonUpdate("insert into user(name,password,nickName,sex,age,hobbies) values(?,?,?,?,?,?)",username,password,nickName,sex,age,sb.toString());resp.getWriter().println("<h1>注册成功<h1/>");}else {//不允许注册resp.getWriter().println("<h1>注册失败,账号已重复<h1/>");}} catch (SQLException e) {throw new RuntimeException(e);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}
}

运行结果

在这里插入图片描述

在这里插入图片描述

总结

1.Tomcat
理解什么是动态Web资源
配置。。。。

2.Serlvet
理解
Servlet、GenericServlet、HttpServlet的关系
Servlet如何创建:
a 创建类(RegisterServlet),继承HttpServlet
b 重写service方法
c 在web.xml中配置
学习注册功能

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com