手把手搭建一個完整的javaweb項目
本案例使用Servlet+jsp製作,用MyEclipse和Mysql數據庫進行搭建,詳細介紹了搭建過程及知識點。
下載地址:http://download.csdn.net/detail/qq_23994787/9904842 點擊下載
主要功能有:
1.用戶註冊
2.用戶登錄
3.用戶列表展示
4.用戶信息修改
5.用戶信息刪除
涉及到的知識點有:
1.JDBC
2.Servlet
3.過濾器
4..EL與JSTL表達式
1.首先打開mysql數據庫 新建一個數據庫test,然後生成對應的表結構
- CREATE TABLE `user` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(255) NOT NULL,
- `pwd` varchar(255) NOT NULL,
- `sex` varchar(255) NOT NULL,
- `home` varchar(255) NOT NULL,
- `info` varchar(255) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
- INSERT INTO `user` VALUES ('3', '123', '123', '123', '123', '123');
- INSERT INTO `user` VALUES ('4', '123123', '123123', '男', '北京', '123123');
這裏使用到了navicat for mysql 這是一種mysql的圖形界面化工具,後期可以非常方便的操作數據庫。
需要的童鞋 給你們個連接 http://download.csdn.net/download/qq_23994787/10168988
2.然後打開MyEclipse新建一個web項目
3.在webroot下的WEB-INF下的lib中導入mysql的驅動jar包
4.建立對應的包結構
com.filter //過濾器 解決中文字符集亂碼
com.util //數據庫連接工具類
com.entity //實體類
com.dao //數據操作類
com.servlet //servlet類
5.在filter下新建一個EncodingFilter用來解決中文字符集亂碼,它需要實現Filter接口,並重寫doFilter函數
- package com.filter;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- public class EncodingFilter implements Filter{
- public EncodingFilter(){
- System.out.println("過濾器構造");
- }
- public void destroy() {
- System.out.println("過濾器銷燬");
- }
- public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
- request.setCharacterEncoding("utf-8"); //將編碼改爲utf-8
- response.setContentType("text/html;charset=utf-8");
- chain.doFilter(request, response);
- }
- public void init(FilterConfig arg0) throws ServletException {
- System.out.println("過濾器初始化");
- }
- }
6.到web.xml下進行對EncodingFilter相應的配置
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name></display-name>
- <filter>
- <filter-name>EncodingFilter</filter-name>
- <filter-class>com.filter.EncodingFilter</filter-class><!--全路徑 從根包開始一直到類名-->
- </filter>
- <filter-mapping>
- <filter-name>EncodingFilter</filter-name>
- <url-pattern>/*</url-pattern> <!--*即爲過濾所有-->
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>denglu.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
7.在util下新建一個DBconn類用來處理對數據庫的連接操作(用戶名或密碼按照自己的數據庫更改)
- package com.util;
- import java.sql.*;
- public class DBconn {
- static String url = "jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8";
- static String username = "root";
- static String password = "root";
- static Connection conn = null;
- static ResultSet rs = null;
- static PreparedStatement ps =null;
- public static void init(){
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn = DriverManager.getConnection(url,username,password);
- } catch (Exception e) {
- System.out.println("init [SQL驅動程序初始化失敗!]");
- e.printStackTrace();
- }
- }
- public static int addUpdDel(String sql){
- int i = 0;
- try {
- PreparedStatement ps = conn.prepareStatement(sql);
- i = ps.executeUpdate();
- } catch (SQLException e) {
- System.out.println("sql數據庫增刪改異常");
- e.printStackTrace();
- }
- return i;
- }
- public static ResultSet selectSql(String sql){
- try {
- ps = conn.prepareStatement(sql);
- rs = ps.executeQuery(sql);
- } catch (SQLException e) {
- System.out.println("sql數據庫查詢異常");
- e.printStackTrace();
- }
- return rs;
- }
- public static void closeConn(){
- try {
- conn.close();
- } catch (SQLException e) {
- System.out.println("sql數據庫關閉異常");
- e.printStackTrace();
- }
- }
- }
8.在entity下新建一個User實體類(實體即抽象出來的用戶對象,對應數據庫中的user表,表中每個字段在實體中爲一個屬性,也可以理解爲一個User對象對應數據庫中的user表一條記錄)
- package com.entity;
- public class User {
- private int id;
- private String name;
- private String pwd;
- private String sex;
- private String home;
- private String info;
- 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 String getPwd() {
- return pwd;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public String getHome() {
- return home;
- }
- public void setHome(String home) {
- this.home = home;
- }
- public String getInfo() {
- return info;
- }
- public void setInfo(String info) {
- this.info = info;
- }
- }
9.在dao下新建一個UserDao接口 以及對應的方法實現類(使用接口類是爲了規範開發)
UserDao.java
- package com.dao;
- import java.util.List;
- import com.entity.User;
- public interface UserDao {
- public boolean login(String name,String pwd);//登錄
- public boolean register(User user);//註冊
- public List<User> getUserAll();//返回用戶信息集合
- public boolean delete(int id) ;//根據id刪除用戶
- public boolean update(int id,String name, String pwd,String sex, String home,String info) ;//更新用戶信息
- }
新建UserDaoImpl.java 實現UserDao接口,及未實現的方法 (SQL語句建議在mysql中測試以下,沒有問題然後在拿到實現類中使用,可以避免無必要的麻煩)
本例子SQL使用字符串拼接的方式,其實還有一種預加載的方式,有興趣的童鞋可以參考我的博客,瞭解預加載的方式處理SQL語句與字符串拼接方式的區別。
- package com.dao;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import com.entity.User;
- import com.util.DBconn;
- public class UserDaoImpl implements UserDao{
- public boolean register(User user) {
- boolean flag = false;
- DBconn.init();
- int i =DBconn.addUpdDel("insert into user(name,pwd,sex,home,info) " +
- "values('"+user.getName()+"','"+user.getPwd()+"','"+user.getSex()+"','"+user.getHome()+"','"+user.getInfo()+"')");
- if(i>0){
- flag = true;
- }
- DBconn.closeConn();
- return flag;
- }
- public boolean login(String name, String pwd) {
- boolean flag = false;
- try {
- DBconn.init();
- ResultSet rs = DBconn.selectSql("select * from user where name='"+name+"' and pwd='"+pwd+"'");
- while(rs.next()){
- if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
- flag = true;
- }
- }
- DBconn.closeConn();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return flag;
- }
- public List<User> getUserAll() {
- List<User> list = new ArrayList<User>();
- try {
- DBconn.init();
- ResultSet rs = DBconn.selectSql("select * from user");
- while(rs.next()){
- User user = new User();
- user.setId(rs.getInt("id"));
- user.setName(rs.getString("name"));
- user.setPwd(rs.getString("pwd"));
- user.setSex(rs.getString("sex"));
- user.setHome(rs.getString("home"));
- user.setInfo(rs.getString("info"));
- list.add(user);
- }
- DBconn.closeConn();
- return list;
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- public boolean update(int id,String name, String pwd,String sex, String home,String info) {
- boolean flag = false;
- DBconn.init();
- String sql ="update user set name ='"+name
- +"' , pwd ='"+pwd
- +"' , sex ='"+sex
- +"' , home ='"+home
- +"' , info ='"+info+"' where id = "+id;
- int i =DBconn.addUpdDel(sql);
- if(i>0){
- flag = true;
- }
- DBconn.closeConn();
- return flag;
- }
- public boolean delete(int id) {
- boolean flag = false;
- DBconn.init();
- String sql = "delete from user where id="+id;
- int i =DBconn.addUpdDel(sql);
- if(i>0){
- flag = true;
- }
- DBconn.closeConn();
- return flag;
- }
- }
10.在servlet下創建DengluServlet用來實現對用戶登錄的操作(Servlet有兩種方式創建,一種手工創建。另一種程序自動生成。前者自己創建java類,實現Servlet具體內容,然後需要去WEB_INF下的web.xml去配置servlet . 而後者則直接由程序替我們配置好了Servlet)本例子使用第二種方式生成Servlet
DengluServlet.java
- package com.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.dao.UserDao;
- import com.dao.UserDaoImpl;
- public class DengluServlet extends HttpServlet { //需要繼承HttpServlet 並重寫doGet doPost方法
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response); //將信息使用doPost方法執行 對應jsp頁面中的form表單中的method
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String name = request.getParameter("name"); //得到jsp頁面傳過來的參數
- String pwd = request.getParameter("pwd");
- UserDao ud = new UserDaoImpl();
- if(ud.login(name, pwd)){
- request.setAttribute("xiaoxi", "歡迎用戶"+name); //向request域中放置信息
- request.getRequestDispatcher("/success.jsp").forward(request, response);//轉發到成功頁面
- }else{
- response.sendRedirect("index.jsp"); //重定向到首頁
- }
- }
- }
有兩點要注意的地方:
一:getParameter與getAttribute兩者的區別
request.setAttribute("xiaoxi", "歡迎用戶"+name);//向request域中放置信息 ( 鍵值對的形式) 名字爲xiaoxi 內容爲"歡迎用戶"+name
request.getAttribute("xiaoxi");//得到request域中放置名字爲xiaoxi的信息
request.getParameter("name");//得到request域的參數信息(得到jsp頁面傳過來的參數)
getAttribute表示從request範圍取得設置的屬性,必須要先setAttribute設置屬性,才能通過getAttribute來取得,設置與取得的爲Object對象類型 。
getParameter表示接收參數,參數爲頁面提交的參數,包括:表單提交的參數、URL重寫(就是xxx?id=1中的id)傳的參數等,因此這個並沒有設置參數的方法(沒有setParameter),而且接收參數返回的不是Object,而是String類型
二:轉發與重定向的區別
(1).重定向的執行過程:Web服務器向瀏覽器發送一個http響應--》瀏覽器接受此響應後再發送一個新的http請求到服務器--》服務器根據此請求尋找資源併發送給瀏覽器。它可以重定向到任意URL,不能共享request範圍內的數據。
(2).重定向是在客戶端發揮作用,通過新的地址實現頁面轉向。
(3).重定向是通過瀏覽器重新請求地址,在地址欄中可以顯示轉向後的地址。
(4).轉發過程:Web服務器調用內部方法在容器內部完成請求和轉發動作--》將目標資源發送給瀏覽器,它只能在同一個Web應用中使用,可以共享request範圍內的數據。
(5).轉發是在服務器端發揮作用,通過forward()方法將提交信息在多個頁面間進行傳遞。
(6).轉發是在服務器內部控制權的轉移,客戶端瀏覽器的地址欄不會顯示出轉向後的地址。
ZhuceServlet.java
- package com.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.dao.UserDao;
- import com.dao.UserDaoImpl;
- import com.entity.User;
- public class ZhuceServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String name = request.getParameter("name"); //獲取jsp頁面傳過來的參數
- String pwd = request.getParameter("pwd");
- String sex = request.getParameter("sex");
- String home = request.getParameter("home");
- String info = request.getParameter("info");
- User user = new User(); //實例化一個對象,組裝屬性
- user.setName(name);
- user.setPwd(pwd);
- user.setSex(sex);
- user.setHome(home);
- user.setInfo(info);
- UserDao ud = new UserDaoImpl();
- if(ud.register(user)){
- request.setAttribute("username", name); //向request域中放置參數
- //request.setAttribute("xiaoxi", "註冊成功");
- request.getRequestDispatcher("/denglu.jsp").forward(request, response); //轉發到登錄頁面
- }else{
- response.sendRedirect("index.jsp");//重定向到首頁
- }
- }
- }
12.在servlet下創建SearchallServlet用來返回數據庫中所有用戶信息
Searchall.java
- package com.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.dao.UserDao;
- import com.dao.UserDaoImpl;
- import com.entity.User;
- public class Searchall extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- UserDao ud = new UserDaoImpl();
- List<User> userAll = ud.getUserAll();
- request.setAttribute("userAll", userAll);
- request.getRequestDispatcher("/showall.jsp").forward(request, response);
- }
- }
13.在servlet下創建DeleteServlet用來刪除用戶操作
DeleteServlet.java
- package com.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.dao.UserDao;
- import com.dao.UserDaoImpl;
- public class DeleteServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String id = request.getParameter("id");
- int userId = Integer.parseInt(id);
- UserDao ud = new UserDaoImpl();
- if(ud.delete(userId)){
- request.setAttribute("xiaoxi", "刪除成功");
- request.getRequestDispatcher("/Searchall").forward(request, response);
- }else{
- response.sendRedirect("index.jsp");
- }
- }
- }
14.在servlet下創建UpdateServlet操作用來更新用戶信息
UpdateServlet.java
- package com.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.dao.UserDao;
- import com.dao.UserDaoImpl;
- import com.entity.User;
- public class UpdateServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String id = request.getParameter("id");
- int userId = Integer.parseInt(id);
- String name = request.getParameter("name");
- String pwd = request.getParameter("pwd");
- String sex = request.getParameter("sex");
- String home = request.getParameter("home");
- String info = request.getParameter("info");
- System.out.println("------------------------------------"+userId);
- UserDao ud = new UserDaoImpl();
- if(ud.update(userId, name, pwd, sex, home, info)){
- request.setAttribute("xiaoxi", "更新成功");
- request.getRequestDispatcher("/Searchall").forward(request, response);
- }else{
- response.sendRedirect("index.jsp");
- }
- }
- }
15.配置servlet 如果非手打而用MyEclipse生成則不用配置 附完整web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name></display-name>
- <filter><!--過濾器配置-->
- <filter-name>EncodingFilter</filter-name>
- <filter-class>com.filter.EncodingFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>EncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet><!--servlet類路徑配置-->
- <servlet-name>DengluServlet</servlet-name>
- <servlet-class>com.servlet.DengluServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>ZhuceServlet</servlet-name>
- <servlet-class>com.servlet.ZhuceServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>Searchall</servlet-name>
- <servlet-class>com.servlet.Searchall</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>DeleteServlet</servlet-name>
- <servlet-class>com.servlet.DeleteServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>UpdateServlet</servlet-name>
- <servlet-class>com.servlet.UpdateServlet</servlet-class>
- </servlet>
- <servlet-mapping><!--servlet類映射配置-->
- <servlet-name>DengluServlet</servlet-name>
- <url-pattern>/DengluServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>ZhuceServlet</servlet-name>
- <url-pattern>/ZhuceServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>Searchall</servlet-name>
- <url-pattern>/Searchall</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>DeleteServlet</servlet-name>
- <url-pattern>/DeleteServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>UpdateServlet</servlet-name>
- <url-pattern>/UpdateServlet</url-pattern>
- </servlet-mapping>
- <welcome-file-list><!--默認首頁地址-->
- <welcome-file>denglu.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
16.新建jsp頁面
denglu.jsp 用戶登錄頁面 默認頁面進入項目後 先進入該頁面(web.xml中配置)
form表單中需要注意的是<form action="DengluServlet" method="post">
其中action即爲要跳轉的servlet路徑(即在web.xml中配置的servlet-mapping :<url-pattern>/DengluServlet</url-pattern> ,)寫 / 後的內容。
method="post"爲傳遞值得方法類型有兩種,第一種get,第二種post。網上介紹這兩種的區別有很多,闡述的又是百家爭鳴。而我覺得那個方便就用那個,一般使用post傳遞,可避免亂碼。
另一個需要注意的是 用戶名:<input type="text" name="name" value=""> input標籤 一定要起個名字 如name="name"
起名的作用就是讓後臺通過request.getParterment("name");來取值
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>登錄註冊頁面</title>
- </head>
- <body >
- <form action="DengluServlet" method="post" style="padding-top:-700px;">
- 用戶名:<input type="text" name="name"value=""><br><br>
- 密碼: <input type="password" name="pwd"value=""><br><br>
- <input type="submit"value="登錄"name="denglu"><input type="reset"value="重置"><br>
- </form>
- <form action="zhuce.jsp">
- <input type="submit"value="新用戶註冊">
- </form>
- </body>
- </html>
zhuce.jsp 用戶註冊頁面
- <%@ page language="java" import="java.util.*" 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>
- <title>My JSP 'BB.jsp' starting page</title>
- </head>
- <body >
- <form action="ZhuceServlet"method="post" style="padding-top:-700px;">
- 輸入用戶名:<input name="name" type="text"><br><br>
- 輸入密碼:<input name="pwd" type="password"><br><br>
- 選擇性別:<input type="radio"name="sex"value="男"checked>男
- <input type="radio"name="sex"value="女">女<br><br>
- 選擇家鄉:
- <select name="home">
- <option value="上海">上海</option>
- <option value="北京" selected>北京</option>
- <option value="紐約">紐約</option>
- </select><br>
- 填寫個人信息:<br>
- <textarea name="info" row="5"cols="30"></textarea><br>
- <input type="reset"value="重置"><input type="submit"value="註冊">
- </form>
- </body>
- </html>
index.jsp 失敗頁面
- <%@ page language="java" import="java.util.*" 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>
- <title>My JSP 'index.jsp' starting page</title>
- </head>
- <body>
- <h1>失敗</h1>
- </body>
- </html>
success.jsp 成功頁面
${xiaoxi}爲EL表達式 獲取request域中的鍵名爲xiaoxi的值
- <%@ page language="java" import="java.util.*" 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>
- <title>My JSP 'success.jsp' starting page</title>
- </head>
- <body>
- ${xiaoxi} <br>
- <a href="Searchall">查看所有用戶</a>
- </body>
- </html>
showall.jsp 展現所有用戶頁面
頁面使用的到JSTL表達式 即c標籤。使用c標籤需要引入頭文件<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 。
需要注意的的是El標籤配合JSTl標籤的使用,<c:forEach var="U" items="${userAll}" > 例子foeEach標籤的遍歷內容即爲EL表達式獲取的${userAll}
而且當指定別名後var="U" ,別名可以隨便起,爲了方便一般是小寫類名命名。
C標籤內遍歷的屬性也是需要用${ }獲取。此時別名U即爲當前集合中的User對象,想得到屬性只需要用 ${ U.屬性名 } 即可
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- <%
- 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 href="<%=basePath%>">
- <title>所有用戶頁面</title>
- </head>
- <body>
- <h1>${xiaoxi}</h1>
- <table width="600" border="1" cellpadding="0" >
- <tr>
- <th>ID</th>
- <th>姓名</th>
- <th>性別</th>
- <th>密碼</th>
- <th>家鄉</th>
- <th>備註</th>
- <th>操作</th>
- </tr>
- <c:forEach var="U" items="${userAll}" >
- <form action="UpdateServlet" method="post">
- <tr>
- <td><input type="text" value="${U.id}" name="id" ></td>
- <td><input type="text" value="${U.name}" name="name"></td>
- <td><input type="text" value="${U.sex}" name="sex"></td>
- <td><input type="text" value="${U.pwd}" name="pwd"></td>
- <td><input type="text" value="${U.home}" name="home"></td>
- <td><input type="text" value="${U.info}" name="info"></td>
- <td><a href="DeleteServlet?id=${U.id}">刪除</a> <input type="submit" value="更新"/></td>
- </tr>
- </form>
- </c:forEach>
- </table>
- </body>
- </html>
項目結構
最後要說的話
1.編程不是看會的,是敲會的。只要敲敲敲,纔可以深刻的記憶,當然這隻能稱之爲會用,之後深入瞭解其實現原理才能將其吸收融會貫通。
2.要養成良好的代碼習慣,整潔乾淨,命名規範,以及詳細的註釋。這對幫助你成長都大有裨益。
3.要閱讀大牛寫的代碼,一個人的力量終究是有限的,經常閱讀高質量的源碼,無形之中就會改變我們的思路,就好比自己琢磨武功,與擁有武林祕籍者相比...