Servlet
Web开发的核心知识
1、什么是web开发?
两台计算机之间,通过网络进行资源文件共享的获得,web通信。
web开发:确保本次的web通信顺利的进行。
**2、web 通信过程中两台计算机之间扮演着什么角色?**
1、客户端:用于用户发送请求
2、服务端:提供资源共享文件
**3、资源文件**
计算机上面所有的文件都可以称为资源文件(理论上)
1、静态资源文件
定义:文件内容是固定的,不能随着请求的改变而变化。
例子:图片……
特点:服务端推送静态资源文件给客户端,文件是在客户端上运行的。
2、动态资源文件
定义:文件内容可以根据用户的请求的变化而变化,文件内容不固定。
举例:Java文件……
**4、web通信过程中,两台计算机如何进行通信**
1、c/s结构的通信方式
2、b/s结构的通信方式
**5、网络的协议包**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210517153537308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phbWVzX19fX0dvc2xpbmc=,size_16,color_FFFFFF,t_70)
定义:用于包裹在网络中传输的二进制数据,它存在固定的空间,用于存放特定的数据,便于接收方分析得到数据。
b/s结构的通信方式使用HTTP网络传输协议。
**HTTP网络传输协议**
!HTTP请求协议包
1、浏览器在发送请求的时候负责创建的
2、是浏览器负责将请求信息,写入到协议包中。
2、4层结构
1、请求行(
url:请求的资源文件地址
method:浏览器请求方式(POST,GET)
)
2、请求头(
浏览器希望获得的资源文件类型
html png text/htm
浏览器希望获得的一个资源文件的依赖字符集
如果说采用GET的方式发送请求,这个地方会保存参数
)
3、空白行(
隔离作用
)
4、请求体(
如果说采用POST的方式发送请求,这个地方会保存参数
)
!HTTP响应协议包
1、服务端在准备推送文件时负责创建的
2、可以由资源调度写入,也可以时Java命令
3、4层结构
1、状态行(
状态码
)
2、响应头(
返回文件的类型
浏览器希望获得的一个资源文件的依赖字符集
)
3、空白行(
隔离作用
)
4、响应体(
静态资源文件/动态资源文件
运行的结果(二进制)
)
7、浏览器如何向服务端发送请求
1、通过from表单
2、通过超链接
3、通过脚本语言
</head>
<%-- 第一张请求方式 from表单 --%>
<body>
<form action="http://www.baidu.com" method="get">
<input type="submit" value="提交">
</form>
<%-- 第二种请求方式:超链接 --%>
<a href="http://www.baidu.com?username=zhangsang&pass=123">去百度</a>
<%-- 第三种请求方式:脚本 JS --%>
<input type="button" value="去百度" onclick="fun()">
</body>
<script type="application/javascript">
window.location="http://www.baidu.com?username=zhangsang&pass=123";
</script>
</html>
8、请求方式 GET / POST
GET请求方式:
1、要求浏览器发送请求的时候携带的请求参数不能超过4k
2、要求浏览器发送请求的时候,参数写入到请求头中
3、要求浏览器在发送请求的时候,将参数显示在地域栏当中
4、要求浏览器接收到地资源必须缓存在内存当中
POST请求方式:
1、要求浏览器发送请求的时候携带的请求参数不限制其大小。
2、要求浏览器发送请求的时候,参数写入到请求体当中
3、要求浏览器在发送请求的时候,将参数隐藏在地域栏当中
4、要求浏览器接收到地资源不能缓存在内存当中
9、如何控制浏览器采用什么请求方式
1、通过from表单:可以用GET/POST
2、通过超链接:只能用GET
3、通过脚本语言:只能用GET
10、如何命令浏览器在发送请求时携带参数
1、通过from表单:可以用GET/POST
通过表单标签地name属性来设置属性:
<form action="http://www.baidu.com" method="get">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
2、通过超链接:只能用GET
3、通过脚本语言:只能用GET
Servlet
1、 Servlet简介
servlet是运行在web服务器或应用服务器上地程序,他是作为来自web浏览器或其他HTTP客户端地请求和HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet,你可以手机来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动他创建网页。
优点:
1、性能好
2、不用单独创建进程,来处理每个客户端的请求
3、独立于平台,JAVA写的
4、Servlet信任的
5、Java中所有的类库都可以在Servlet当中使用。
2、环境设置
1、JDK
2、web服务器:TomCat
3、第一个Servlet程序 Hello World
1、导入servlet包
2、写一个servlet类
public class HelloServlet extends HttpServlet {
private String message;
//Servlet初始化
@Override
public void init() throws ServletException {
message = "hello world";
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容的类型
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.write("<h1>"+message+"</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
3、配置Servlet web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>oneServlet</servlet-name>
<servlet-class>com.wdzl.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>oneServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
4、servlet的执行过程
首先客户端发送请求,如果请求路径和web.xml中的虚拟路径相匹配,那么当前的请求就会被servlet拦截,然后通过这个标签获得了Servlet的别名,通过别名获得Servlet的名称,然后通过类的全路径,找到对应的Servlet类,再然后就执行Servlet程序,执行以后就会得到相应的响应结果。
5、Servlet的执行原理
1、浏览器向服务器发送GET请求
2、Tomcat接收到请求,此时,Tomcat产生两个对象 HttpServletRequest req, HttpServletResponse resp
3、Tomcat根据url找到目标Servlet,并且创建一个线程。
4、将req,resp传递给该线程。
5、Tomcat调用Servlet当中的service()方法。
6、service根据本次的请求的请求类型来判断调用doGet()还是调用doPost()方法。
7、doGet()或者是doPost()结束之后把结果返回给Tomcat。
8、线程销毁
6、Servlet的生命周期
就是Servlet从创建到毁灭的整个过程
1、Servlet通过调用init()方法进行初始化
2、Servlet通过调用service()方法处理客户端请求
3、Servlet通过调用destroy()方法进行销毁。
4、Servlet由JVM中的垃圾回收器进行回收
init()
只能调用一次,
service()
由它决定doGet还是doPost
**doGet/doPost **
destroy()
只能调用一次
7、通过三种方式触发Servlet
servlet类
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应类型
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
PrintWriter writer = response.getWriter();
writer.write("<h1>用户名:"+username+"<h1>");
writer.write("<h1>密码:"+password+"<h1>");
}
}
inddex.jsp
<body>
<%-- 表单--%>
<center>
<form action="./login" method="get">
用户名: <input type="text" name="username"><br>
密码: <input type="text" name="password"><br>
<input type="submit" value="提交">
</form>
<br><br>
<%-- 超链接--%>
<a href="/login?username=张三&password=123456">点击触发</a>
<%--脚本--%>
<input type="button" value="点击触发" onclick="fun()">
</center>
</body>
<script type="application/javascript">
function fun(){
window.location="/login?username=张三&password=123456";
}
</script>
</html>
web.xml
<!-- 表单提交 GET -->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.wdzl.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
注意点:
当你在表单中将get方式提交改变为post提交,会出现中文乱码情况,解决方案如下:
8、采用注解配置Servlet
前端代码
<body>
<center>
<form action="./regiest" method="post">
<h1>注册</h1>
<input type="hidden" name="id"><br><br>
姓名:<input type="text" name="username"><br><br>
密码:<input type="password" name="password"><br><br>
性别:
<select name="sex">
<option value="man">男</option>
<option value="woman">女</option>
</select><br><br>
成绩:
<input type="radio" name="cj" value="jige">及格
<input type="radio" name="cj" value="nojige">不及格<br><br>
爱好:
<input type="radio" name="pingpanng" value="pingpang" checked="checked">打乒乓
<input type="radio" name="ball" value="ball">篮球
<input type="radio" name="song" value="song">唱歌
<br><br>
<input type="submit" value="提交">
</form>
</center>
</body>
后端代码:
@WebServlet("/regiest")
public class RegiestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String cj = request.getParameter("cj");
String pingpang = request.getParameter("pingpanng");
String ball = request.getParameter("ball");
String song = request.getParameter("song");
out.write("<h1>"+id+"</h1>");
out.write("<h1>"+username+"</h1>");
out.write("<h1>"+password+"</h1>");
out.write("<h1>"+sex+"</h1>");
out.write("<h1>成绩</h1>");
out.write("<h1>乒乓:"+pingpang+"</h1>");
out.write("<h1>篮球:"+ball+"</h1>");
out.write("<h1>唱歌:"+song+"</h1>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
MVC
1、 MVC架构介绍
MVC :Model - view - Controller 模型-视图-控制器
1、Model(模型)
在web应用中处理数据逻辑的部分,Service层,Dao层;
Service层用于数据库联动,放置业务代码,处理数据库的增删改查
Dao层,写接口,Dao层实现接口
2、view(视图)
在web应用中处理响应给用户的页面的部分;
3、Controller(控制层)
就是servlet,
2、MVC案例——页面登录注册
1、导包
1、servlet包
2、el的包
3、mysql的包
4、druid的包 配置文件
5、jsp的包