在B/S结构中有哪些角色呢?
浏览器开发团队(谷歌,百度,火狐,IE)WEB Server 开发团队(Tomcat ,Jetty,WebLogic...)DB Server 开发团队(My SQL,Oracle...)webapps的开发团队(程序员...)
角色与角色之间需要遵守哪些规范,哪些协议?
先思考一个问题:假设我们的手机充电器坏掉了,在别的厂家买了一个充电器,不仅我们手机能用这个充电器,别的手机也能用。这说明了什么?是不是说明了手机的厂家与充电器的厂家都共同遵守了一个规范。才能使充电器与手机匹配上WEB Server 服务器与 webapps 都共同遵守一套规范,这个规范就是 Serverlet ,SUN公司制定,能保证 我们在 Tomcat 服务器上开发的webapps 在其他服务器上也能运行Browser 与 WEB Server 之间有一套传输协议:HTTP(超文本链接协议)W3C组织制定DB Server 与 WEB Server 之间的规范:JDBC,SUN公司制定通过我们分析,路径 与 java小程序之间的对应关系应该有什么指定呢?
将路径 和 java小程序【某个Servlet 】对应的关系 写入配置文件中,Tomcat 通过解析配置文件匹配与路径对应的java小程序【某个Servlet】对于我们程序员来说,只需要干俩件事:
1、编写一个类实现 Servlet 接口2、将 路径 和 类 的对应关系写到配置文件中注意:这个配置文件不能瞎写,文件名是固定的,文件的存放路径也是固定的。所以,其实Servlet不仅仅是一个接口,同时还规定了配置文件以及webapps 存放位置的一些个规范。 二、Servlet 的简单应用
开发一个带有Servlet【java小程序】的webapp
第一步:在webapps目录下新建一个目录,crm【目录名随意】。
crm 就是 webapp 的根目录第二步:在 crm 目录下新建一个目录:WEB-INF。
注意:名字不能随便乱写,必须大写,这是Servlet 中规范的。第三步:在WEB-INF目录下新建一个目录:classes
这个目录名字也不能随便写,都是小写,也是规范之一。这个目录下存放的是字节码文件,Java编译之后的文件第四步:在WEB-INF 目录下新建一个目录:lib
这个目录不是必须的,但是如果 webapp 需要第三方的 jar 包的话,这个 jar 包需要放到这个目录下边第五步:在WEB-INF 目录下新建一个文件:web.xml
这个文件是必须要有的,名字必须一模一样,这个 web.xml 文件 就是配置文件,在这个配置文件中 描述了 Servlet 与 路径之间的关系。【可以从其他webapp中拷贝这个文件,最好别手写】
第六步:编写一个 java 小程序,这个程序必须要实现 Servlet 接口
Servlet 接口 属于是 JavaEE中的规范了,并不在JDK中。Tomcat 也需要实现Servlet 规范。所以在Tomcat 中也实现了Servlet 接口。
在Tomcat 的lib 目录下有这个servlet-api.jar 包,解压之后你会在 Javaax-Servlet 目录下看到有 Servlet .class。这个完整的类名是:jakarta.serverlet 【自从javaEE9 之后改成 :jakarta】编写 这个 java小程序,在哪里写都可以,但是需要将编译之后的 字节码文件放到 classes目录下第七步:编辑配置文件,让 请求路径 和 Servlet 类名能够匹配上
javajava 完整包名.类名 javajava /a/b/c/d
地址栏上的 url 要与 web.xml 中
http://127.0.0.1:8080/crm//a/b/c/d
地址栏上的url 与
创建工程,按下图直接点OK即可.创建完之后,IDEA 会自动生成一个符合Servlet 规范的目录webapp的目录结构注意:在IDEA生成的目录中有一个 web 目录,它就是webapp的根
编写Servlet之前先把 Tomcat 中的 jar 包引进来
File ——Project Structure 将类库引进模块中在WEB-INF 目录下新建一个 lib 子目录,将连接数据库的jar包引进来
实现 Servlet 中的 5 个方法,在 service() 方法中编写代码public class StudentServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//设置相应内容类型
servletResponse.setContentType("text/html");
//打印到浏览器
PrintWriter writer = servletResponse.getWriter();
//连接数据库
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/studentgrade", "root", "root");
String sql = "select * from course";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//处理结果集
while (rs.next()) {
String cno = rs.getString("cno");
String cname = rs.getString("cname");
String classHour = rs.getString("classHour");
//打印
writer.print(cno + "," + cname + "," + classHour + "
");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
} 编辑配置文件 web.xml
StudentList yangzhaoguang.servlet.StudentServlet StudentList /servlet/Student
在 webapp 中新建 HTML 网页,注意:不能在WEB-INF 中创建
Title
StudentList
部署Tomcat
部署完成后就启动Tomcat 服务器,在地址栏上输入
http://localhost:8080/xmm/servlet/Student
最终将数据库中的内容成功的显示到了页面上。
以下是 Tomcat 部署的配置信息



