第二讲 下
1.
相对第一种的使用Servlet接口的方法要简单,代码:
======================================================================
- //这是第二种开发servlet的方法,通过继承GenericServlet开发
- package
com.prince; - import
javax.servlet.GenericServlet; - import
java.io.*; - import
javax.servlet.*; - public
class hello2 extends GenericServlet{ - //只重写service方法即可
- //重写即是覆盖
- public
void service(ServletRequest req ,ServletResponse res){ - //返回helloworld!generic
- try{
- PrintWriter
pw=res.getWriter(); - pw.println("helloworld!generic");
- System.out.println
("service!GenericServlet"); - }
- catch(Exception
ex){ - ex.printStackTrace();
- }
- }
- }
Web.xml文件中添加多一段访问反馈:
======================================================================
- <servlet>
- <servlet-name>hello02</servlet-name>
<!-- servlet名字--> - <servlet-class>com.prince.hello2</servlet-class><!--
servlet 路径,包+类名 --> - </servlet>
- <servlet-mapping>
<!-- servlet映射 --> -
<servlet-name>hello02</servlet-name> - <url-pattern>/hello2</url-pattern>
<!-- 客户端访问servlet的URL --> - </servlet-mapping>
======================================================================
使用
2.
这是用的最多的一种方法
需要重写doGet
表单提交数据get请求和post请求的区别:
1.从安全来看get小于post,get提交的数据会在浏览器地址栏显示
2.从提交内容看,get小于post,get数据不能大于2K,post不限制,实际编程建议不大于64K
3.从相应速度看,get大于post,get要求服务器立即响应,post会形成队列
实现一个案例:
======================================================================
- //这是第三种开发servlet的方法,通过继承HttpServlet
- package
com.prince; - import
javax.servlet.http.*; - import
java.io.*; - public
class hello3 extends HttpServlet{ - //
重写处理GET请求 - public
void doGet (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - try{
- PrintWriter
pw=res.getWriter(); - pw.println("hello,http");
- }
- catch(Exception
ex) - {
- ex.printStackTrace();
- }
- }
- //处理post请求
- public
void doPost (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - this.doGet(req,res);//将两者结合,在get中放业务逻辑,post用来发送
- }
- }
同样,修改web.xml:
======================================================================
- <servlet>
- <servlet-name>hello03</servlet-name>
- <servlet-class>com.prince.hello3</servlet-class>
- </servlet>
- <servlet-mapping>
-
<servlet-name>hello03</servlet-name> - <url-pattern>/hello3</url-pattern>
- </servlet-mapping>
======================================================================
======================================================================
======================================================================
一个简单的登录界面的实现
登录界面
1.界面文件
2.界面处理文件
3.跳转到的页面
每完成一个servlet,都需要添加一个对应的响应到web.xm;
首先是页面文件:
======================================================================
-
//登录界面 - package
com.prince; - import
javax.servlet.http.*; - import
java.io.*; - public
class login extends HttpServlet{ - public
void doGet (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - try{
- res.setContentType("text/html;charset=gbk");
- //中文乱码解决,css方法
- PrintWriter
pw=res.getWriter(); - //
返回登录界面 - pw.println("<html>");
- pw.println("<body>");
- pw.println("<h1>登录界面</h1>");
- pw.println("<form
action=logincl method=post>"); - pw.println("用户名:<input
type=text name=username><br>"); - pw.println("密码:<input
type=password name=passwd><br>"); - pw.println("<input
type=submit value=login><br>"); - pw.println("</form>");
- //pw.println("");
- pw.println("</body>");
- pw.println("</html>");
- }
- catch(Exception
ex) - {
- ex.printStackTrace();
- }
- }
- //处理post请求
- public
void doPost (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - this.doGet(req,res);//将两者结合,在get中放业务逻辑,post用来发送
- }
- }
Xml中添加:
======================================================================
- <servlet>
- <servlet-name>login1</servlet-name>
- <servlet-class>com.prince.login</servlet-class>
- </servlet>
- <servlet-mapping>
-
<servlet-name>login1</servlet-name> - <url-pattern>/login</url-pattern>
- </servlet-mapping>
======================================================================
然后是登录处理文件:
======================================================================
- //登录
处理 - package
com.prince; - import
javax.servlet.http.*; - import
java.io.*; - public
class logincl extends HttpServlet{ - public
void doGet (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - try{
- res.setContentType("text/html;charset=gbk");
- //中文乱码解决,css方法
- //接收浏览器返回的用户名和密码
- String
u=req.getParameter("username"); - String
p=req.getParameter("passwd"); - //
验证: - if(u.equals("wk")&&p.equals("123456")){
- //合法跳转
- res.sendRedirect("wellcome");//
写你要到的servlet的那个URL - }
- else{
- //不合法
- res.sendRedirect("login");
- }
- }
- catch(Exception
ex) - {
- ex.printStackTrace();
- }
- }
- //处理post请求
- public
void doPost (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - this.doGet(req,res);//将两者结合,在get中放业务逻辑,post用来发送
- }
- }
======================================================================
Xml中添加:
======================================================================
- <servlet>
- <servlet-name>logincl</servlet-name>
- <servlet-class>com.prince.logincl</servlet-class>
- </servlet>
- <servlet-mapping>
-
<servlet-name>logincl</servlet-name> - <url-pattern>/logincl</url-pattern>
- </servlet-mapping>
======================================================================
最后是wellcome界面
======================================================================
- //wellcome
- package
com.prince; - import
javax.servlet.http.*; - import
java.io.*; - public
class wellcome extends HttpServlet{ - //
重写处理GET请求 - public
void doGet (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - try{
- PrintWriter
pw=res.getWriter(); - pw.println("wellcome,http");
- }
- catch(Exception
ex) - {
- ex.printStackTrace();
- }
- }
- //处理post请求
- public
void doPost (HttpServletRequest req, HttpServletResponse res){ - //req
用来获得浏览器的信息 - //res
用来发送信息 - this.doGet(req,res);//将两者结合,在get中放业务逻辑,post用来发送
- }
- }
Xml中添加:
======================================================================
- <servlet>
- <servlet-name>welcome1</servlet-name>
- <servlet-class>com.prince.wellcome</servlet-class>
- </servlet>
- <servlet-mapping>
-
<servlet-name>welcome1</servlet-name> - <url-pattern>/wellcome</url-pattern>
- </servlet-mapping>
======================================================================
PS:
1.经验,每次修改后都要使用jcreater编译一遍,确保生成了class文件
2.每次修改后都要reload一次服务器,才能重新加载新的文件
3.Eclipse中的console
4.Jcreater中输入out
5.Jcreater
}
catch(Exception
{
}
6.一种将post和get结合使用的方法:在post中调用get:
public
this.doGet(req,res);//将两者结合,在get中放业务逻辑,post用来专门发送
}
7.中文乱码问题:
8.使用String
9.页面跳转的方法:
res.sendRedirect("wellcome");//
10.最后交代下,我使用eclipse启动tomcat,在console查看tomcat的后台,使用jcreater来编译java文件,使用notepad来编写java文件。
虽然麻烦,但解决了jcreater的中文输入麻烦的问题,却也遇到了notepad无法快速录入代码的问题,但这对锻炼基础功很有好处,毕竟我的java基础很不牢靠(原来写c#的。。。)。