Servlet基础概念
1.什么是servlet
Sun(Oracle)公司制定的一种用来 扩展Web服务器功能的组件规范.
2.servlet如何来运行
需要部署到容器(服务器tomcat)中才能运行.
3.HTTP协议
1.他是网络传输协议,特点:一次请求一次响应
2.数据包结构:请求(请求行,消息头,消息正文),响应(状态行,响应头,响应正文)
4.开发Servlet的步骤
① 编写一个实现Servlet接口或继承HttpServlet的Java类
② 使用javac命令编译源文件为字节码文件
③ 将编译完的组件打包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdqnJA1R-1624811316662)(file:///C:\Users\Thinkpad\AppData\Local\Temp\ksohtml5784\wps1.png)]
④ 部署:将appName整个文件夹拷贝到Tomcat的webapps文件夹下
⑤ 启动Tomcat并访问Servlet:在地址栏中输入符合一定规范的地址
(URL在web.xml描述文件中可以找到)
5.容器如何找到service方法
6.如何通信
7.简单的案例1:实现用户登录
7.1首先创建maven项目,导入前端所需要的一些jar包。
7.2将这个maven项目添加到服务器下。
7.3书写前端代码
注意要写在webapp下,因为服务端每次去找地址时,默认是在webapp下去找的。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<form action="LoginServlet" method="post">
姓名:<input type="text" name="userName"/><br>
密码:<input type="password" name="userPwd"/><br>
<input type="submit" value="登录">
</form>
</div>
</body>
</html>
7.4web.xml配置文件
<!--用户登录-->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>day01.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
7.5Servlet业务层
package day01;
/*
* 用户登录
*/
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 org.apache.catalina.filters.SetCharacterEncodingFilter;
public class LoginServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//设置请求字节码为utf-8
//setCharacterEncoding("utf-8");针对post请求
req.setCharacterEncoding("utf-8");//get请求不用,因为服务器中规定了get请求设置为"utf-8";
//获取请求数据
String userName=req.getParameter("userName");
String userPwd=req.getParameter("userPwd");
//假设用户的名字和密码 admin 123456
System.out.println(userName+","+userPwd);
String name="admin";
String pwd="123456";
//响应数据并且设置响应类型和字符集
res.setContentType("text/html;charset=utf-8");
PrintWriter pw=res.getWriter();
if(name.equals(userName)&&pwd.equals(userPwd)){
pw.println("登录成功");
}else{
pw.println("登录失败");
}
}
}
7.6处理结果
我们输入姓名和密码,点击登录后;
LoginServlet会帮助我们处理业务逻辑并返回到结果到前端页面。
8.简单的案例2:页面输出用户的爱好
8.1前端代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="hobbyServlet">
爱好:
足球:<input type="checkbox" name="bby" value="1"/>
篮球<input type="checkbox" name="bby" value="2"/>
乒乓球<input type="checkbox" name="bby" value="3"/>
羽毛球<input type="checkbox" name="bby" value="4"/>
吃<input type="checkbox" name="bby" value="5"/>
<input type="submit" value="确定">
</form>
</body>
</html>
8.2xml配置文件
<servlet>
<servlet-name>bby</servlet-name>
<servlet-class>day01.HobbyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bby</servlet-name>
<url-pattern>/hobbyServlet</url-pattern>
</servlet-mapping>
8.3Servlet业务层
package day01;
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;
public class HobbyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//设置响应浏览器的类型
res.setContentType("text/html");
//通过HttpServletResponse获取字符输出流
PrintWriter pw=res.getWriter();
//获取爱好得数据
String[] str=req.getParameterValues("bby");
if(str!=null){
for(String s:str){
System.out.println(s);
pw.println(s);
}
}
}
}
8.4处理结果
我们选中这四项然后点及确定
我们可以得到我们 所选中的结果;