javaweb 统计网站访问量时出现null和数据不增加等问题

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		ServletContext application = this.getServletContext();
		Integer count = (Integer) application.getAttribute("count");
		System.out.println("top:"+count);
		if(count==null){
			application.setAttribute("count", 1);
			
			System.out.println("if:"+count);
		}else{
			application.setAttribute("count", count++);
			System.out.println("else:"+count);
		}
		System.out.println("bottom:"+count);
		PrintWriter pw = response.getWriter();
		pw.print("<h1>"+count+"</h1>");
	}

 

这时候刷新浏览器首先是null,再次刷新就是2,然后再刷新也没有变化,一直是2(有时候有其他成功的案例使浏览器有缓存时,可能会正常增加)

问题原因:

        出现null的原因:if判断后只是将ServletContext的count的值变成1,但是我们自己定义的count没有变化还是null,所以在最后输出流输出的时候就是null

        直接变成2 的原因:ServletContext的count第一次访问之后就是1了,再次访问的时候将1赋值给我们的count,再次判断    走else分支,count++先赋值,后自加。所以ServletContext的count的值还是1,但是我们的count就是2.。。。

解决:

if语句判断之后 给我们的count赋值为1

另外将else的count++改为++count或者是count+1

 

public class BServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		ServletContext application = this.getServletContext();
		Integer count = (Integer) application.getAttribute("count");
		System.out.println("top:"+count);
		if(count==null){
			application.setAttribute("count", 1);
			count = 1;
			System.out.println("if:"+count);
		}else{
			application.setAttribute("count", count+1);
			System.out.println("else:"+count);
		}
		System.out.println("bottom:"+count);
		PrintWriter pw = response.getWriter();
		pw.print("<h1>"+count+"</h1>");
	}

}

 

以下是使用JavaWeb中的servlet和JSP添加量表得分的步骤: 1. 创建一个名为Score的JavaBean类,用于存储量表得分的信息,包括学生ID、量表ID、得分等属性。 ```java public class Score { private int studentId; private int scaleId; private int score; public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; } public int getScaleId() { return scaleId; } public void setScaleId(int scaleId) { this.scaleId = scaleId; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } ``` 2. 创建一个名为ScoreDao的Java类,用于实现对Score类的增删改查操作,包括添加量表得分的方法addScore。 ```java public class ScoreDao { // 数据库连接信息 private String url = "jdbc:mysql://localhost:3306/test"; private String username = "root"; private String password = "123456"; // 添加量表得分 public boolean addScore(Score score) { Connection conn = null; PreparedStatement pstmt = null; boolean flag = false; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 添加量表得分的SQL语句 String sql = "insert into score(student_id, scale_id, score) values(?, ?, ?)"; // 创建PreparedStatement对象 pstmt = conn.prepareStatement(sql); // 设置SQL语句中的参数 pstmt.setInt(1, score.getStudentId()); pstmt.setInt(2, score.getScaleId()); pstmt.setInt(3, score.getScore()); // 执行SQL语句 int result = pstmt.executeUpdate(); if (result > 0) { flag = true; } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭数据库连接 try { if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return flag; } } ``` 3. 创建一个名为AddScoreServlet的Java类,用于处理添加量表得分的请求。 ```java public class AddScoreServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单数据 int studentId = Integer.parseInt(request.getParameter("studentId")); int scaleId = Integer.parseInt(request.getParameter("scaleId")); int score = Integer.parseInt(request.getParameter("score")); // 创建Score对象 Score scoreObj = new Score(); scoreObj.setStudentId(studentId); scoreObj.setScaleId(scaleId); scoreObj.setScore(score); // 创建ScoreDao对象 ScoreDao scoreDao = new ScoreDao(); // 调用addScore方法添加量表得分 boolean result = scoreDao.addScore(scoreObj); if (result) { // 添加成功,跳转到成功页面 response.sendRedirect("success.jsp"); } else { // 添加失败,跳转到失败页面 response.sendRedirect("fail.jsp"); } } } ``` 4. 创建一个名为addScore.jsp的JSP页面,用于显示添加量表得分的表单。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>添加量表得分</title> </head> <body> <h1>添加量表得分</h1> <form action="AddScoreServlet" method="post"> <p>学生ID:<input type="text" name="studentId"></p> <p>量表ID:<input type="text" name="scaleId"></p> <p>得分:<input type="text" name="score"></p> <p><input type="submit" value="添加"></p> </form> </body> </html> ``` 5. 在web.xml文件中配置AddScoreServlet。 ```xml <servlet> <servlet-name>AddScoreServlet</servlet-name> <servlet-class>com.example.AddScoreServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddScoreServlet</servlet-name> <url-pattern>/AddScoreServlet</url-pattern> </servlet-mapping> ``` 6. 运行项目,在浏览器中访问addScore.jsp页面,填写表单并提交,即可添加量表得分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值