一. 简单登录案例

流程图:

项目结构图

前端代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>哈哈登录页面</h1>
<form action="login" method="post">
用户名<input type="text" name="username" /></br></br>
密码<input type="password" name="pwd" /></br></br>
<input type="submit" value="登录"/>
</form>
</body

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>day13</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>
<servlet>
<description></description>
<display-name>login</display-name>
<servlet-name>login</servlet-name>
<servlet-class>com._51doit.admin.login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

 login部分代码

public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
UserService userService = new UserServiceImpl();
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
try {
// 获取前端数据
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
System.out.println("password:"+pwd);
// 登录处理
User user = userService.login(username, pwd);
if(user != null) {
response.sendRedirect("/day13/success.html");
}else {
System.out.println("失败");
response.sendRedirect("/day13/login.html");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

service层

UserService接口

public interface UserService {

    // 登录
public User login(String username,String pwd) throws Exception; }

UserService实现类(UserServiceImpl)

public class UserServiceImpl implements UserService{
UserDao userDao = new UserDaoImpl();
@Override
public User login(String username, String pwd) throws Exception {
User user = userDao.getUserFromdB(username, pwd);
return user;
}
}

dao层

UserDao接口

public interface UserDao {
// 从数据库获取信息
public User getUserFromdB(String username,String pwd) throws Exception;
}

UserDaoImpl(UserDao接口实现类)

public class UserDaoImpl  implements UserDao{
static QueryRunner runner;
static {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
runner = new QueryRunner(dataSource);
}
// 根据用户和密码名查询用户
@Override
public User getUserFromdB(String username, String pwd) throws Exception {
String sql = "select * from user where username = ? and password = ?";
User user = runner.query(sql, new BeanHandler<>(User.class),username,pwd);
return user;
}
}

pojo层

注意:此处一定要有无参构造方法

public class User {
private int uid;
private String username;
private String nickname;
private String password;
private String phonenumber;
private String email;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
} public User() {
super();
}
public User(int uid, String username, String nickname, String password, String phonenumber, String email) {
super();
this.uid = uid;
this.username = username;
this.nickname = nickname;
this.password = password;
this.phonenumber = phonenumber;
this.email = email;
}
@Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", nickname=" + nickname + ", password=" + password
+ ", phonenumber=" + phonenumber + ", email=" + email + "]";
}
}

改进:后端传user对象至前端并在前端页面显示出来

思路:直观想法是直接将user传至前端,并显示出来,但html页面中并不能获取到user,解决方法:将user对象存入域中,使用jsp文件代替html文件并在jsp文件中使用EL表达式获取user对象的username属性。代码如下,此处只鞋跟上面的差别代码

前端部分(此处是jsp文件不是html文件):

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>登录成功 欢迎${user.username} </h1>
</body>
</html>

login部分

二. 域

1. 概念:

  存储数据,并且有一定访问范围的对象[任意数据   object]

2.web四大域

(1)page(配置域),一个servlet或是一个页面(访问范围)

(2)request(请求域),一次请求(访问范围),由于存在转发,所以可以多个servlet进行数据共享

(3)session(session域):一个用户(访问范围)

(4)application:整个web项目(访问范围)

3. 域存储数据(此处以session域为例)

session.setAttribute(“key”, object);

4.EL(Expression Language)表达式:${}

  其可以获取java对象,调用java方法,执行算术运算

5.jsp页面从域中取数据

 ${key}

三. jsp(java server page):在页面上写java代码

为了防止java代码和html胶合,jsp文档只用EL展示数据,不写java代码,代码(获取请求参数,操作数据库,跳转页面)写在servlet中

四. 查询商品列表案例

大致思路和上诉登录案例相似

此案例涉及新的知识点:jsq页面上遍历数据(使用jstl标签)(不在jsp文档中使用java代码,但又要遍历数据,所以使用jstl标签)

代码结构图

 前端代码:涉及jstl标签的使用(不在jsp文档中使用java代码,但又要遍历数据,所以使用jstl标签)

p_list.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<button>
<a href="/day13/GetAllProducts">查詢商品列表</a>
</button>
<br />
<br />
<br />
<table border="1px" cellspacing="0" width="100%">
<tr>
<th>id</th>
<th>name</th>
<th>category</th>
<th>pnum</th>
<th>description</th>
<th>描述</th>
</tr>
<!-- 迭代获取数据,即遍历 -->
<c:forEach items="${p_list }" var="product">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>${product.category}</td>
<td>${product.pnum}</td>
<td>${product.description}</td>
</c:forEach>
</table>
</body>
</html>

重要代码(使用jstl标签遍历列表部分)

 后端部分

GetAllProducts

