request.setAttribute("li", li); request.setAttribute("pageNo", Integer.parseInt(pageNo)); request.setAttribute("pages", pages); request.setAttribute("count", count);
时间: 2024-04-27 19:25:03 浏览: 41
这是 Java 代码中使用 request 对象设置一些属性值,以便在后续的请求处理中使用或者在 JSP 页面中展示。具体来说,这里将一个名为 li 的对象设置为 request 的属性值,将一个名为 pageNo 的整数值设置为 request 的属性值,将一个名为 pages 的整数值设置为 request 的属性值,将一个名为 count 的整数值设置为 request 的属性值。这些属性值可以在后续的请求处理中通过 request 对象获取,或者通过 EL 表达式在 JSP 页面中访问。
相关问题
请基于JSP + Servlet + JavaBean + JDBC+MYsql 使用Myeclipse软件,制作一个商品查询项目,根据可以用户输入的商品号从数据库中查询该商品信息和查询所有商品信息 遵循MVC设计模式,其中视图有queryProduct.jsp、displayProduct.jsp、displayAllProduct.jsp和error.jsp几个页面,Product类实现模型,QueryProductServlet类实现控制器。数据库表为products。请具体代码和步骤
好的,以下是具体的代码和步骤:
1. 创建数据库和表
首先需要在MySQL中创建一个名为“test”的数据库,然后在该数据库中创建一个名为“products”的表,表结构如下:
```
CREATE TABLE `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`price` double NOT NULL,
`description` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
2. 创建JavaBean
创建一个名为“Product”的JavaBean,包含id、name、price和description四个属性,以及对应的getters和setters方法。
```
public class Product {
private int id;
private String name;
private double price;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
```
3. 创建查询逻辑
创建一个名为“QueryProductServlet”的Servlet,实现商品查询的逻辑。
```
public class QueryProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String QUERY_PRODUCT = "queryProduct.jsp";
private static final String DISPLAY_PRODUCT = "displayProduct.jsp";
private static final String DISPLAY_ALL_PRODUCT = "displayAllProduct.jsp";
private static final String ERROR = "error.jsp";
private ProductDao productDao = new ProductDao();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String forward = "";
String productId = request.getParameter("productId");
if (productId == null || productId.isEmpty()) {
forward = QUERY_PRODUCT;
} else {
try {
int id = Integer.parseInt(productId);
Product product = productDao.getProductById(id);
if (product != null) {
request.setAttribute("product", product);
forward = DISPLAY_PRODUCT;
} else {
request.setAttribute("error", "Product not found");
forward = ERROR;
}
} catch (NumberFormatException e) {
request.setAttribute("error", "Invalid product ID");
forward = ERROR;
}
}
request.getRequestDispatcher(forward).forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String forward = "";
List<Product> products = productDao.getAllProducts();
if (products != null && !products.isEmpty()) {
request.setAttribute("products", products);
forward = DISPLAY_ALL_PRODUCT;
} else {
request.setAttribute("error", "No products found");
forward = ERROR;
}
request.getRequestDispatcher(forward).forward(request, response);
}
}
```
上面的代码中,QueryProductServlet包含了doGet和doPost两个方法,分别对应用户输入商品号进行单个商品查询和查询所有商品信息的操作。当用户输入商品号时,QueryProductServlet会调用ProductDao对象的getProductById方法从数据库中查询商品信息,并将查询结果存入request对象中,最后转发到displayProduct.jsp页面显示查询结果。当用户不输入商品号时,QueryProductServlet会调用ProductDao对象的getAllProducts方法查询所有商品信息,并将查询结果存入request对象中,最后转发到displayAllProduct.jsp页面显示查询结果。
4. 创建数据访问对象
创建一个名为“ProductDao”的类,实现对产品数据的访问操作。
```
public class ProductDao {
private static final String SELECT_PRODUCT_BY_ID = "SELECT * FROM products WHERE id = ?";
private static final String SELECT_ALL_PRODUCTS = "SELECT * FROM products";
public Product getProductById(int productId) {
Product product = null;
try (Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(SELECT_PRODUCT_BY_ID)) {
stmt.setInt(1, productId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPrice(rs.getDouble("price"));
product.setDescription(rs.getString("description"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return product;
}
public List<Product> getAllProducts() {
List<Product> products = new ArrayList<>();
try (Connection conn = getConnection();
PreparedStatement stmt = conn.prepareStatement(SELECT_ALL_PRODUCTS);
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Product product = new Product();
product.setId(rs.getInt("id"));
product.setName(rs.getString("name"));
product.setPrice(rs.getDouble("price"));
product.setDescription(rs.getString("description"));
products.add(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
private Connection getConnection() throws SQLException {
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
return DriverManager.getConnection(url, user, password);
}
}
```
上面的代码中,ProductDao类包含了getProductById和getAllProducts两个方法,分别对应单个商品查询和查询所有商品信息的操作。在getProductById方法中,使用了PreparedStatement对象执行SQL查询,并将查询结果封装成Product对象返回。在getAllProducts方法中,使用了PreparedStatement对象执行SQL查询,并将查询结果封装成List<Product>返回。
5. 创建JSP页面
创建一个名为“queryProduct.jsp”的JSP页面,用于用户输入商品号进行单个商品查询。
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Query Product</title>
</head>
<body>
<h1>Query Product</h1>
<form method="get" action="QueryProductServlet">
<label>Product ID:</label>
<input type="text" name="productId"><br>
<input type="submit" value="Query">
</form>
</body>
</html>
```
创建一个名为“displayProduct.jsp”的JSP页面,用于显示单个商品查询的结果。
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Display Product</title>
</head>
<body>
<h1>Display Product</h1>
<table border="1" cellpadding="5">
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Description</th>
</tr>
<c:if test="${not empty product}">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>${product.description}</td>
</tr>
</c:if>
</table>
<br>
<a href="queryProduct.jsp">Back to Query Product</a>
</body>
</html>
```
创建一个名为“displayAllProduct.jsp”的JSP页面,用于显示所有商品信息的查询结果。
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Display All Products</title>
</head>
<body>
<h1>Display All Products</h1>
<table border="1" cellpadding="5">
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Description</th>
</tr>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>${product.description}</td>
</tr>
</c:forEach>
</table>
<br>
<a href="queryProduct.jsp">Back to Query Product</a>
</body>
</html>
```
创建一个名为“error.jsp”的JSP页面,用于显示错误信息。
```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Error</title>
</head>
<body>
<h1>Error</h1>
<p>${error}</p>
<br>
<a href="queryProduct.jsp">Back to Query Product</a>
</body>
</html>
```
6. 部署应用程序
将所有代码文件放入MyEclipse中的Web项目中,并将MySQL驱动程序(mysql-connector-java-5.1.46.jar)放入Web项目的WebContent/WEB-INF/lib目录中。最后,将Web项目部署到Tomcat服务器中。
7. 测试应用程序
在浏览器中访问http://localhost:8080/yourWebContext/queryProduct.jsp,输入商品号进行单个商品查询,或者直接点击“Query All Products”按钮查询所有商品信息。
编写一个学生成绩查询成绩页面,要求能够根据分数段与班级查询学生成绩。要求数据库采用h2,数据库路径为d:/temp/teaching,表名为student,表结构为:no(学号,字符串),name(姓名,字符串),score(成绩,整数),clazz(班级,字符串)
好的,这是一个具体的编程问题。以下是一个简单的Java Web应用程序,可以根据分数段与班级查询学生成绩。该应用程序使用H2数据库,并将数据库路径设置为d:/temp/teaching,表名为student,表结构为:no(学号,字符串),name(姓名,字符串),score(成绩,整数),clazz(班级,字符串)。
首先,需要在pom.xml文件中添加以下依赖项:
```xml
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
```
然后,编写一个Servlet来处理学生成绩查询请求。以下是一个示例代码:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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;
@WebServlet("/score")
public class ScoreServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DB_URL = "jdbc:h2:d:/temp/teaching";
private static final String DB_USER = "sa";
private static final String DB_PASSWORD = "";
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String clazz = request.getParameter("clazz");
int minScore = Integer.parseInt(request.getParameter("minScore"));
int maxScore = Integer.parseInt(request.getParameter("maxScore"));
List<Score> scores = getScores(clazz, minScore, maxScore);
request.setAttribute("scores", scores);
request.getRequestDispatcher("/score.jsp").forward(request, response);
}
private List<Score> getScores(String clazz, int minScore, int maxScore) {
List<Score> scores = new ArrayList<>();
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {
String sql = "SELECT no, name, score, clazz FROM student WHERE clazz = ? AND score >= ? AND score <= ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, clazz);
stmt.setInt(2, minScore);
stmt.setInt(3, maxScore);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Score score = new Score();
score.setNo(rs.getString("no"));
score.setName(rs.getString("name"));
score.setScore(rs.getInt("score"));
score.setClazz(rs.getString("clazz"));
scores.add(score);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return scores;
}
}
```
在上面的代码中,我们编写了一个ScoreServlet类,实现了doGet方法来处理GET请求。我们从请求参数中获取班级、最小分数和最大分数,然后调用getScores方法来查询数据库,并将结果存储在一个名为“scores”的请求属性中。最后,我们将请求转发到score.jsp页面来展示查询结果。
以下是Score类的定义:
```java
public class Score {
private String no;
private String name;
private int score;
private String clazz;
// getters and setters
}
```
最后,我们还需要编写一个JSP页面来展示查询结果。以下是一个简单的score.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>
<table>
<tr>
<th>学号</th>
<th>姓名</th>
<th>成绩</th>
<th>班级</th>
</tr>
<c:forEach items="${scores}" var="score">
<tr>
<td>${score.no}</td>
<td>${score.name}</td>
<td>${score.score}</td>
<td>${score.clazz}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
```
在上面的代码中,我们使用JSTL的forEach标签来遍历scores属性,并将每个Score对象的属性显示在一个HTML表格中。
以上就是一个简单的学生成绩查询应用程序的代码示例。
阅读全文