目录
- 回顾
- jsp里面的缺点:
- 什么是servlet
- Servlet 进行动态网页开发的流程
- 例子:登录功能使用servlet
- 自己写servlet类的规范
- 关系图
- 参数的设置
回顾
我们已经会使用jsp页面,写对应的代码
代码语言:javascript复制jsp就是一个servlet ,servlet就是一个有规范的java类
jsp--》java-->class
因为java里面的类继承了其他的东西,所以这个java就是一个servlet
servlet作用:
------进行动态网页的开发
------代码书写麻烦,这个功能被jsp代替了,先有的servlet
------流程的控制
jsp里面的缺点:
如果页面和逻辑都写到这个里面是乱,所以要分开写 页面写到jsp里面,控制的逻辑写到servlet里面。
web.xml就相当于路径的转发,在jsp里面写完页面,要实现逻辑,所以jsp里面写的路径就是web.xml里面自己定义的路径,然后web.xml里面将路径和servlet关联,就跳转到servlet里面了。在这个里面进行完逻辑的判断之后,再跳转到其他的jsp页面就可以了。
什么是servlet
从以上可知,jsp直接开发是冗余的,所以现在将页面和逻辑分开写,实现分离。所以我们就需要开始单独的学习servlet。
总结: servlet就是一个java类,将jsp技术中的servlet单独提取出来。
Servlet 进行动态网页开发的流程
书写流程: 1、首先写一个class类 去继承一个Httpservlet 2、重写service方法,注意一定要把super.service() 3、进行动态网页的开发–那如何访问这个servlet呢?需要配置 4、 在web.xml中进行配置
代码语言:javascript复制 <servlet>
<servlet-name>Servlet01</servlet-name>
<servlet-class>com.servlet.Servlet01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet01</servlet-name>
<url-pattern>/sevlet/Servlet01</url-pattern>
</servlet-mapping>
注意这个 servlet-name是自己任意命名的 url-pattern也是任意命名的 5、在网页中访问即可 输入 自己定义的url-pattern即可 缺点:由于在servlet中书写网页比较的繁琐所以,这种方式不在使用,被JSP所代替
经过以上的开发流程,我们就写了一个servlet了。这个我们以后就叫做接口,现在你可以理解为一个servlet就是一个接口
例子:登录功能使用servlet
既然我们已经会单独写servlet了,也就是会写接口了,现在我们以登录为例子,进行使用一下。
在之前的登陆例子里面所有的代码都是放到了jsp的页面中,但是JSP是负责显示的,现在用于了流程控制,这样十分不妥,所以我们把代码提取到了servlet里面
以上的图就是这个登录的流程,使用了servlet之后的的流程
servlet 中的代码实现:
代码语言:javascript复制public class DoLogin extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//[1]接受login.jsp页面的发送过来的数据
String uname= request.getParameter("uname");
String pwd= request.getParameter("pwd");
//[2]数据处理,得到结果--使用接受的数据去数据库作比较
boolean flag=false;
if("jing".equals(uname)&&"123".equals(pwd)){
flag=true;
}
//[3]根据返回的结果给用户做出响应
if(flag){
//可以实现页面的跳转--转发 request.getRequestDispatcher("admin/success.jsp").forward(request,response);
//out.print("登录成功");
}else{ request.getRequestDispatcher("admin/login.jsp").forward(request,response);
//out.print("登录失败");
}
}
}
自己写servlet类的规范
第一步,自己写一个类 第二步,自己写的类要继承HttpServlet 第三步,重写HttpServlet里面的方法,一般我们只是重写service()方法,在这个重写的方法里面写对应的代码就可以了 第四步,在web.xml里面配置我们写的servlet,如何配置,看上面写的。
我们自己编写的servlet应该继承HttpServlet,一般要覆盖Service或者doPost/doGet方法。
关系图
参数的设置
我们在servlet里面,可能写一些固定的参数,我们可以把这些参数写到web.xml里面,之后在servlet类里面直接调用web.xml里面的参数,实现参数与servlet代码的分离,解耦。具体实现步骤是:
以解决乱码问题为例:
每一个servlet里面都需要解决中文乱码,每一个servlet类里面都需要写
代码语言:javascript复制// 如何网页渲染的时候出现乱码
resp.setContentType("text/html;charset=utf-8");
每一个类里面都需要写,代码冗余。所以我们把这个提取到web.xml里面,servlet代码里面只需要调用就可以了。
有时候其他的地方还要用这个编码,那么我们就需要将这个提取出来,也就是将这个写到web.xml里面,在类里面使用参数提取就可以。以后我们只是改xml里面的参数就可以了 在xml设置有两种,一个是局部,也就是只是在一个类里面可以进行调用,一个是全局的,所有 的都可以进行调用
第一个 在xml里面配置局部的参数 用这个标签
代码语言:javascript复制 <servlet>
<servlet-name>paramServlet</servlet-name>
<servlet-class>com.jing.www.ParamServlet</servlet-class>
<!-- 初始化参数,只可以被当前的servlet里面读-->
<init-param>
<param-name>enc</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>paramServlet</servlet-name>
<url-pattern>/paramServlet</url-pattern>
</servlet-mapping>
第二个: 是在xml里面配置全局的参数
代码语言:javascript复制<!-- 全局参数 可以被所有的servlet进行读取-->
<context-param>
<param-name>enc2</param-name>
<param-value>utf-8</param-value>
</context-param>
在servlet类里面进行调用的时候,这样调用:
读取参数的代码最好写到一个servlet类里面的初始化函数里面,读取全局的参数和局部的参数如下代码
代码语言:javascript复制 String enc,enc2;
@Override
public void init() throws ServletException {
// 读取初始化的参数
enc = this.getInitParameter("enc");
System.out.println("初始化的参数" enc);
//读取全局的参数
enc2 = this.getServletContext().getInitParameter("enc2");
System.out.println("全局的参数" enc2);
}