实现使用HttpServlet完成登录注册页面

第一章使用IDEA开发Servlet

1.怎么编写Servlet类

使用Servlet创建动态网页的第一步,就是创建Servlet类

Servlet 规范的最顶层是一个名为 javax.servlet.Servlet 的接口,所有的 Servlet 类都要直接或者间接地实现该接口。直接实现 Serviet接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为 GenericServlet 和HtpServlet。

因此,创建Servlet类有如下三种方式:

  1. 实现javax.servlet.Servlet 接口,重写其全部方法。

  1. 继承javax.servlet.GenericServlet抽象类,重写service()方法。

  1. 继承javaxservlethttp.HttpServlet抽象类,重写doGet()或doPost0)方法。

一般第三种方式使用最多。

2.Servlet、GenericServlet 、HttpServlet三者的关系

  • GenericServlet 是实现了Servlet接口的抽象类。

  • HttpServlet是GenericServlet 的子类,具有 GenericServlet 的一切特性。

  • Servlet程序(MyServlet 类)是一个实现了 Servlet 接口的Java类。

  • MyServlet为自己编写的Servlet类

3.核心API

Servlet就是实现了Servlet接口的类,它由Web服务器创建并调用,用于接收和响应用户的请求,

在Servlet接口中定义了五个抽象方法

方法说明

说明

init(ServletConfig config)

Servlet实例化后,Servlet容器调用该方法完成Servlet的初始化工作

ServletConfig getServletConfig()

获取Servlet对象的配置信息

String getServletInfo()

返回包含Servlet信息的字符串,如作者,版权等

service(ServletRequest req,ServletResponse

resp)

负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时就会调用此方法。容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法,在service()方法中可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse

destroy()

负责释放Servlet对象占用的资源,当服务器关闭或者Servlet对象被移除时会销毁Servlet对象,此时会调用此方法

编写的Servlet类必须实现Servlet接口或者继承Servlet接口的实现类,如GenericServlet和

HttpServlet,这两个类都是抽象类并且HttpServlet继承了GenericServlet,其中GenericServlet

有一个抽象方法service(),而HttpServlet没有抽象方法。

第二章Requset和Response

从编写Servlet的过程中可以看出,doGet(或者doPost方法中有两个参数,分别是HttpServletRequest和HttpServletResponse,当执行Servlet的时候会从HttpServetRequest读取请求信息,而将响应信息封装进HttpServletResponse对象中

1.Requset 和 Response 对象的原理

  • Requset 和 Response 是有服务器创建的.我们只是使用

  • Requset 是来获取请求消息,Response 是来设置响应消息的.

继承体系结构

ServletRequest (接口)<–继承-- HttpServletRequest (接口) <–实现— RequestFacade 类(tomcat 创建)

Requset 功能

1.获取请求行数据;

2. 获取 servlet 路径;

3. 获取get方式请求参数 ;

4. 获取请求

Response 功能

1.功能:主要是设置响应消息;

2. 服务器输出字符数据到浏览器注意事项;

2.中文乱码问题

中文乱码就是值在请求信息或者响应信息中包含的中文字符不能正常显示。产生原因无非就是客户端与服务器采用的编码方式不同导致的。

根据请求方式的不同,请求一般可以被分为两种:GET请求和POST请求,

POST请求

乱码的原因:POST 提交的数据在请求体中,其所使用的编码格式时页面一致(即utf-8)。request 对象接收到数据之后,会将数据放到request缓冲区,缓冲区的默认字符集是SO-8859-1(该字符集不支持中文),两者使用的字符集不一致导致乱码。

解决方案:在获取请求参数之前设置request缓冲区字符集为utf-8。

//修改request缓冲区的字符集为UTF-8
request.setcharacterEncoding("utf-8");
// 获取用户名
string username = request.getParameter("username");

第三章过滤器

什么是过滤器?

Filter中文意思为过滤器。顾名思义,过滤器可在浏览器以及目标资源之间起到一个过滤的作用。例如:水净化器,可以看成是生活中的一个过滤器,他可以将污水中的杂质过滤,从而使进入的污水变成净水。对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括ServletJSPHTML页面等。

Filter是Tomcat容器内的过滤器,在请求到达容器是先会调用过滤器,再调用我们的servlet或者isp

当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给浏览器。

也就是说过滤器可以在WEB资源收到请求之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求和响应必须在经过多个过滤器后才能到达目标过滤器不是必须将请求传送到下一个过滤器(或WEB资源),也可以自己来处理请求,发送响应。

过滤器原理

当我们使用过滤器时,过滤器会对游览器的请求进行过滤,过滤器可以动态的分为3个部分

1.放行之前的代码

2.放行

3.放行后的代码

这3个部分分别会发挥不同作用。

第一部分代码会对游览器请求进行第一次过滤,然后继续执行

第二部分代码就是将游览器请求放行,如果还有过滤器,那么就继续交给下一个过滤器

第三部分代码就是对返回的Web资源再次进行过滤处理

filter的实现

编写Filter和编写Servlet类似,都需要实现接口。

编写Filter需要实现Filter接口,我们来看一下Filter接口的主要方法:

Filter接口,实现Filter需要实现该接口

  • 1.init()方法用于初始化Filter

  • 2doFilter()作用和service()方法类似,是过滤请求和响应的主要方法。

  • 3destroy0)用于在Filter对象被销毁前做一些收尾工作。如:释放资源等。

