jsp與javabean程式設計
jsp與javabean程式設計
1、實驗內容:
(1)增加一個訊息留言錄入頁面msgadd.jsp,使用者在輸入框輸入留言資訊,點選“提交”後表單提交給名為messageServlet的servlet(由其充當控制器),該servlet將請求轉發到message.jsp;由message.jsp利用setproperty的辦法將資料設定到名為msgjb的javabean;messageServlet在上述請求轉發後,等待2秒鐘(確保message.jsp已經處理完畢),然後將msgjb的資料取出來並寫入資料庫。
(2)增加一個名為msgshow的訊息留言servlet(作為控制器),當用戶訪問該servlet
注意:上述連線資料庫的配置資訊,包括主機,資料庫,使用者名稱,密碼均不能寫死到程式裡面,要從配置檔案或者servlet初始化引數(web.xml)讀取。
2、實驗步驟:
(1)首先編寫一個名為msgadd.jsp的檔案用於錄入使用者的留言資訊,並將資訊通過表單傳送到
(2)編寫名為messageServlet.servlet(沒有進行web.xml檔案的配置,因為用的是servlet3.0,所以直接使用註解的方法進行配置的。不過後來由於連線資料庫需要從配置檔案讀取資料,為了方便資料操作,還是手動建立了一個只包含context-param 的web.xml檔案)用於將表單資訊轉發到message.jsp,再編寫message.jsp用於將資訊存入到Javabean中,2秒後messageservlet通過讀取msgjbjavabean中資料存入資料庫中。
(3)編寫一個read.html其中只有一個按鈕用於查詢資料中的資訊,資料中讀取的輸入首先是快取再
3.主要程式碼
web.xml檔案:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID1">
<display-name>jspproject</display-name>
<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>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/webdb</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>*****</param-value>
</context-param>
</web-app>
msgadd.jsp檔案:
<%@ 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=utf-8">
<title>請寫下你的留言</title>
<style>
textarea{
width: 20em;
height: 10em;
display: block;
margin: 10px;
}
</style>
</head>
<body>
<div>
<form action="messageServlet" method="post">
<table>
<td><label for="name1">使用者名稱字:</label>
<td><input type="text" name="name1" id="name1">
<tr></tr>
<br>
<td><label for="name2">留言標題:</label>
<td><input type="text" name="name2" id="name2">
<tr></tr>
<br>
</table>
<textarea name="name3" id="name3">請在此處編輯您的留言</textarea>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</div>
</body>
</html>
Messageservlet.servlet檔案:
package jspproject;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
/**
* Servlet implementation class messageServlet
*/
//特別要注意@WebInitParam註解應該放置的位置
@WebServlet(name="messageServlet",urlPatterns= {"/messageServlet"}
)
public class messageServlet extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gb2312");
PrintWriter out=response.getWriter();
//將請求轉發到message.jsp
request.getRequestDispatcher("message.jsp").forward(request, response);
//out.println(""+request.getParameter("name1"));
try {
Thread.sleep(2000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
//out.println(""+request.getParameter("name3"));
msgib msbean=(msgib)request.getAttribute("testmessage");
//out.print("++++++++++++++++++"+ms.getUser_name());
/***
* 資料庫連結暫時用程式內建的連結方式,之後再改進
*/
try {
/*Class.forName("com.mysql.jdbc.Driver");
Connection conn=null;
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/webdb", "root","peng");
*/
//從配置檔案讀取連結資料庫所需要的各種資料
String mysqldriver=getServletContext().getInitParameter("driver");
String mysqlurl=getServletContext().getInitParameter("url");
String mysqlname=getServletContext().getInitParameter("username");
String mysqlpassword=getServletContext().getInitParameter("password");
Class.forName(""+mysqldriver);
Connection conn=null;
conn=DriverManager.getConnection(""+mysqlurl, ""+mysqlname,
""+mysqlpassword);
PreparedStatement pstmt=conn.prepareStatement(""
+ "INSERT INTO message VALUES(?,?,?)");
// request.getAttribute("msgib");
pstmt.setString(1, msbean.getUser_name());
pstmt.setString(2, msbean.getUser_messagename());
pstmt.setString(3, msbean.getUser_message());
pstmt.executeUpdate();
out.println("資料插入成功********************");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
Message.jsp檔案:
<%@ 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=utf-8">
<title>message.jsp利用setproperty的辦法將資料設定到名為msgjb的javabean</title>
</head>
<jsp:useBean id="messagegather" scope="session" class="jspproject.msgib" />
<jsp:setProperty name="messagegather" property="user_name" param="name1" />
<jsp:setProperty name="messagegather" property="user_messagename" param="name2" />
<jsp:setProperty name="messagegather" property="user_message" param="name3" />
<body>
<%
String name=messagegather.getUser_name();
request.setAttribute("testmessage", messagegather);
//request.getRequestDispatcher("messageServlet.java").forward(request, response);
//response.sendRedirect("messageServlet.java");
%>
<%=name %>
你的留言提交成功
</body>
</html>
Read.html檔案:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>從資料庫讀取資料到表格</title>
</head>
<body>
<form action="msgshow" method="post">
<input type="submit" value="讀取資料">
</form>
</body>
</html>
Msgshow.jsp檔案:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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=utf-8">
<title>將資訊顯示到表格</title>
</head>
<body>
<table id="tBody" border="1" cellspacing="0" cellpadding="0">
<!-- 此處應特別主要包的匯入,以及jar的匯入,還有taglib的設定 -->
<c:forEach items="${list}" var="list">
<tr>
<td>${list.user_name}</td>
<td>${list.user_messagename}</td>
<td>${list.user_message}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Msgshow.java檔案:
package jspproject;
import java.awt.*;
import java.awt.List;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class msgshow
*/
//@WebServlet("/msgshow")
@WebServlet(name="msgshow",urlPatterns= {"/msgshow"}
)
public class msgshow extends HttpServlet {
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
// ArrayList list=new ArrayList();
//*************************************************************************************
java.util.List<msgib> list=new ArrayList<msgib>();
/*****************************************************************************************/
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gb2312");
PrintWriter out=response.getWriter();
/***
* 資料庫連結暫時用程式內建的連結方式,之後再改進
*/
try {
/*Class.forName("com.mysql.jdbc.Driver");
Connection conn=null;
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/webdb", "root","peng");*/
/*ServletConfig config=getServletConfig();
String mysqldriver=config.getInitParameter("driver");
String mysqlurl=config.getInitParameter("url");
String mysqlname=config.getInitParameter("username");
String mysqlpassword=config.getInitParameter("password");
Class.forName(""+mysqldriver);
Connection conn=null;
conn=DriverManager.getConnection(""+mysqlurl, ""+mysqlname,
""+mysqlpassword);
*/
//ServletConfig config=getServletConfig();
String mysqldriver=getServletContext().getInitParameter("driver");
String mysqlurl=getServletContext().getInitParameter("url");
String mysqlname=getServletContext().getInitParameter("username");
String mysqlpassword=getServletContext().getInitParameter("password");
Class.forName(""+mysqldriver);
Connection conn=null;
conn=DriverManager.getConnection(""+mysqlurl, ""+mysqlname,
""+mysqlpassword);
Statement stm=conn.createStatement();
ResultSet rs=stm.executeQuery("SELECT* FROM message");
while(rs.next())
{
msgib msgbean=new msgib();
msgbean.setUser_name(rs.getString("user_name"));
msgbean.setUser_messagename(rs.getString("user_messagename"));
msgbean.setUser_message(rs.getString("user_message"));
list.add(msgbean);
}
//將資料存入list,並將session轉發到msgshow.jsp
HttpSession session=request.getSession();
session.setAttribute("list", list);
request.getRequestDispatcher("msgshow.jsp").forward(request, response);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
}
Msgib.java檔案:
package jspproject;
public class msgib {
private String user_name="";
private String user_messagename="";
private String user_message="";
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_messagename() {
return user_messagename;
}
public void setUser_messagename(String user_messagename) {
this.user_messagename = user_messagename;
}
public String getUser_message() {
return user_message;
}
public void setUser_message(String user_message) {
this.user_message = user_message;
}
}
附錄:msgshow1.jsp的第二種方法(使用get獲得list中的資料)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="jspproject.*" %>
<%@ page import="java.util.*" %>
<!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=utf-8">
<title>Insert title here</title>
</head>
<body>
<table id="tBody" border="1" cellspacing="0" cellpadding="0">
<%
java.util.List<msgib> list=(List)session.getAttribute("list");
for(int i=0;i<list.size();i++)
{
msgib ms=list.get(i);
%>
<!-- System.out.println("資料為"+ms.getUser_name()+""+ms.getUser_messagename()+""+ms.getUser_message()); -->
<tr>
<td><%=ms.getUser_name() %></td>
<td><%=ms.getUser_messagename() %></td>
<td><%=ms.getUser_message() %></td>
</tr>
<% }
%>
</table>
</body>
</html>
4、執行結果(截圖)及總結:
輸入需要留言的資訊
說明資料成功存入資料庫
通過讀取按鈕來從資料庫讀取資訊
注意點:
- 首先第一個需要注意的就是不能忘了匯入各種包
- 然後就是各種包應該存放的位置
- web.xml檔案放在servlet3.0中會出現一個叉但是並不會出錯或者編譯不成功