public class GetAllProducts extends HttpServlet {
private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ProductsService productsService = new ProductsServiceImpl();
try {
List<Products> list = productsService.getAllProducts();
System.out.println(list);
HttpSession session = request.getSession();
session.setAttribute("p_list", list);
response.sendRedirect("/day13/p_list.jsp");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 dao层

ProductsDao接口

public interface ProductsDao {
// 从数据库中获取product
public List<Products> getProductsFromDB() throws Exception;
}

实现类ProductsDaoImpl

public class ProductsDaoImpl implements ProductsDao {
// 数据库连接池的创建
static QueryRunner runner;
static {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
runner = new QueryRunner(dataSource);
}
// 从数据库中获取products
@Override
public List<Products> getProductsFromDB() throws Exception {
String sql = "select * from products";
List<Products> list = runner.query(sql, new BeanListHandler<>(Products.class));
return list;
}
}

service层

ProductsServices接口

public interface ProductsService {
public List<Products> getAllProducts() throws Exception;
}

实现类ProductsServicesImpl

public class ProductsServiceImpl implements ProductsService{
// 调用Dao层,获取数据
@Override
public List<Products> getAllProducts() throws Exception {
ProductsDao productsDao = new ProductsDaoImpl();
List<Products> list = productsDao.getProductsFromDB();
return list;
}
}

pojo层

Products

package com._51doit.pojo;

public class Products {
int id ;
String name ;
double price ;
String category ;
int pnum ;
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 getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public int getPnum() {
return pnum;
}
public void setPnum(int pnum) {
this.pnum = pnum;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
} public Products() {
super();
}
public Products(int id, String name, double price, String category, int pnum, String description) {
super();
this.id = id;
this.name = name;
this.price = price;
this.category = category;
this.pnum = pnum;
this.description = description;
}
@Override
public String toString() {
return "Products [id=" + id + ", name=" + name + ", price=" + price + ", category=" + category + ", pnum="
+ pnum + ", description=" + description + "]";
}
}

运行结果:(点击查询商品列表按钮后)

以上GetAllProducts代码有不足之处,即数据存储在session域中,一个用户的多个页面都可以获取这些数据,若是只想让某个页面获取这个数据就做不到了。解决办法---->将数据存储在request域中去,此时数据只能被某次请求获取,代码如下

此处的url不需要加项目名,因为转发是服务器内部请求

 

零基础学习java------34---------登录案例,域,jsp(不太懂),查询商品列表案例(jstl标签)的更多相关文章

  1. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  2. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  3. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  4. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  5. 零基础学Java第一节(语法格式、数据类型)

    本篇文章是<零基础学Java>专栏的第一篇文章,从本篇文章开始,将会连更本专栏,带领大家将Java基础知识彻底学懂,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! ...

  6. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  7. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  8. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

      此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...

  9. Salesforce 集成篇零基础学习(一)Connected App

    本篇参考: https://zhuanlan.zhihu.com/p/89020647 https://trailhead.salesforce.com/content/learn/modules/c ...

随机推荐

  1. vue路由监听和参数监听

    1.路由携带数据跳转 routerAction(hideDisplays, data) { switch (hideDisplays) { case "pubAccountMenu" ...

  2. java 三大特性_继承、封装、多态_day005

    一.继承: java的三大特性之一.两个类之间通过extends关键字来描述父子关系,子类便可拥有父类的公共方法和公共属性.子类可以继承父类的方法和属性,子类也可以自己定义没有的方法或者通过覆盖父类的 ...

  3. 攻防世界 WEB 高手进阶区 NSCTF web2 Writeup

    攻防世界 WEB 高手进阶区 NSCTF web2 Writeup 题目介绍 题目考点 php基本函数语法 加密解密函数 base64_decode().str_rot13() 字符串反转函数 str ...

  4. JMeter学习笔记--工具简单介绍

    一.JMeter 介绍 Apache JMeter是纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,Java ...

  5. 查看Git提交的代码统计

    1,提交Top5: git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5 2,某用户提交的代码统计 git log ...

  6. golang常用库:日志记录库-logrus使用

    介绍 logrus 它是一个结构化.插件化的日志记录库.完全兼容 golang 标准库中的日志模块.它还内置了 2 种日志输出格式 JSONFormatter 和 TextFormatter,来定义输 ...

  7. Django笔记&教程 4-1 模型(Models)介绍

    Django 自学笔记兼学习教程第4章第1节--模型(Models)介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/db/mo ...

  8. [atAGC045C]Range Set

    首先我们可以把所有位置都变为1,因此不妨假设$a\le b$ 一个字符串$s$合法当且仅当:将其中每一段长度不小于$a$的0变成1后,存在一段1的长度都不小于$b$ 证明:我们称$S_{a,b}$为通 ...

  9. SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(下)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节,继续使用 spock 测试我们自己封装的 WebClient 测试针对 r ...

  10. android测试之monkey测试

    1.首先安装SDK包 2.配置环境变量 3.打开CMD命令窗口,查看是否安装成功 命令:adb version 4.要做monkey测试的安卓包名,获取方式如下(必须启动要获取报名的app) 1.ad ...