欢迎光临散文网 会员登陆 & 注册

Java web:重名验证load-on-startup servlet生命周期,学习笔记和代码例子【诗书画唱】

2020-09-18 00:49 作者:诗书画唱  | 我要投稿


写完这篇专栏的时间(给个三连吧):


自己想出来的巧妙的重名验证方法关键:


1、创建一个servlet,运行它能够打印出访问这个servlet的次数

package com.jy;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


@WebServlet("/ms")

public class FangWenCount extends HttpServlet {

private static final long serialVersionUID = 1L;

private Integer count = 0;

    

    public FangWenCount() {

        super();

        // TODO Auto-generated constructor stub

    }

  

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws 

ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


protected void doPost(HttpServletRequest request,

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

count ++;

System.out.println("访问这个servlet的次数:"+count+"次");

}


}




2、创建两个load-on-startup servlet,要求启动项目后,后面写的servlet先运行。


package com.SSHC;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class LosServlet

 */

public class loadOnStartup1 extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public loadOnStartup1() {

        super();

        // TODO Auto-generated constructor stub

    }


@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("随着项目启动运行的Loadonstartup servlet"

+ ":loadOnStartup1");

}


}


package com.SSHC;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;


public class loadOnStartup2 extends HttpServlet {


@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("另外的一个Loadonstartup servlet:loadOnStartup2");

}


}


<?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>JavaWebJSP</display-name>

  

<servlet>


<servlet-name>firstServlet-name</servlet-name>


<servlet-class>com.SSHC.loadOnStartup1</servlet-class>


<load-on-startup>2</load-on-startup>


</servlet>



<servlet>


<servlet-name>secondServlet-name</servlet-name>


<servlet-class>com.SSHC.loadOnStartup2</servlet-class>


<load-on-startup>1</load-on-startup>


</servlet>

  <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>

</web-app>

在项目处鼠标右键,点"Run as"等:



3、创建一个servlet,第一次运行时在后台打印"您是第1个访问本应用的客户"

package com.SSHC;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


@WebServlet("/CountPerson")

public class CountPerson extends HttpServlet {

private static final long serialVersionUID = 1L;

private Integer count = 0;

    

    public CountPerson() {

        super();

        // TODO Auto-generated constructor stub

    }

  

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws 

ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


protected void doPost(HttpServletRequest request,

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

count ++;

System.out.println("您是第"+count+"个访问本应用的客户");

}


}



4、在WEB-INF目录下创建一个reg.jsp页面,创建一个servlet,当运行这个servlet时跳转到reg.jsp页面。(WEB-INF目录下的jsp页面只有通过转发的方式才可以访问到,

不能通过http://localhost:8080/J190801/WEB-INF/my.jsp的方式访问

package com.SSHC;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class tiaoZhuanWEB

 */

@WebServlet("/tiaoZhuanWEB")

public class tiaoZhuanWEB extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public tiaoZhuanWEB() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, 

* HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {


// TODO Auto-generated method stub

request.getRequestDispatcher("WEB-INF/reg.jsp")

.forward(request, response);

 

}


}



<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

用转发的方式成功跳转到WEB-INF目录下的reg.jsp界面!


<%System.out.println("用转发的方式成功跳转到WEB-INF目录下的reg.jsp界面!"); %>

</body>

</html>



5、设计一个servlet,运行它能够跳转到b站


package com.SSHC;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class BaiduServlet

 */

@WebServlet("/bs")

public class BilibiliTiaoZhuanServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public BilibiliTiaoZhuanServlet() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest

*  request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, 

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


/**

* @see HttpServlet#doPost(HttpServletRequest 

* request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request,

HttpServletResponse response) 

throws ServletException, IOException {

// TODO Auto-generated method stub

//跳转百度页面

response.sendRedirect("http://www.bilibili.com";);

}


}


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <base hreff="<%=basePath%>">

        <title></title>

        <meta http-equiv="pragma" content="no-cache">

        <meta http-equiv="cache-control" content="no-cache">

        <meta http-equiv="expires" content="0">

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

        <meta http-equiv="description" content="This is my page">

        <script type="text/javascript">

            function naviTo(){

           

            window.location.hreff = 'bs';

            }

        </script>

    </head>

    <body>

        <input type="button" value="bilibil" onclick="naviTo();"/>

        <a hreff="javascript:naviTo();">点击后按钮或超链接跳转到bilibili</a>

    </body>

</html>




6、实现重名验证的业务。



package com.SSHC;


import java.io.IOException;

import java.util.ArrayList;

import java.util.List;


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 com.SSHC.DAO.UserDao;

import com.SSHC.bean.User;


/**

 * Servlet implementation class RegServlet

 */

