手把手搭建一个完整的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,然后生成对应的表结构

  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL auto_increment,
  3. `name` varchar(255) NOT NULL,
  4. `pwd` varchar(255) NOT NULL,
  5. `sex` varchar(255) NOT NULL,
  6. `home` varchar(255) NOT NULL,
  7. `info` varchar(255) NOT NULL,
  8. PRIMARY KEY  (`id`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  10. INSERT INTO `user` VALUES ('3', '123', '123', '123', '123', '123');
  11. 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函数

  1. package com.filter;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. public class EncodingFilter implements Filter{
  10. public EncodingFilter(){
  11. System.out.println("过滤器构造");
  12. }
  13. public void destroy() {
  14. System.out.println("过滤器销毁");
  15. }
  16. public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
  17. request.setCharacterEncoding("utf-8"); //将编码改为utf-8
  18. response.setContentType("text/html;charset=utf-8");
  19. chain.doFilter(request, response);
  20. }
  21. public void init(FilterConfig arg0) throws ServletException {
  22. System.out.println("过滤器初始化");
  23. }
  24. }

6.到web.xml下进行对EncodingFilter相应的配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <display-name></display-name>
  8. <filter>
  9. <filter-name>EncodingFilter</filter-name>
  10. <filter-class>com.filter.EncodingFilter</filter-class><!--全路径 从根包开始一直到类名-->
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>EncodingFilter</filter-name>
  14. <url-pattern>/*</url-pattern> <!--*即为过滤所有-->
  15. </filter-mapping>
  16. <welcome-file-list>
  17. <welcome-file>denglu.jsp</welcome-file>
  18. </welcome-file-list>
  19. </web-app>

7.在util下新建一个DBconn类用来处理对数据库的连接操作(用户名或密码按照自己的数据库更改)

  1. package com.util;
  2. import java.sql.*;
  3. public class DBconn {
  4. static String url = "jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8";
  5. static String username = "root";
  6. static String password = "root";
  7. static Connection  conn = null;
  8. static ResultSet rs = null;
  9. static PreparedStatement ps =null;
  10. public static void init(){
  11. try {
  12. Class.forName("com.mysql.jdbc.Driver");
  13. conn = DriverManager.getConnection(url,username,password);
  14. } catch (Exception e) {
  15. System.out.println("init [SQL驱动程序初始化失败!]");
  16. e.printStackTrace();
  17. }
  18. }
  19. public static int addUpdDel(String sql){
  20. int i = 0;
  21. try {
  22. PreparedStatement ps =  conn.prepareStatement(sql);
  23. i =  ps.executeUpdate();
  24. } catch (SQLException e) {
  25. System.out.println("sql数据库增删改异常");
  26. e.printStackTrace();
  27. }
  28. return i;
  29. }
  30. public static ResultSet selectSql(String sql){
  31. try {
  32. ps =  conn.prepareStatement(sql);
  33. rs =  ps.executeQuery(sql);
  34. } catch (SQLException e) {
  35. System.out.println("sql数据库查询异常");
  36. e.printStackTrace();
  37. }
  38. return rs;
  39. }
  40. public static void closeConn(){
  41. try {
  42. conn.close();
  43. } catch (SQLException e) {
  44. System.out.println("sql数据库关闭异常");
  45. e.printStackTrace();
  46. }
  47. }
  48. }

8.在entity下新建一个User实体类(实体即抽象出来的用户对象,对应数据库中的user表,表中每个字段在实体中为一个属性,也可以理解为一个User对象对应数据库中的user表一条记录)

  1. package com.entity;
  2. public class User {
  3. private int id;
  4. private String name;
  5. private String pwd;
  6. private String sex;
  7. private String home;
  8. private String info;
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getPwd() {
  22. return pwd;
  23. }
  24. public void setPwd(String pwd) {
  25. this.pwd = pwd;
  26. }
  27. public String getSex() {
  28. return sex;
  29. }
  30. public void setSex(String sex) {
  31. this.sex = sex;
  32. }
  33. public String getHome() {
  34. return home;
  35. }
  36. public void setHome(String home) {
  37. this.home = home;
  38. }
  39. public String getInfo() {
  40. return info;
  41. }
  42. public void setInfo(String info) {
  43. this.info = info;
  44. }
  45. }

9.在dao下新建一个UserDao接口  以及对应的方法实现类(使用接口类是为了规范开发)

UserDao.java

  1. package com.dao;
  2. import java.util.List;
  3. import com.entity.User;
  4. public interface UserDao {
  5. public boolean login(String name,String pwd);//登录
  6. public boolean register(User user);//注册
  7. public List<User> getUserAll();//返回用户信息集合
  8. public boolean delete(int id) ;//根据id删除用户
  9. public boolean update(int id,String name, String pwd,String sex, String home,String info) ;//更新用户信息
  10. }

新建UserDaoImpl.java     实现UserDao接口,及未实现的方法     (SQL语句建议在mysql中测试以下,没有问题然后在拿到实现类中使用,可以避免无必要的麻烦)

本例子SQL使用字符串拼接的方式,其实还有一种预加载的方式,有兴趣的童鞋可以参考我的博客,了解预加载的方式处理SQL语句与字符串拼接方式的区别。

  1. package com.dao;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import com.entity.User;
  7. import com.util.DBconn;
  8. public class UserDaoImpl implements UserDao{
  9. public boolean register(User user) {
  10. boolean flag = false;
  11. DBconn.init();
  12. int i =DBconn.addUpdDel("insert into user(name,pwd,sex,home,info) " +
  13. "values('"+user.getName()+"','"+user.getPwd()+"','"+user.getSex()+"','"+user.getHome()+"','"+user.getInfo()+"')");
  14. if(i>0){
  15. flag = true;
  16. }
  17. DBconn.closeConn();
  18. return flag;
  19. }
  20. public boolean login(String name, String pwd) {
  21. boolean flag = false;
  22. try {
  23. DBconn.init();
  24. ResultSet rs = DBconn.selectSql("select * from user where name='"+name+"' and pwd='"+pwd+"'");
  25. while(rs.next()){
  26. if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
  27. flag = true;
  28. }
  29. }
  30. DBconn.closeConn();
  31. } catch (SQLException e) {
  32. e.printStackTrace();
  33. }
  34. return flag;
  35. }
  36. public List<User> getUserAll() {
  37. List<User> list = new ArrayList<User>();
  38. try {
  39. DBconn.init();
  40. ResultSet rs = DBconn.selectSql("select * from user");
  41. while(rs.next()){
  42. User user = new User();
  43. user.setId(rs.getInt("id"));
  44. user.setName(rs.getString("name"));
  45. user.setPwd(rs.getString("pwd"));
  46. user.setSex(rs.getString("sex"));
  47. user.setHome(rs.getString("home"));
  48. user.setInfo(rs.getString("info"));
  49. list.add(user);
  50. }
  51. DBconn.closeConn();
  52. return list;
  53. } catch (SQLException e) {
  54. e.printStackTrace();
  55. }
  56. return null;
  57. }
  58. public boolean update(int id,String name, String pwd,String sex, String home,String info) {
  59. boolean flag = false;
  60. DBconn.init();
  61. String sql ="update user set name ='"+name
  62. +"' , pwd ='"+pwd
  63. +"' , sex ='"+sex
  64. +"' , home ='"+home
  65. +"' , info ='"+info+"' where id = "+id;
  66. int i =DBconn.addUpdDel(sql);
  67. if(i>0){
  68. flag = true;
  69. }
  70. DBconn.closeConn();
  71. return flag;
  72. }
  73. public boolean delete(int id) {
  74. boolean flag = false;
  75. DBconn.init();
  76. String sql = "delete  from user where id="+id;
  77. int i =DBconn.addUpdDel(sql);
  78. if(i>0){
  79. flag = true;
  80. }
  81. DBconn.closeConn();
  82. return flag;
  83. }
  84. }

10.在servlet下创建DengluServlet用来实现对用户登录的操作(Servlet有两种方式创建,一种手工创建。另一种程序自动生成。前者自己创建java类,实现Servlet具体内容,然后需要去WEB_INF下的web.xml去配置servlet  . 而后者则直接由程序替我们配置好了Servlet)本例子使用第二种方式生成Servlet

DengluServlet.java

  1. package com.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.dao.UserDao;
  9. import com.dao.UserDaoImpl;
  10. public class DengluServlet extends HttpServlet {  //需要继承HttpServlet  并重写doGet  doPost方法
  11. public void doGet(HttpServletRequest request, HttpServletResponse response)
  12. throws ServletException, IOException {
  13. doPost(request, response);  //将信息使用doPost方法执行   对应jsp页面中的form表单中的method
  14. }
  15. public void doPost(HttpServletRequest request, HttpServletResponse response)
  16. throws ServletException, IOException {
  17. String name = request.getParameter("name"); //得到jsp页面传过来的参数
  18. String pwd = request.getParameter("pwd");
  19. UserDao ud = new UserDaoImpl();
  20. if(ud.login(name, pwd)){
  21. request.setAttribute("xiaoxi", "欢迎用户"+name); //向request域中放置信息
  22. request.getRequestDispatcher("/success.jsp").forward(request, response);//转发到成功页面
  23. }else{
  24. response.sendRedirect("index.jsp"); //重定向到首页
  25. }
  26. }
  27. }

有两点要注意的地方:

一: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).转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

11.在servlet下创建一个ZhuceServlet用来实现用户注册的操作

ZhuceServlet.java

  1. package com.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.dao.UserDao;
  9. import com.dao.UserDaoImpl;
  10. import com.entity.User;
  11. public class ZhuceServlet extends HttpServlet {
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. doPost(request, response);
  15. }
  16. public void doPost(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. String name = request.getParameter("name"); //获取jsp页面传过来的参数
  19. String pwd = request.getParameter("pwd");
  20. String sex = request.getParameter("sex");
  21. String home = request.getParameter("home");
  22. String info = request.getParameter("info");
  23. User user = new User(); //实例化一个对象,组装属性
  24. user.setName(name);
  25. user.setPwd(pwd);
  26. user.setSex(sex);
  27. user.setHome(home);
  28. user.setInfo(info);
  29. UserDao ud = new UserDaoImpl();
  30. if(ud.register(user)){
  31. request.setAttribute("username", name);  //向request域中放置参数
  32. //request.setAttribute("xiaoxi", "注册成功");
  33. request.getRequestDispatcher("/denglu.jsp").forward(request, response);  //转发到登录页面
  34. }else{
  35. response.sendRedirect("index.jsp");//重定向到首页
  36. }
  37. }
  38. }

12.在servlet下创建SearchallServlet用来返回数据库中所有用户信息

Searchall.java

  1. package com.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import com.dao.UserDao;
  10. import com.dao.UserDaoImpl;
  11. import com.entity.User;
  12. public class Searchall extends HttpServlet {
  13. public void doGet(HttpServletRequest request, HttpServletResponse response)
  14. throws ServletException, IOException {
  15. doPost(request, response);
  16. }
  17. public void doPost(HttpServletRequest request, HttpServletResponse response)
  18. throws ServletException, IOException {
  19. UserDao ud = new UserDaoImpl();
  20. List<User> userAll = ud.getUserAll();
  21. request.setAttribute("userAll", userAll);
  22. request.getRequestDispatcher("/showall.jsp").forward(request, response);
  23. }
  24. }

13.在servlet下创建DeleteServlet用来删除用户操作

DeleteServlet.java

  1. package com.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.dao.UserDao;
  9. import com.dao.UserDaoImpl;
  10. public class DeleteServlet extends HttpServlet {
  11. public void doGet(HttpServletRequest request, HttpServletResponse response)
  12. throws ServletException, IOException {
  13. doPost(request, response);
  14. }
  15. public void doPost(HttpServletRequest request, HttpServletResponse response)
  16. throws ServletException, IOException {
  17. String id = request.getParameter("id");
  18. int userId = Integer.parseInt(id);
  19. UserDao ud = new UserDaoImpl();
  20. if(ud.delete(userId)){
  21. request.setAttribute("xiaoxi", "删除成功");
  22. request.getRequestDispatcher("/Searchall").forward(request, response);
  23. }else{
  24. response.sendRedirect("index.jsp");
  25. }
  26. }
  27. }

14.在servlet下创建UpdateServlet操作用来更新用户信息

UpdateServlet.java

  1. package com.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.dao.UserDao;
  9. import com.dao.UserDaoImpl;
  10. import com.entity.User;
  11. public class UpdateServlet extends HttpServlet {
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. doPost(request, response);
  15. }
  16. public void doPost(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. String id = request.getParameter("id");
  19. int userId = Integer.parseInt(id);
  20. String name = request.getParameter("name");
  21. String pwd = request.getParameter("pwd");
  22. String sex = request.getParameter("sex");
  23. String home = request.getParameter("home");
  24. String info = request.getParameter("info");
  25. System.out.println("------------------------------------"+userId);
  26. UserDao ud = new UserDaoImpl();
  27. if(ud.update(userId, name, pwd, sex, home, info)){
  28. request.setAttribute("xiaoxi", "更新成功");
  29. request.getRequestDispatcher("/Searchall").forward(request, response);
  30. }else{
  31. response.sendRedirect("index.jsp");
  32. }
  33. }
  34. }

15.配置servlet       如果非手打而用MyEclipse生成则不用配置  附完整web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <display-name></display-name>
  8. <filter><!--过滤器配置-->
  9. <filter-name>EncodingFilter</filter-name>
  10. <filter-class>com.filter.EncodingFilter</filter-class>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>EncodingFilter</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. <servlet><!--servlet类路径配置-->
  17. <servlet-name>DengluServlet</servlet-name>
  18. <servlet-class>com.servlet.DengluServlet</servlet-class>
  19. </servlet>
  20. <servlet>
  21. <servlet-name>ZhuceServlet</servlet-name>
  22. <servlet-class>com.servlet.ZhuceServlet</servlet-class>
  23. </servlet>
  24. <servlet>
  25. <servlet-name>Searchall</servlet-name>
  26. <servlet-class>com.servlet.Searchall</servlet-class>
  27. </servlet>
  28. <servlet>
  29. <servlet-name>DeleteServlet</servlet-name>
  30. <servlet-class>com.servlet.DeleteServlet</servlet-class>
  31. </servlet>
  32. <servlet>
  33. <servlet-name>UpdateServlet</servlet-name>
  34. <servlet-class>com.servlet.UpdateServlet</servlet-class>
  35. </servlet>
  36. <servlet-mapping><!--servlet类映射配置-->
  37. <servlet-name>DengluServlet</servlet-name>
  38. <url-pattern>/DengluServlet</url-pattern>
  39. </servlet-mapping>
  40. <servlet-mapping>
  41. <servlet-name>ZhuceServlet</servlet-name>
  42. <url-pattern>/ZhuceServlet</url-pattern>
  43. </servlet-mapping>
  44. <servlet-mapping>
  45. <servlet-name>Searchall</servlet-name>
  46. <url-pattern>/Searchall</url-pattern>
  47. </servlet-mapping>
  48. <servlet-mapping>
  49. <servlet-name>DeleteServlet</servlet-name>
  50. <url-pattern>/DeleteServlet</url-pattern>
  51. </servlet-mapping>
  52. <servlet-mapping>
  53. <servlet-name>UpdateServlet</servlet-name>
  54. <url-pattern>/UpdateServlet</url-pattern>
  55. </servlet-mapping>
  56. <welcome-file-list><!--默认首页地址-->
  57. <welcome-file>denglu.jsp</welcome-file>
  58. </welcome-file-list>
  59. </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");来取值

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>登录注册页面</title>
  6. </head>
  7. <body >
  8. <form action="DengluServlet"  method="post"  style="padding-top:-700px;">
  9. 用户名:<input type="text" name="name"value=""><br><br>
  10. 密码:  <input type="password" name="pwd"value=""><br><br>
  11. <input type="submit"value="登录"name="denglu"><input type="reset"value="重置"><br>
  12. </form>
  13. <form action="zhuce.jsp">
  14. <input type="submit"value="新用户注册">
  15. </form>
  16. </body>
  17. </html>


zhuce.jsp  用户注册页面

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <title>My JSP 'BB.jsp' starting page</title>
  10. </head>
  11. <body >
  12. <form action="ZhuceServlet"method="post" style="padding-top:-700px;">
  13. 输入用户名:<input name="name" type="text"><br><br>
  14. 输入密码:<input name="pwd" type="password"><br><br>
  15. 选择性别:<input type="radio"name="sex"value="男"checked>男
  16. <input type="radio"name="sex"value="女">女<br><br>
  17. 选择家乡:
  18. <select name="home">
  19. <option value="上海">上海</option>
  20. <option value="北京" selected>北京</option>
  21. <option value="纽约">纽约</option>
  22. </select><br>
  23. 填写个人信息:<br>
  24. <textarea name="info" row="5"cols="30"></textarea><br>
  25. <input type="reset"value="重置"><input type="submit"value="注册">
  26. </form>
  27. </body>
  28. </html>


index.jsp  失败页面

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <title>My JSP 'index.jsp' starting page</title>
  10. </head>
  11. <body>
  12. <h1>失敗</h1>
  13. </body>
  14. </html>

success.jsp  成功页面

${xiaoxi}为EL表达式  获取request域中的键名为xiaoxi的值

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <title>My JSP 'success.jsp' starting page</title>
  10. </head>
  11. <body>
  12. ${xiaoxi} <br>
  13. <a href="Searchall">查看所有用户</a>
  14. </body>
  15. </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.属性名 }     即可

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11. <title>所有用户页面</title>
  12. </head>
  13. <body>
  14. <h1>${xiaoxi}</h1>
  15. <table  width="600" border="1" cellpadding="0" >
  16. <tr>
  17. <th>ID</th>
  18. <th>姓名</th>
  19. <th>性别</th>
  20. <th>密码</th>
  21. <th>家乡</th>
  22. <th>备注</th>
  23. <th>操作</th>
  24. </tr>
  25. <c:forEach var="U" items="${userAll}"  >
  26. <form action="UpdateServlet" method="post">
  27. <tr>
  28. <td><input type="text" value="${U.id}" name="id" ></td>
  29. <td><input type="text" value="${U.name}" name="name"></td>
  30. <td><input type="text" value="${U.sex}" name="sex"></td>
  31. <td><input type="text" value="${U.pwd}" name="pwd"></td>
  32. <td><input type="text" value="${U.home}" name="home"></td>
  33. <td><input type="text" value="${U.info}" name="info"></td>
  34. <td><a href="DeleteServlet?id=${U.id}">删除</a>  <input type="submit" value="更新"/></td>
  35. </tr>
  36. </form>
  37. </c:forEach>
  38. </table>
  39. </body>
  40. </html>

项目结构

手把手搭建一个完整的javaweb项目的更多相关文章

  1. react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

    react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...

  2. Vue-cli安装步骤,搭建一个完整的 Vue 项目

    安装node环境下载 node.js 官网地址:https://nodejs.org/en/ 下载完成后打开然后一路next安装完成后打开 dos 窗口输入命令:node -v 回车会输出node的版 ...

  3. asp.netmvc 三层搭建一个完整的项目

    接下来用 asp.net mvc 三层搭建一个完整的项目: 架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案 ...

  4. 搭建一个完整的Java开发环境

    搭建一个完整的Java开发环境 作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,ecl ...

  5. 用Eclipse 搭建一个Maven Spring SpringMVC 项目

    1: 先创建一个maven web  项目: 可以参照之前的文章:  用Maven 创建一个 简单的 JavaWeb 项目 创建好之后的目录是这样的; 2: 先配置maven  修改pom.xml & ...

  6. 利用vue-cli配合vue-router搭建一个完整的spa流程

    好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...

  7. 小记如何有顺序的搭建一个Spring的web项目

    如何有顺序的搭建一个Spring的web项目 一.新建一个简单的maven,war工程 eclipse下如有报错,右键 Deployment 单击 Generate 生成web.xml后可解决报错 二 ...

  8. 快速搭建一个基于react的项目

    最近在学习react,快速搭建一个基于react的项目 1.创建一个放项目文件夹,用编辑器打开 2.打开集成终端输入命令: npm install -g create-react-app 3. cre ...

  9. 11. 搭建一个完整的K8S集群

    11. 搭建一个完整的Kubernetes集群 1. kubectl的命令遵循分类的原则(重点) 语法1: kubectl 动作 类 具体的对象 例如: """ kube ...

随机推荐

  1. tomcat8080端口占用解决办法

    打开控制台,在窗口中输入指令:netstat -ano | findstr 8080       指令的意思是找出占用8080端口的进程pid 上图中表示占用进程pid为23288,然后再次输入指令: ...

  2. linux安装openldap步骤

    目录 虚拟机环境:centos 7 一.环境准备 1.关闭 selinux firewalld 临时: setenforce 0  永久: vi /etc/sysconfig/selinux SELI ...

  3. PHP常用180函数总结

    数学函数 1.abs(): 求绝对值 <span style="font-size: 14px;">$abs = abs(-4.2); //4.2<br>& ...

  4. Apache Maven(一):快速入门

    Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一 ...

  5. Myeclipse上配置weblogic11g(10.3.6)的方法教程

    1.在windows-perferences-MyEclipse-Servers-weblogic下找到weblogic10.X 2.按照参考我上面的附图填入weblogic的相关路径(如果你是完全按 ...

  6. tp5.0初入

    1.目录结构 |-application 应用目录 是整个网站的核心 |---|---index 前台目录 |---|-----|---controller 控制器 |---|-----|---mod ...

  7. 详解 JavaScript 中 splice() 方法

    splice() 方法是一个比较少用的方法,但是功能确实很好,并且在我们 coding 的时候,经常有需要 splice() 方法,先介绍一下该方法. 在 JavaScript 中 splice() ...

  8. VIM安装YCM插件

    折腾了两天,终于好了 1.配置VIM (1)下载相关插件 sudo apt-get install git sudo apt-get install build-essential cmake sud ...

  9. Linux YUM (Yellowdog Updater, Modified) Commands for Package Management

    Linux YUM (Yellowdog Updater, Modified) Commands for Package Management In this article, we will lea ...

  10. POJ:1222-EXTENDED LIGHTS OUT(矩阵反转)

    EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12956 Accepted: 8186 ...