TomCat的目录结构

Bin:脚本目录(存放启动、关闭这些命令)
Conf:存放配置文件的目录
Lib:存放jar包
Logs: 存放日志文件
Temp: 临时文件
Webapps: 项目发布目录
Work: jsp文件编译后生成的.java文件和.class文件存放的目录

请求行,请求头和请求体

请求行:
请求方法 请求URL HTTP版本
请求头:
Host:
User-Agent:
Accept:
Accept-Language
Accept-Encoding:
Referer:
onnection:
Cookie:
请求体:
get没有请求体,即跟在URL后面,post有请求体,不展示在地址栏里

响应行,响应头和响应体

 响应行:
HTTP协议 状态码
响应头:
Accept-Ranges: bytes
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 114
Content-Type: text/html
Date: Sun, 01 Sep 2019 14:09:54 GMT
Etag: "5d2c473c-72"
Expires: Sun, 01 Sep 2019 14:09:54 GMT
Last-Modified: Mon, 15 Jul 2019 09:28:28 GMT
Server: nginx
请求体:
图片,文本,html ......

Get请求乱码和Post请求乱码和响应乱码

get乱码
username = new String(username.getBytes("ISO-8895-1"),"utf-8") 设置xml URIEncoding"UTF-8";
Post乱码
request.setCharacterEncoding("UTF-8");
response.setContextType("text/html;charset=utf-8");

servlet 入门和执行流程

问题:为什么在浏览器输入http://localhost:8080/day10/demo1就能够执行doGet()方法

    在服务器下寻找day10项目下的xml文件
在xml下寻找/demo1
根据/demo1找到<servlet-name>
再次找相同名字的<servlet-name>
对应一个完整的类名
使用反射加载类名

案例: 使用servlet完成用户登录

  登录页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="Setvlet" method="post">
username:<input type="text" name="username" ><br>
password:<input type="password" name="password" ><br>
验证码:<input type="text" name="CheckCode"><img src="CheckCodeSetvlet" id="CheckCode">
<a id="CheckCode" >看不清,换一张</a>
<input type="submit" value=" login ">
</form>
</body>
</html>

  调用servlet

@WebServlet(name = "Servlet",urlPatterns = "/Setvlet")
public class Servlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password"); User user = new User();
user.setUsername(username);
user.setPassword(password); UserService userService = new UserServiceImpl();
User user1 = userService.login(user); response.setContentType("text/html;charset=utf-8"); ServletContext sc = this.getServletContext(); if(user!=null){
int num = 0;
if(sc.getAttribute("num")!=null){
num = (int)sc.getAttribute("num");
}
sc.setAttribute("num", ++num);
PrintWriter out = response.getWriter();
num = (int)sc.getAttribute("num");
out.print("<h1>第"+num+"位登录成功的用户</h1>");
}else{
response.sendRedirect("login.html");
}
} @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}

  调用service层

public class UserServiceImpl implements UserService {
@Override
public User login(User user) {
UserDao userDao = new UserDaoimpl();
User user1 = userDao.login(user);
return user1;
}

  调用dao层

public class UserDaoimpl implements UserDao {
@Override
public User login(User user) {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from user where username = ? and password = ?";
User user1 = null;
try {
user1 = qr.query(sql, new BeanHandler<>(User.class),new Object[]{user.getPassword(),user.getPassword()});
} catch (SQLException e) {
e.printStackTrace();
}
return user1;
}
}

  bean层

public class User {
private int id;
private String username;
private String password; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} private int age;
}

  utils层  C3P0连接池

import java.sql.Connection;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
private static DataSource ds;
static{
ds = new ComboPooledDataSource();
}
public static DataSource getDataSource(){
return ds;
}
public static Connection getConnection(){
Connection conn = null;
try{
conn = ds.getConnection();
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}

  c3p0-config.xml默认配置

     <property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///0826</property>
<property name="user">root</property>
<property name="password">123</property>

案例登录流程分析

Web基础和servlet基础的更多相关文章

  1. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  2. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

  3. J2EE基础之Servlet

    J2EE基础之Servlet 1.  什么是Servlet? Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序.它可以作为一种插件,像Applet程序一样嵌入到 ...

  4. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  5. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...

  6. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

  7. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  8. 2 Servlet基础

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. 从浏览器访问Servlet的流程 刚才发现,这里的图片不能正常显示,所以我给个链接,大家可以下载下来看从浏 ...

  9. Servlet基础简单总结(上)

    Servlet基础一些简单总结(上): 1.Java Servlet是运行在Web服务器上的Java程序2.Java平台给Servlet开发者提供了强大的API/面向对象编程平台无关/强类型/垃圾回收 ...

随机推荐

  1. Java SpringBoot使用Redis缓存和Ehcache

    <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http:// ...

  2. Linux下的find命令详解

    0x01 简介 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子 ...

  3. spark-shell启动错误

    18/06/24 16:41:40 ERROR spark.SparkContext: Error initializing SparkContext.java.net.BindException: ...

  4. distribution system index

    Resiliency:可译为容错性,强调从错误状态恢复的能力.形容词Resilient可译作“可容错的”. Elasticity:可译为伸缩性,强调根据负载进行水平伸缩的能力.形容词Elastic可译 ...

  5. postgresQL 服务器端守护进程

  6. Mybatis自定义控制台打印sql的日志工具

    调试mybatis源码时,想要更改日志的的实现工具,首先需要了解其原理. 源码包里有这部分的解释,翻译如下: Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理: ...

  7. 人脸替换(FaceSwap)的一些思考

    本文链接:https://blog.csdn.net/cy1070779077/article/details/85224347人脸替换(FaceSwap)的一些思考 最一开始,我使用了openCV( ...

  8. 目标检测标注工具labelImg安装及使用

    目标检测中,原始图片的标注过程是非常重要的,它的作用是在原始图像中标注目标物体位置并对每张图片生成相应的xml文件表示目标标准框的位置.本文介绍一款使用方便且能够标注多类别并能直接生成xml文件的标注 ...

  9. 八、postman的cookie支持

    postman中可以直接添加cookie,查看响应中的cookie https://postman-echo.com/cookies/set?foo1=bar1&foo2=bar2 var r ...

  10. IoAllocateMdl,MmProbeAndLockPages的用法

    转载地址:https://blog.csdn.net/wdykanq/article/details/7752909 IoAllocateMdl,MmProbeAndLockPages的用法 第一,M ...