@WebServlet("/rs")

public class RegServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public RegServlet() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


//中文乱码处理:

    request.setCharacterEncoding("utf-8");

    //1、获取用户输入的账号和密码:

    String act = request.getParameter("act");

    String pwd = request.getParameter("pwd");


    //2、查询数据库:

    UserDao userDao = new UserDao();



String msg = "";


int num=1;

List<User> list = userDao.selectAll();


for(User U : list) {





String act1= U.getAct();


//  System.out.println(act1);

  if(act.equals(act1)) {

  num=num*0;

} else {

  num=num*2;

  


} //有时用System.out.println(html)等来测试,找BUG等;


if(num==0) {

msg = "该账号已被使用";

request.setAttribute("msg", msg);

request.getRequestDispatcher("dupName.jsp")

    .forward(request, response);

} else {

msg = "该账号可以注册";

request.setAttribute("msg", msg);

request.getRequestDispatcher("success.jsp")

    .forward(request, response);

}


}


}



package com.SSHC.bean;


import java.util.Date;


//bean的类名于表的名字一致,而且首字母必须大写

public class User {

    //bean类中的属性名应该和表中的列名一致

private Integer id;

private String act;

private String pwd;

private String birth;

private String sex;

private String hobbys;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getAct() {

return act;

}

public void setAct(String act) {

this.act = act;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public String getBirth() {

return birth;

}

public void setBirth(String birth) {

this.birth = birth;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getHobbys() {

return hobbys;

}

public void setHobbys(String hobbys) {

this.hobbys = hobbys;

}


}

package com.SSHC.DAO;




import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;






import com.SSHC.Utils.DBUtils;

import com.SSHC.bean.User;



//DAO(Data Access Object)是一个数据访问接口,


//数据访问:顾名思义就是与数据库打交道。


//夹在业务逻辑与数据库资源中间。


///DAO就是实现增删改查的一个类


public class UserDao {


 //用XXXDao(XXX为表名比如Eduinfo),Eduinfo:教育信息。


///XXXDAO可查询eduinfo表中的所有的数据。


//List用上泛型:


public List<User>selectAll(){


String sql = "select * from User";


Connection conn = null;


PreparedStatement pstm = null;


ResultSet rs = null;


List<User>list = new ArrayList<User>();


try {


// 下面用上DBUtils(当然命名为Dbutil,也可以


// 自己知道是数据库常用工具就可以了:


conn = DBUtils.getConn();


pstm = conn.prepareStatement(sql);


rs = pstm.executeQuery();


while(rs.next()) {


Integer id = rs.getInt("id");


String ename = rs.getString("act");


//进行打包:


User edu = new User();


edu.setId(id);


edu.setAct(ename);


//继续打包:


list.add(edu);


}


} catch (SQLException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


return list;


}




}

package com.SSHC.Utils;


import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Properties;


public class DBUtils {

private static String driverName;

    private static String url;

    private static String user;

    private static String pwd;

    

    static {

    //读取properties文件

    Properties prop = new Properties();

    //将db.properties文件读取到内存中去

    InputStream is = DBUtils.class.getClassLoader()

    .getResourceAsStream("db.properties");

    //加载内容

    try {

prop.load(is);

//读取内容

driverName = prop.getProperty("dn");

//System.out.println(driverName);

url = prop.getProperty("url");

user = prop.getProperty("un");

pwd = prop.getProperty("up");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

    }

    

    //获取数据库连接对象的方法

    public static Connection getConn(){

    Connection conn = null;

    try {

Class.forName(driverName);

conn = DriverManager

.getConnection(url,user,pwd);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}   

    return conn;

    }

    

    public static void close(ResultSet

    rs,PreparedStatement pstm

    ,Connection conn){

        try {

        if(rs != null) {

            rs.close();

            }

            if(pstm != null) {

            pstm.close();

            }

            if(conn != null) {

            conn.close();

            }

        } catch(Exception e) {

        e.printStackTrace();

        }

    }

}

dn=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/firstjsp?useUnicode=true&characterEncoding=UTF-8

un=root

up=root

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<%@page import="com.SSHC.bean.User"%>

<%@page import="com.SSHC.DAO.UserDao"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <base hreff="<%=basePath%>">

        <title></title>

        <meta http-equiv="pragma" content="no-cache">

        <meta http-equiv="cache-control" content="no-cache">

        <meta http-equiv="expires" content="0">

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

        <meta http-equiv="description" content="This is my page">

    </head>

    <body>


        <form action="rs" method="post">

        <input type="text" name="act" placeholder="请输入账号" />

        <div style="color:red;">${msg }</div>

        <input type="submit" value="提交" />

        </form>

    </body>

</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <base hreff="<%=basePath%>">

        <title></title>

        <meta http-equiv="pragma" content="no-cache">

        <meta http-equiv="cache-control" content="no-cache">

        <meta http-equiv="expires" content="0">

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

        <meta http-equiv="description" content="This is my page">

    </head>

    <body>

        <h1>${msg }</h1>

    </body>

</html>



create table User(

id int primary key auto_increment,



act varchar(100) ,


pwd varchar(100) ,

sex char(100) ,


brith date,



hobbys   varchar(100)


);









——————


自己写的题目等:

打印出访问Servlet的次数和使用“出生”和“销毁”的方法


package com.jy;


import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Servlet implementation class MyServlet

 */

@WebServlet("/ms")

public class MyServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private Integer count = 0;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public MyServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

    //当servlet被销毁时调用这个方法

    //一般就是项目重启时会被销毁

@Override

public void destroy() {

// TODO Auto-generated method stub

System.out.println("被销毁了");

}

    //当servlet被创建出来的时候调用

//在整个的servlet的生命周期中只会调用一次

@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

System.out.println("我出生啦");

}


@Override

protected void service(HttpServletRequest arg0, HttpServletResponse arg1)

throws ServletException, IOException {

// TODO Auto-generated method stub

super.service(arg0, arg1);

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}


/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

count ++;

System.out.println(count);

}


}




例子:


1
2
3
4



下面是用于让”销毁“方法,让我们可以看到执行效果的方法,但有时不建议改bat,怕忘记改回来:

5
6
7
8
9
10





学习笔记:


一、HTTP协议

二、servlet


HTTP协议:超文本传输协议,文本代表字符串的意思,超文本代表图片,音频和视频

游戏的鼻祖:泥巴游戏mud,它是一个纯的文字游戏。

网络上面发送这些超文本时,就必须要遵守一定的规则,这样其他的人才能够接收到

的超文本内容,这个规则就叫超文本传输协议

Javaweb就遵循HTTP协议

HTTP协议有两个非常重要的请求方式:get请求方式和post请求方式

404:找不到你需要的资源(jsp页面,html页面以及servlet),访问路径如果不会就

会报这个错误

500:表示后台代码出现了错误(java代码)

200:表示请求成功了


Servlet:由java代码编写的一个小服务程序,它的作用非常的广泛,可以实现非常多

的功能,登录注册增删改查,附件上传下载,导出excel文件,servlet其实就是一个java类。

使用servlet:servlet虽然是一个java类,但是不能够直接运行。它必须启动tomcat服

务器以后才能运行。

创建一个servlet,运行它的时候在后台打印Hello world.

1、创建一个java类,让它继承HttpServlet类,重写doGet和doPost方法。

2、打开web.xml配置文件,对servlet进行配置。


快捷配置一个servlet:


当你在浏览器地址栏直接输入一个servlet的访问路径时,调用的是doGet方法

当在表单中运行一个servlet时,会根据表单的method属性来决定是调用doPost方法还是doGet方法。

post提交方式提交表单数据时,提交的数据不会显示在浏览器地址栏中

get提交方式提交表单数据时,提交的数据会显示在浏览器地址栏中。

post提交方式比较安全的。

get提交方式提交的数据量比较小

post提交方式提交的数据量比较大


一、servlet生命周期

二、init和destroy

三、loadonstartup servlet

四、servlet页面跳转方式


创建servlet的方式:

1、创建一个java类,让他继承HttpServlet,然后在web.xml中添加一段配置代码。

2、new servlet就可以创建出来


在项目中,创建servlet实例的时机:

1、当项目启动以后的第一个用户请求这个servlet时,就会new出一个servlet实例,

当这个用户使用完以后,servlet实例不会消失,会一直保存在项目中,当下一次有用户再次请求这个servlet的时候,就不会再new这个servlet,会直接使用前面保存在项目中的servlet实例。

2、随着项目启动,会自动的创建servlet


第二个用户也是访问这个servlet,不会再new出一个servlet实例了,它会直接使用第

一次new出来的servlet实例

loadonstartup servlet:随着项目的启动会自动运行的


通过servlet来进行页面跳转:

创建一个LoginServlet,运行这个servlet以后能够跳转到login.jsp页面


jsp页面每一个页面其实都是一个servlet

jsp页面转换成servlet类以后的源代码可以在tomcat服务器中的work目录下找到


jsp页面:在html代码中写java代码

servlet:在java代码中写html代码


实现重名验证





Java web:重名验证load-on-startup servlet生命周期,学习笔记和代码例子【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律