FilterConfig对象在服务器调用init()方法时传递进来

1getFilterName0)获取Filter的名字

2.getServletContext0)获取ServletContext对象(即application)

3getlnitParameter0获取Filter的初始化参数

filter应用

filter的生命周期

Filter的生命周期和Servlet类似

构造器:创建Filter实例是调用,Filter实例服务器一旦启动就会被创建

init0:实例创建后马上被调用,用来对Flter做一些初始化的操作

doFilter0:Filter的主要方法,用来完成过滤器主要功能的方法,每次访问目标资源时都会调用。

destroy0:服务器停止时调用,用来释放资源

flter过滤器链

过滤器可以组成一个过滤器链,链中的每个过滤器都可以负责特定的操作和任务客户端访问服务器的请求和响应在这些过滤器链之间传递FilterChain接口用于调用过滤器链中的一系列过滤器

我们实

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是使用 JavaWeb 实现登录和注册互换页面的后台代码: 首先,我们需要创建一个名为 "LoginServlet" 的 Servlet,用于处理用户登录: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); // 检查用户名和密码是否正确 if (username.equals("admin") && password.equals("admin123")) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("welcome.jsp"); } else { out.println("用户名或密码错误!"); } out.close(); } } ``` 在这个 Servlet 中,我们首先获取用户提交的用户名和密码,然后检查它们是否正确。如果正确,我们将用户名保存到会话中,然后重定向到欢迎页面;否则,我们输出一个错误消息。 接下来,我们需要创建一个名为 "RegisterServlet" 的 Servlet,用于处理用户注册: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RegisterServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); String repassword = request.getParameter("repassword"); // 检查密码和确认密码是否一致 if (!password.equals(repassword)) { out.println("密码和确认密码不一致!"); out.close(); return; } // 在此处添加将用户名和密码保存到数据库的代码 out.println("注册成功!"); out.close(); } } ``` 在这个 Servlet 中,我们首先获取用户提交的用户名、密码和确认密码,然后检查密码和确认密码是否一致。如果不一致,我们输出一个错误消息并返回;否则,我们将用户名和密码保存到数据库中(此处省略),然后输出一个成功消息。 最后,我们需要创建一个名为 "welcome.jsp" 的 JSP 页面,用于欢迎用户: ```jsp <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎页面</title> </head> <body> <h1>欢迎,<%= session.getAttribute("username") %>!</h1> <a href="logout.jsp">退出登录</a> </body> </html> ``` 在这个 JSP 页面中,我们使用了 JSP 的内置对象 "session" 来获取保存在会话中的用户名,并输出一个欢迎消息。同时,我们还提供了一个退出登录的链接,用于让用户注销并返回登录页面。 现在,我们已经完成了登录和注册互换页面的后台代码。需要注意的是,我们还需要创建一个名为 "logout.jsp" 的 JSP 页面,用于处理用户注销的请求,并在其中调用 "session.invalidate()" 方法来销毁会话。 ### 回答2: 使用JavaWeb实现登录和注册互换页面的后台代码需要以下步骤: 1. 创建两个JSP页面,一个用于登录,一个用于注册,分别命名为login.jsp和register.jsp,并编写相应的表单。 2. 创建一个Servlet类,命名为LoginRegisterServlet,继承HttpServlet。 3. 在LoginRegisterServlet中重写doGet方法和doPost方法。 4. 在doGet方法中,获取请求的参数,判断参数中是否包含login字段,如果包含则跳转到login.jsp页面;如果不包含则跳转到register.jsp页面。 5. 在doPost方法中,获取请求的参数,判断参数中是否包含login字段,如果包含则执行登录的逻辑,验证用户信息是否正确;如果不包含则执行注册的逻辑,将用户信息保存到数据库中。 6. 在登录逻辑中,可以使用数据库查询验证用户名和密码是否正确,如果正确则登录成功,跳转到登录成功页面;如果不正确则返回登录页面,并显示相应的错误信息。 7. 在注册逻辑中,可以使用数据库插入操作将用户信息保存到数据库中,如果插入成功则注册成功,跳转到注册成功页面;如果插入失败则返回注册页面,并显示相应的错误信息。 8. 在doGet和doPost方法中,通过request.getRequestDispatcher()方法获取跳转的页面,并使用request.forward()方法进行页面跳转。 9. 在web.xml文件中配置LoginRegisterServlet的映射路径。 以上是使用JavaWeb实现登录和注册互换页面的后台代码的基本步骤,具体的实现细节根据具体的业务需求可能会有所不同。 ### 回答3: 使用JavaWeb实现登录和注册页面互换的后台代码可以通过Servlet和JSP来完成。下面是一个简单的示例代码: 1. 创建一个LoginServlet来处理登录请求: ``` public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 通过数据库或其他方式进行用户验证 boolean isValidUser = validateUser(username, password); if (isValidUser) { // 用户验证通过,将用户信息存储到Session中 request.getSession().setAttribute("username", username); // 跳转到主页 response.sendRedirect("home.jsp"); } else { // 用户验证失败,返回登录页面并显示错误信息 request.setAttribute("error", "用户名或密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response); } } private boolean validateUser(String username, String password) { // 在这里进行用户验证 // 返回true表示用户验证通过,返回false表示用户验证失败 } } ``` 2. 创建一个RegisterServlet来处理注册请求: ``` public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 在这里进行注册逻辑,如将用户信息插入数据库等 // 注册成功后,将用户信息存储到Session中 request.getSession().setAttribute("username", username); // 跳转到主页 response.sendRedirect("home.jsp"); } } ``` 3. 在login.jsp页面中,用户输入用户名和密码后,将表单提交到LoginServlet: ``` <form action="login" method="post"> <input type="text" name="username" placeholder="请输入用户名" required><br> <input type="password" name="password" placeholder="请输入密码" required><br> <input type="submit" value="登录"> </form> ``` 4. 在register.jsp页面中,用户输入用户名和密码后,将表单提交到RegisterServlet: ``` <form action="register" method="post"> <input type="text" name="username" placeholder="请输入用户名" required><br> <input type="password" name="password" placeholder="请输入密码" required><br> <input type="submit" value="注册"> </form> ``` 通过以上代码,实现了登录和注册页面之间的互相切换,用户输入用户名和密码后,可以登录或注册,并跳转到主页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值