-
目录
第二步:准备一套HTML页面(项目原型)【前端开发工具使用HBuilder】
第一:先修改前端页面的超链接,因为用户先点击的就是这个超链接。
第三:编写DeptListServlet类继承HttpServlet类。然后重写doGet方法。
第四:在DeptListServlet类的doGet方法中连接数据库,查询所有的部门,动态的展示部门列表页面.
附录:常见网页错误
-
使用纯粹的Servlet完成单表【对部门的】的增删改查操作。(B/S结构的。)
-
实现步骤
-
第一步:准备一张数据库表。(sql脚本)
# 部门表 drop table if exists dept; create table dept( deptno int primary key, dname varchar(255), loc varchar(255) ); insert into dept(deptno, dname, loc) values(10, 'XiaoShouBu', 'BEIJING'); insert into dept(deptno, dname, loc) values(20, 'YanFaBu', 'SHANGHAI'); insert into dept(deptno, dname, loc) values(30, 'JiShuBu', 'GUANGZHOU'); insert into dept(deptno, dname, loc) values(40, 'MeiTiBu', 'SHENZHEN'); commit; select * from dept;
-
第二步:准备一套HTML页面(项目原型)【前端开发工具使用HBuilder】
-
把HTML页面准备好
-
然后将HTML页面中的链接都能够跑通。(页面流转没问题。)
-
应该设计哪些页面呢?
-
欢迎页面:index.html
-
列表页面:list.html(以列表页面为核心,展开其他操作。)
-
新增页面:add.html
-
修改页面:edit.html
-
详情页面:detail.html
-
-
-
第三步:分析我们这个系统包括哪些功能?
-
什么叫做一个功能呢?
-
只要 这个操作连接了数据库,就表示一个独立的功能。
-
-
包括哪些功能?
-
查看部门列表
-
新增部门
-
删除部门
-
查看部门详细信息
-
跳转到修改页面
-
修改部门
-
-
-
第四步:在IDEA当中搭建开发环境
-
创建一个webapp(给这个webapp添加servlet-api.jar和jsp-api.jar到classpath当中。)
-
向webapp中添加连接数据库的jar包(mysql驱动)
-
必须在WEB-INF目录下新建lib目录,然后将mysql的驱动jar包拷贝到这个lib目录下。这个目录名必须叫做lib,全部小写的。
-
-
JDBC的工具类
-
将所有HTML页面拷贝到web目录下。
-
-
第五步:实现第一个功能:查看部门列表
-
我们应该怎么去实现一个功能呢?
-
建议:你可以从后端往前端一步一步写。也可以从前端一步一步往后端写。都可以。但是千万要记住不要想起来什么写什么。你写代码的过程最好是程序的执行过程。也就是说:程序执行到哪里,你就写哪里。这样一个顺序流下来之后,基本上不会出现什么错误、意外。
-
从哪里开始?
-
假设从前端开始,那么一定是从用户点击按钮那里开始的。
-
-
-
第一:先修改前端页面的超链接,因为用户先点击的就是这个超链接。
<a href="/oa/dept/list">查看部门列表</a>
-
第二:编写web.xml文件
-
<servlet> <servlet-name>list</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>list</servlet-name> <!--web.xml文件中的这个路径也是以“/”开始的,但是不需要加项目名--> <url-pattern>/dept/list</url-pattern> </servlet-mapping>
-
第三:编写DeptListServlet类继承HttpServlet类。然后重写doGet方法。
package com.bjpowernode.oa.web.action; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class DeptListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
-
第四:在DeptListServlet类的doGet方法中连接数据库,查询所有的部门,动态的展示部门列表页面.
-
分析list.html页面中哪部分是固定死的,哪部分是需要动态展示的。
-
list.html页面中的内容所有的双引号要替换成单引号,因为out.print("")这里有一个双引号,容易冲突。
-
现在写完这个功能之后,你会有一种感觉,感觉开发很繁琐,只使用servlet写代码太繁琐了。
-
while(rs.next()){ String deptno = rs.getString("a"); String dname = rs.getString("dname"); String loc = rs.getString("loc"); out.print(" <tr>"); out.print(" <td>"+(++i)+"</td>"); out.print(" <td>"+deptno+"</td>"); out.print(" <td>"+dname+"</td>"); out.print(" <td>"); out.print(" <a href=''>删除</a>"); out.print(" <a href='edit.html'>修改</a>"); out.print(" <a href='detail.html'>详情</a>"); out.print(" </td>"); out.print(" </tr>"); }
-
-
-
第六步:查看部门详情。
-
建议:从前端往后端一步一步实现。首先要考虑的是,用户点击的是什么?用户点击的东西在哪里?
-
一定要先找到用户点的“详情”在哪里。找了半天,终于在后端的java程序中找到了
-
<a href='写一个路径'>详情</a>
-
详情 是需要连接数据库的,所以这个超链接点击之后也是需要执行一段java代码的。所以要将这个超链接的路径修改一下。
-
注意:修改路径之后,这个路径是需要加项目名的。"/oa/dept/detail"
-
-
技巧:
-
out.print("<a href='"+contextPath+"/dept/detail?deptno="+deptno+"'>详情</a>");
-
重点:向服务器提交数据的格式:uri?name=value&name=value&name=value&name=value
-
这里的问号,必须是英文的问号。不能中文的问号。
-
-
-
解决404的问题。写web.xml文件。
-
<servlet> <servlet-name>detail</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptDetailServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>detail</servlet-name> <url-pattern>/dept/detail</url-pattern> </servlet-mapping>
-
编写一个类:DeptDetailServlet继承HttpServlet,重写doGet方法。
package com.bjpowernode.oa.web.action; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class DeptDetailServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //中文思路(思路来源于:你要做什么?目标:查看部门详细信息。) // 第一步:获取部门编号 // 第二步:根据部门编号查询数据库,获取该部门编号对应的部门信息。 // 第三步:将部门信息响应到浏览器上。(显示一个详情。) } }
-
在doGet方法当中:连接数据库,根据部门编号查询该部门的信息。动态展示部门详情页。
-
-
部分代码截图:
-
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>list</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>list</servlet-name> <url-pattern>/dept/list</url-pattern> </servlet-mapping> <servlet> <servlet-name>detail</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptDetailServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>detail</servlet-name> <url-pattern>/dept/detail</url-pattern> </servlet-mapping> </web-app>
-
DBUtil.java
-
<?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>list</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>list</servlet-name> <url-pattern>/dept/list</url-pattern> </servlet-mapping> <servlet> <servlet-name>detail</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptDetailServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>detail</servlet-name> <url-pattern>/dept/detail</url-pattern> </servlet-mapping> </web-app>
-
DeptDetilSevlet.java
package com.bjpowernode.oa.web.action; import com.bjppowernode.oa.utils.DBUtil; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @WebServlet(name = "DeptDetailServlet") public class DeptDetailServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(" <!DOCTYPE html> "); out.print("<html>"); out.print(" <head>"); out.print(" <meta charset='utf-8'>"); out.print(" <title>部门详情</title>"); out.print(" </head>"); out.print(" <body>"); out.print(" <h1>部门详情</h1>"); out.print(" <hr>"); //获取部门编号 // /oa/dept/detail?fdsafdsas = 30 // 虽然是提交的30,但是服务器获取的是“30”这个字符串。 String deptno = request.getParameter("fdsafdsas"); //连接数据库,根据部门编号查询部门信息。 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn= DBUtil.getConnection(); String sql = "select dname,loc from dept where deptno = ?"; ps = conn.prepareStatement(sql); ps.setString(1,deptno); rs = ps.executeQuery(); //这个结果集一定只有一条记录。 if(rs.next()){ String dname = rs.getString("dname"); String loc = rs.getString("loc"); out.print("部门编号:"+deptno+"<br>"); out.print("部门名称:"+dname+"<br>"); out.print("部门位置:"+loc+"<br>"); } } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.close(conn, ps ,rs); } out.print(" <input type='button' value='后退' onclick='window.history.back()'/>"); out.print(" </body>"); out.print("</html>"); } }
DeptListServlet.java
-
package com.bjpowernode.oa.web.action; import com.bjppowernode.oa.utils.DBUtil; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.ws.spi.http.HttpExchange; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DeptListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取应用的根路径 String contextPath = request.getContextPath(); //设置响应的内容类型以及字符集,防止中文乱码问题。 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(" <!DOCTYPE html>"); out.print("<html> "); out.print(" <head>"); out.print(" <meta charset='utf-8'>"); out.print(" <title>部门列表页面</title>"); out.print(" </head>"); out.print(" <body>"); out.print(" <h1 align ='center'>部门列表</h1>"); out.print(" <hr>"); out.print(" <table border='1px' align ='center' width ='50%'>"); out.print(" <tr>"); out.print(" <th>序号</th>"); out.print(" <th>部门编号</th>"); out.print(" <th>部门名称</th>"); out.print(" <th>操作</th>"); //连接数据可,查询所有的部门 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //获取连接 conn = DBUtil.getConnection(); //获取预编译的数据库操作对象 String sql = "select deptno ,dname,loc from dept"; ps = conn.prepareStatement(sql); //执行SQL语句 rs = ps.executeQuery(); //处理结果集 while (rs.next()) { String deptno = rs.getString("deptno"); String dname = rs.getString("dname"); String loc = rs.getString("loc"); int i= 0; out.print(" <tr>"); out.print(" <td>"+(++i)+"</td>"); out.print(" <td>"+deptno+"</td>"); out.print(" <td>"+dname+"</td>"); out.print(" <td>"); out.print(" <a href=''>删除</a>"); out.print(" <a href='edit.html'>修改</a>"); out.print(" <a href='"+contextPath+"/dept/detail?fdsafdsas="+deptno+"'>详情</a>"); out.print(" </td>"); out.print(" </tr>"); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(conn, ps, rs); } out.print(" </table>"); out.print(" <hr>"); out.print(" <a href='add.html'>新增部门</a>"); out.print(" </body>"); out.print("</html>"); } }
-
第七步:删除部门
-
怎么开始?从哪里开始?从前端页面开始,用户点击删除按钮的时候,应该提示用户是否删除。因为删除这个动作是比较危险的。任何系统在进行删除操作之前,是必须要提示用户的,因为这个删除的动作有可能是用户误操作。(在前端页面上写JS代码,来提示用户是否删除。)
<a href="javascript:void(0)" onclick="del(30)" >删除</a> <script type="text/javascript"> function del(dno){ if(window.confirm("亲,删了不可恢复哦!")){ document.location.href = "/oa/dept/delete?deptno=" + dno; } } </script>
-
以上的前端程序要写到后端的java代码当中:
-
DeptListServlet类的doGet方法当中,使用out.print()方法,将以上的前端代码输出到浏览器上。
-
-
解决404的问题:
-
web.xml文件
<servlet> <servlet-name>delete</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptDelServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>delete</servlet-name> <url-pattern>/dept/delete</url-pattern> </servlet-mapping>
-
编写DeptDelServlet继承HttpServlet,重写doGet方法。
-
package com.bjpowernode.oa.web.action; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class DeptDelServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 根据部门编号,删除部门。 } }
-
删除成功或者失败的时候的一个处理(这里我们选择了转发,并没有使用重定向机制。)
// 判断删除成功了还是失败了。 if (count == 1) { //删除成功 //仍然跳转到部门列表页面 //部门列表页面的显示需要执行另一个Servlet。怎么办?转发。 request.getRequestDispatcher("/dept/list").forward(request, response); }else{ // 删除失败 request.getRequestDispatcher("/error.html").forward(request, response); }
package com.bjpowernode.oa.web.action; import com.bjppowernode.oa.utils.DBUtil; import jdk.nashorn.internal.ir.CallNode; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.*; @WebServlet(name = "DeptDelServlet") public class DeptDelServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //根据部门编号删除部门 //获取部门编号 String deptno = request.getParameter("deptno"); //连接数据库删除数据 Connection conn = null; PreparedStatement ps =null; int count = 0; try { conn = DBUtil.getConnection(); //开启事务(自动提交机制关闭) conn.setAutoCommit(false); String sql ="delete from dept where deptno =?"; ps =conn.prepareStatement(sql); ps.setString(1,deptno); //返回值是影响了数据库表当中多少条记录。 count = ps.executeUpdate(); //事务提交 conn.commit(); } catch (SQLException e) { //遇到异常要回滚 if(conn != null){ try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } e.printStackTrace(); }finally{ DBUtil.close(conn,ps,null); } //判断删除成功了还是删除失败了 if(count ==1){ //删除成功 //仍然跳转的部门列表页面 //部门列表页面的现实需要执行一个Servlet request.getRequestDispatcher("/dept/list").forward(request,response); }else{ //删除失败 request.getRequestDispatcher("/erro.html").forward(request,response); } } }
<!-- /dept/delete--> <servlet> <servlet-name>delete</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptDelServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>delete</servlet-name> <url-pattern>/dept/delete</url-pattern> </servlet-mapping>
-
-
第八步:新增部门
-
注意:最后保存成功之后,转发到 /dept/list 的时候,会出现405,为什么?
-
第一:保存用的是post请求。底层要执行doPost方法。
-
第二:转发是一次请求,之前是post,之后还是post,因为它是一次请求。
-
第三:/dept/list Servlet当中只有一个doGet方法。
-
怎么解决?两种方案
-
第一种:在/dept/list Servlet中添加doPost方法,然后在doPost方法中调用doGet。
-
第二种:重定向。
-
-
-
-
第九步:跳转到修改部门的页面
-
-
<servlet> <servlet-name>edit</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptEditServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>edit</servlet-name> <url-pattern>/dept/edit</url-pattern> </servlet-mapping>
-
-
package com.bjpowernode.oa.web.action; import com.bjppowernode.oa.utils.DBUtil; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @WebServlet(name = "DeptEditServlet") public class DeptEditServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取应用的根路径 String contextpath = request.getContextPath(); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(" <!DOCTYPE html>"); out.print(" <html>"); out.print(" <head>"); out.print(" <meta charset='utf-8'>"); out.print(" <title>修改部门</title>"); out.print(" </head>"); out.print(" <body>"); out.print(" <h1>修改部门</h1>"); out.print(" <form action='"+contextpath+"/dept/modity' method='post'>");//向服务器提交数据一定要是post请求 //获取部门编号 String deptno = request.getParameter("deptno"); //连接数据库,根据部门编号查询部门信息 Connection conn =null; PreparedStatement ps = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); //sql语句查询deptno 和loc字段 String sql = "select dname,loc from dept where deptno =?"; //编译 ps = conn.prepareStatement(sql); //给问号赋值 ps.setString(1,deptno); //查询返回结果集 rs = ps.executeQuery(); //结果集中只有一条记录 if(rs.next()) { String dname = rs.getString("dname"); String loc = rs.getString("loc");//参数列表是查询结果集的列名 //输出动态网页 out.print(" 部门编号<input type='text' name='deptno' value='"+deptno+"' readonly/><br>"); out.print(" 部门名称<input type='text' name='dname value='"+dname+"'/><br>"); out.print(" 部门位置<input type='text' name='loc' value='"+loc+ "'/><br>"); } } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.close(conn,ps,rs); } out.print(" <input type='submit' value='修改'/><br>"); out.print(" </form>"); out.print(" </body>"); out.print(" <html>"); } }
-
第十步:修改部门
-
-
<servlet> <servlet-name>modify</servlet-name> <servlet-class>com.bjpowernode.oa.web.action.DeptModifyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>modify</servlet-name> <url-pattern>/dept/modify</url-pattern> </servlet-mapping>
-
-
package com.bjpowernode.oa.web.action; import com.bjppowernode.oa.utils.DBUtil; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet(name = "DeptModifyServlet") public class DeptModifyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决中文乱码 request.setCharacterEncoding("UTF-8"); //获取表单中的数据 String deptno = request.getParameter("deptno"); String dname = request.getParameter("dname"); String loc = request.getParameter("loc"); //连接数据库执行更新语句 Connection conn =null; PreparedStatement ps = null; int count = 0; try { conn = DBUtil.getConnection(); String sql = "update dept set dname = ?,loc = ? where deptno = ?"; ps = conn.prepareStatement(sql); ps.setString(1,dname); ps.setString(2,loc); ps.setString(3,deptno); count = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.close(conn,ps,null); } if(count == 1){ //更新成功 //跳转到部门列表页面(部门列表页面是通过java程序动态生成的,所以还要在执行另外一个Servlet) request.getRequestDispatcher("/dept/list").forward(request,response); }else{ //更新失败 request.getRequestDispatcher("/error.html").forward(request,response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
-
要记住!!!没有难不难,只有熟练不熟练,多敲多练是王道!!!
常见网页错误
404 无法找到文件
页面被删除或不存在
网址输入有误
没插网线或没有联网
400 请求出错
出现这个代码一般是因为鸡同鸭讲、对牛弹琴,门不当户不对,总之一句话:
服务器无法理解
用户的请求
一般出现 400 错误代码的原因是:
我们输入语法格式有误,服务器无法理解咱想表达什么。如果不做修改,刷新再多次也没用。
401 未被授权
一般来说该错误消息表明你首先需要登录(输入有效的用户名和密码)。
如果你不输入这些信息,就会有401错误,这意味着验证信息出错,服务器无法识别你的身份。
403 禁止访问
403表示服务器理解了本次请求,但拒绝了你的访问,大概意思就像:
我喜欢一个人,半夜表白敲他门
他听懂了我的表白,但他表示拒绝并且就是不开门!
405 资源被禁止
405是代表对于请求所标识的资源,不允许使用请求行中所指定的方法。
解决方法:
①确保为所请求的资源设置了正确的 MIME 类型
②联系服务器管理员
408 请求超时
408意味着你的请求发送到该网站花的时间比该网站的服务器准备等待的时间要长,即链接超时。
出现的原因可能是:
① 网络状况不佳,速成网速慢
② 网络服务器访问量激增
500 服务器错误
如果服务器内部出现错误,无法完成请求,可能就会提示错误代码 500。
详细划分具体错误代码,还可以拉出一串服务器错误家族:
500.11 服务器错误:Web 服务器上的应用程序正在关闭。
500.12 服务器错误:Web 服务器上的应用程序正在重新启动。
500.13 服务器错误:Web 服务器太忙。
500.14 服务器错误:服务器上的无效应用程序配置。
500.15 服务器错误:不允许直接请求 GLOBAL.ASA。
500.16 服务器错误:UNC 授权凭据不正确。
500.17 服务器错误:URL 授权存储无法找到。
500.18 服务器错误:URL 授权存储无法打开。
500.19 服务器错误:该文件的数据在配置数据库中配置不正确。
500.20 服务器错误:URL 授权域无法找到。
502 错误网关