Java Web Servlet GenericServlet HttpServlet-Servlet(下)
2018-01-04 14:34
357 查看
一、
ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现。
(1)getWriter():返回PrintWriter对象,调用该对象的print()方法,将把print()中的参数直接打印到客户的浏览器上。
(2)设置响应的内容类型:
response.setContentType("application/msword"); //response返回word类型
(3)void sendRedirect(Stringlocation):请求的重定向。(此方法为HttpServletResponse中定义)
二:
GenericServlet:
1、是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中的service方法为抽象方法。
2、如果新建的Servlet程序直接继承GenericServlet会使开发更简洁。
3、具体实现
/**
* 自定义的一个Servlet接口的实现类:让开发的任何Servlet都继承该类,以简化开发
* @authorstephone
*/
publicabstractclass MyGenericServletimplements
Servlet,ServletConfig{
/*以下方法为Servlet接口的方法*/
@Override
publicvoid destroy() {}
@Override
public ServletConfig getServletConfig() {
//TODO Auto-generatedmethod stub
returnservletConfig;
}
private ServletConfigservletConfig;
@Override
public String getServletInfo() {
returnnull;
}
@Override
publicvoid init(ServletConfigarg0)
throws ServletException {
this.servletConfig =arg0;
init();
}
//初始化
publicvoid init() throws
ServletException{
}
@Override
publicabstractvoid service(ServletRequestarg0,
ServletResponsearg1)
throws ServletException, IOException;
/*以下方法为ServletConfig接口的方法*/
@Override
public String getInitParameter(Stringarg0) {
returnservletConfig.getInitParameter(arg0);
}
@Override
public Enumeration<String> getInitParameterNames() {
returnservletConfig.getInitParameterNames();
}
@Override
public ServletContext getServletContext() {
returnservletConfig.getServletContext();
}
@Override
public String getServletName() {
returnservletConfig.getServletName();
}
}
(1)在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化。
(2)利用servletConfig成员变量的方法实现了ServletConfig接口的方法
(3)还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()在其中实现对Servlet的初始化。
(4)不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(ServletConfig),而还是用了ServletConfig接口的方法,则会出现空指针异常。
(5)新建的init(){}并非Servlet的生命周期方法,而init(ServletConfig)是生命周期相关的方法.
(6)GenericServlet接口图
三、HttpServlet
(1)是一个Servlet,继承自GenericServlet,针对于HTTP协议所定制
(2)在service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse,并调用了重载的service(HttpServletRequest,HttpServletResponse)
在service(HttpServletRequest,HttpServletResponse)获取了请求方式:request.getMethod(),根据请求方式又创建了doXxx()方法(xxx为具体的请求方式,比如doGet,doPost),具体实现:
publicclass MyHttpServletextends MyGenericServlet
{
@Override
publicvoid service(ServletRequestarg0,
ServletResponsearg1)
throws ServletException, IOException {
if(arg0instanceof
HttpServletRequest)
{
HttpServletRequest request = (HttpServletRequest)arg0;
if(arg1instanceof
HttpServletResponse)
{
HttpServletResponse
response = (HttpServletResponse)arg1;
service(request,response);
}
}
}
publicvoid service(HttpServletRequestrequest,
HttpServletResponseresponse)
throws ServletException, IOException {
//1、获取请求方式
String method =request.getMethod();
//2、根据请求方式再调用对应的处理方法
if("GET".equalsIgnoreCase(method))
{
doGet(request,response);
}elseif("POST".equalsIgnoreCase(method))
{
doPost(request,response);
}
}
publicvoid doPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throws IOException {
//TODO Auto-generatedmethod stub
}
publicvoid doGet(HttpServletRequestrequest,
HttpServletResponseresponse) {
//TODO Auto-generatedmethod stub
}
}
(3)实际开发中,直接继承HttpServlet,并根据请求方式复写doXxx()方法接口。
(4)优点:直接有针对性的覆盖doXxx()方法;直接使用HttpServletRequest和HttpServletResponse,不再需要强转。
四、HttpServlet
例:在MySQL数据库中创建一个user数据表,添加3个字段:id,username,password,并录入;定义一个login.html,里边定义两个请求字段:user,password。发送请求到loginServlet,在创建一个LoginServlet(需要继承自HttpServlet,并重写其doPost方法),在其中获取请求的user,password。;利用JDBC从test_users中查询有没有和页面输入的user,password对应的记录,SELECTcount(id) FROM
test_users WHERE user = ? AND password = ? 若有,响应Hello,xxx,否则,Sorry,xxx。
ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现。
(1)getWriter():返回PrintWriter对象,调用该对象的print()方法,将把print()中的参数直接打印到客户的浏览器上。
(2)设置响应的内容类型:
response.setContentType("application/msword"); //response返回word类型
(3)void sendRedirect(Stringlocation):请求的重定向。(此方法为HttpServletResponse中定义)
二:
GenericServlet:
1、是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中的service方法为抽象方法。
2、如果新建的Servlet程序直接继承GenericServlet会使开发更简洁。
3、具体实现
/**
* 自定义的一个Servlet接口的实现类:让开发的任何Servlet都继承该类,以简化开发
* @authorstephone
*/
publicabstractclass MyGenericServletimplements
Servlet,ServletConfig{
/*以下方法为Servlet接口的方法*/
@Override
publicvoid destroy() {}
@Override
public ServletConfig getServletConfig() {
//TODO Auto-generatedmethod stub
returnservletConfig;
}
private ServletConfigservletConfig;
@Override
public String getServletInfo() {
returnnull;
}
@Override
publicvoid init(ServletConfigarg0)
throws ServletException {
this.servletConfig =arg0;
init();
}
//初始化
publicvoid init() throws
ServletException{
}
@Override
publicabstractvoid service(ServletRequestarg0,
ServletResponsearg1)
throws ServletException, IOException;
/*以下方法为ServletConfig接口的方法*/
@Override
public String getInitParameter(Stringarg0) {
returnservletConfig.getInitParameter(arg0);
}
@Override
public Enumeration<String> getInitParameterNames() {
returnservletConfig.getInitParameterNames();
}
@Override
public ServletContext getServletContext() {
returnservletConfig.getServletContext();
}
@Override
public String getServletName() {
returnservletConfig.getServletName();
}
}
(1)在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化。
(2)利用servletConfig成员变量的方法实现了ServletConfig接口的方法
(3)还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()在其中实现对Servlet的初始化。
(4)不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(ServletConfig),而还是用了ServletConfig接口的方法,则会出现空指针异常。
(5)新建的init(){}并非Servlet的生命周期方法,而init(ServletConfig)是生命周期相关的方法.
(6)GenericServlet接口图
三、HttpServlet
(1)是一个Servlet,继承自GenericServlet,针对于HTTP协议所定制
(2)在service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse,并调用了重载的service(HttpServletRequest,HttpServletResponse)
在service(HttpServletRequest,HttpServletResponse)获取了请求方式:request.getMethod(),根据请求方式又创建了doXxx()方法(xxx为具体的请求方式,比如doGet,doPost),具体实现:
publicclass MyHttpServletextends MyGenericServlet
{
@Override
publicvoid service(ServletRequestarg0,
ServletResponsearg1)
throws ServletException, IOException {
if(arg0instanceof
HttpServletRequest)
{
HttpServletRequest request = (HttpServletRequest)arg0;
if(arg1instanceof
HttpServletResponse)
{
HttpServletResponse
response = (HttpServletResponse)arg1;
service(request,response);
}
}
}
publicvoid service(HttpServletRequestrequest,
HttpServletResponseresponse)
throws ServletException, IOException {
//1、获取请求方式
String method =request.getMethod();
//2、根据请求方式再调用对应的处理方法
if("GET".equalsIgnoreCase(method))
{
doGet(request,response);
}elseif("POST".equalsIgnoreCase(method))
{
doPost(request,response);
}
}
publicvoid doPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throws IOException {
//TODO Auto-generatedmethod stub
}
publicvoid doGet(HttpServletRequestrequest,
HttpServletResponseresponse) {
//TODO Auto-generatedmethod stub
}
}
(3)实际开发中,直接继承HttpServlet,并根据请求方式复写doXxx()方法接口。
(4)优点:直接有针对性的覆盖doXxx()方法;直接使用HttpServletRequest和HttpServletResponse,不再需要强转。
四、HttpServlet
例:在MySQL数据库中创建一个user数据表,添加3个字段:id,username,password,并录入;定义一个login.html,里边定义两个请求字段:user,password。发送请求到loginServlet,在创建一个LoginServlet(需要继承自HttpServlet,并重写其doPost方法),在其中获取请求的user,password。;利用JDBC从test_users中查询有没有和页面输入的user,password对应的记录,SELECTcount(id) FROM
test_users WHERE user = ? AND password = ? 若有,响应Hello,xxx,否则,Sorry,xxx。
public class LoginServlet3 extends HttpServlet{ /** * */ private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); java.sql.Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; String sql = "SELECT count(id) FROM user WHERE username = ?" + "AND password = ?"; PrintWriter out = resp.getWriter(); try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql:///myway"; String user = "root"; String password2 = "root"; connection = DriverManager.getConnection(url, user, password2); statement = ((java.sql.Connection) connection).prepareStatement(sql); statement.setString(1, username); statement.setString(2, password); resultSet = statement.executeQuery(); if(resultSet.next()) { int count = resultSet.getInt(1); if(count>0) { out.print("Hello:"+username); }else { out.print("Sorry:"+username); } } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(resultSet != null) { resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(statement != null) { statement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(connection != null) { connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
注:最后实例涉及到JDBC编程,只需将JDBC的jar包驱动拷贝到lib目录下即可,涉及到的资源的链接为:链接:https://pan.baidu.com/s/1jIEf3YA 密码:ewcs;其中SQLyog安装教程链接为:http://blog.csdn.net/lihua5419/article/details/73881837
相关文章推荐
- javaWeb---GenericServlet和HttpSevlet
- 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>
- jax-rs(Java API for RESTful Web Services) 实践教程 之四 —— @Context注入HttpServletRequest 使REST保持状态!
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- java报错-->Error creating bean with name 'org.springframework.web.servlet.resource.ResourceHttpRequest
- JavaWeb开发之六:HttpServletRequest对象
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 传智播客Java web之 HttpServletRequest的应用
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- java.lang.ClassCastException: org.apache.shiro.web.servlet.ShiroHttpServletRequest cannot be cast to
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 深入分析JavaWeb Item7 -- HttpServletResponse详解
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Java for Web学习笔记(六):Servlet(4)HttpServletResponse
- JavaWeb_day1-HTTP&Servlet
- 【Java Web】The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 10009---JavaWeb基础--GenericServlet